2012-09-18 2 views
1

저는 지난 4 일 동안이 작업을 시도했습니다. 그것은 단순한 로그온 페이지입니다. 민감한 정보는 저장되지 않지만 PHP에 문제가 있습니다. "알 수없는 열 '%의 - 내가 디버그에 사용했던 페이지의 출력에서 ​​ PHP MySQL 컬럼이 유효하지 않습니다.

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $uname = $_POST["login"]; 
    $pword = $_POST["pass"]; 
    $uname = htmlspecialchars($uname); 
    $pword = htmlspecialchars($pword); 
    $user_name = "bradf294_access"; 
    $password = "********"; 
    $database = "bradf294_clients"; 
    $server = "localhost"; 
    $db_handle = mysql_connect($server, $user_name, $password); 
    $db_found = mysql_select_db($database, $db_handle); 
    print(mysql_errno()); 
    print($db_found); 
    if(isset($db_found)){ 
     print($db_found."Success"); 
     $SQL = "SELECT * FROM basicinfo WHERE ref = $uname AND pass = $pword"; 
     $result = mysql_query($SQL); 
     print("Query made"); 
     print(mysql_errno()); 
     if ($result) { 
      print("result:".$result); 
     } 
     else { 
      print("Incorrect Login Details"); 
     } 
     if ($result > 0) { 
      print("found user"); 
      $errorMessage= "logged on "; 
      session_start(); 
      $_SESSION['login'] = "1"; 
      header ("Location: progressuser.php"); 
     } 
     else { 
      print("Invalid Logon"); 
     } 
    } else { 
     print("Database not found. The Webmaster has been notified. Please try again later"); 
     $subject = "Automated login error" ; 
     $message = "An error occured whilst trying to connect to the MySQL database, to login to the progress checker" ; 
     mail("[email protected]", $subject, $message); 
    } 

, 1054 오류를 제공하는, 제대로 동작하지 않는 선으로 나타납니다 % s의 ' "나는 복사하면 phpMyAdmin에 $SQL 문자열을 붙여 그것을 완벽하게 작동하더라도

$SQL = "SELECT * FROM basicinfo WHERE ref = $uname AND pass = $pword"; 
$result = mysql_query($SQL) 

'에서 '?

내가 노골적으로 분명한 사실이 있습니까? http://www.bradfieldandbentley.co.uk/test/progress.php으로 이동하여 세부 사항 참조 : TST001 및 패스 : dnatbtr121을 입력하여 직접 출력물을보십시오.

+0

table basicinfo를 표시 할 수 있습니까? – JvdBerg

+0

PHP 중괄호의 균형이 맞지 않습니다. 코드 샘플의 구문이 올바른지 확인하는 것이 중요합니다. –

답변

2

당신은 변수를 인용해야합니다

$SQL = "SELECT * FROM basicinfo WHERE ref = '$uname' AND pass = '$pword'"; 

그러나

mysql_* 기능은 더 이상 사용되지되고있다 - 대신 PDO 또는 mysqli_*로 이동 봐야한다. 이 둘은 보안 코드를 작성하고 인용 문제를 해결하는 것이 훨씬 쉬워집니다.

+0

아하 뭔가 너무 간단! 그리고 고마워요, 당신은 어떤 자원을 추천 해 주시겠습니까? –

+0

php.net에 대한 많은 정보가 있습니다 - PDO 페이지는 http://php.net/manual/en/intro.pdo.php에 있으며 mysqli 빠른 시작 가이드는 http://php.net/manual/에 있습니다. ko/mysqli.quickstart.php – andrewsi

0

WHERE 조건의 값을 일반 MySQL 문과 같이 따옴표로 묶지 않아야합니까? 예. 또한 SQL 인젝션에 대한 많은 의견을 얻을 것이다.

+0

고맙습니다. 그렇습니다. 나는 그것이 전혀 안전하지 않다는 것을 알고 있습니다! 나는 아직 데이터베이스에 가치의 정보를 저장하려고하지 않는다! –

관련 문제