2012-01-22 1 views
1

새로운 호스팅에 많은 문제가 있습니다.하지만 더 자세히 살펴보면 모든 작업과 관련이있는 것 같습니다. 로그인, 등록 및 제출의 유효성을 확인할 때 데이터베이스에서 확인합니다. 다음은 그 예입니다.새로운 호스팅/서버로 이전 됨 - 양식 유효성 검사를 위해 MySQL을 사용할 때 문제가 발생했습니다.

저는 validate forms에 jQuery를 사용합니다. 하나는 사용자가 로그인하려고 할 때 실제로 사용자 이름이 존재하는지 확인하는 데 사용됩니다 (걱정하지 마세요. 서버 쪽도 확인합니다). 내 개발 서버에서, 이것은 완벽하게 작동합니다. jQuery 유효성 검사에 익숙하지 않다면, 기본적으로 JSON 형식의 서버에 true 또는 false를 반환하지만, 그 부분에 대해서는 완전히 지식이 없습니다.

코드 :

//Database Information vars (removed) 

mysql_connect ($dbhost, $dbuser, $dbpass)or die("Could not connect: ".mysql_error()); 
mysql_select_db($dbname) or die(mysql_error()); 

$username = mysql_real_escape_string($login_username); // In validation, I can grab inputs like this. 

$query = "SELECT username FROM registerusers WHERE username='$username';"; 

$res = mysql_query($query); 

if (mysql_num_rows($res) > 0) { 
    $output = true; 
} else { 
    $output = false;  
} 

echo json_encode($output); 

이의 문제는 항상 첫 번째 절을 참조하고 사용자 이름이 존재하지 않는 경우에도, true를 돌려주는 것입니다. 어떤 이유로 든 나는 항상 mysql_num_rows($res)에 대해 1을 반환한다고 생각합니다.

이 정확한 코드 (정확한 것으로 판단하기 위해 수백 번 확인한 새 데이터베이스 변수 제외)는 여전히 내 개발 서버에서 의도 한대로 작동합니다. 나는 그것이 새로운 서버와 관련이 있다고 가정 할 수있다. 그래서 내가 단서가 없기 때문에 Stack Overflow를 묻는 것이다.

+0

이 'JSON'을 확인 했습니까? jQuery가 항상 true로 평가하는 반환 값을 망가뜨리는 오류가있을 수 있습니다 ... – Joep

+0

$ query를 출력하여 쿼리가 의도 한대로 보이는지 확인할 수 있습니까? – Dan

+0

'$ login_value'에 어디에서 값을 부여합니까? – Repox

답변

1

문제는 register_globals가 활성화되어 있다는 것입니다. 이렇게하면 보안 문제가 심각해지며,이 기능이 비활성화되어 사용되지 않습니다.

$login_username에서 $_GET['login_username']으로 변경하면 문제가 해결됩니다.

슈퍼 전역 배열 $ _GET 및 $ _POST를 사용하는 것은 보안 문제는 아니지만 mysql_real_escape_string()과 마찬가지로 입력 내용을 항상 소독해야합니다.

1

MySQL 연결을 변수로 설정하고 연결 변수를 mysql_query 내부의 두 번째 매개 변수로 호출 해 보았습니까? 나는 또한 변수로 연결된 문자열에 $ 쿼리를 변경 한

//Database Information vars (removed) 

$connect = mysql_connect ($dbhost, $dbuser, $dbpass) or die("Could not connect: ".mysql_error()); 
mysql_select_db($dbname) or die(mysql_error()); 

$username = mysql_real_escape_string($login_username); // In validation, I can grab inputs like this. 

$query = "SELECT `username` FROM `registerusers` WHERE `username` = '".$username."';"; 

$res = mysql_query($query, $connect); 

if (mysql_num_rows($res) > 0) { 
    $output = true; 
} else { 
    $output = false;  
} 

echo json_encode($output); 

: 이것은 때때로 특정 디버깅 방법, 오류가 특히 일부 서버에서 나에게 문제를 제공하고 있으며, 경고는 기본적으로 차단 일부 서버는 때로는 ".."로 구분하지 않고 문자열 내부에 변수를 넣는면에서 까다로운 편입니다.

+0

이 Shaun을 살펴 주셔서 감사합니다. 당신이 코멘트를 보면, Repox는 그것이 register_globals가 EWS dev server에서 on으로 설정 되었기 때문에 Repox가 보여주었습니다. 세션이 시작되지 않는 것처럼 이것이 내가 겪어 온 다른 모든 문제의 원인이라고 생각합니다. 나는이 권리를 이해할 수 있도록 당신의 대답을 시도 할 것입니다. –

관련 문제