2016-07-05 3 views
0

내 코드가있는 돼지가 있습니다. 나는 이것에 초보이고 크게 고투하고있다.로그인 양식은 PHP/MySQL을 발행합니다.

몇 가지 문제가 있습니다. 첫째, 한 가지 문제는 SQL 데이터베이스에 연결된 로그인 양식을 사용하려고하지만 잘못된 데이터 또는 데이터가 입력되지 않은 경우 오류가 발생하지 않지만 로그에 표시됩니다. in.

두 번째로, 사용자가 로그인했을 때 각 페이지에 사용자 이름을 표시하려고하는데, 작동하는 것은 데이터베이스에 수동으로 입력 한 사용자에 대한 것입니다. 내 등록 양식을 통해 추가 된 사용자는 phpmyadmin에 표시 되더라도 표시되지 않습니다. 첫 번째 문제에 대한

로그인 페이지 코드는 다음과 같습니다 어떤 조언을

<?php 


echo '<h3>Sign in</h3>'; 

    if($_SERVER['REQUEST_METHOD'] != 'POST') 
    { 
     /*the form hasn't been posted yet, display it 
      note that the action="" will cause the form to post to the same page it is on */ 
     echo '<form method="post" action=""> 
      Username: <input type="text" name="Username" /> 
      Password: <input type="password" name="Password" /> 
      <input type="submit" value="Sign in" /> 
     </form>'; 
    } 
    else 

     { 
      //the form has been posted without errors, so save it 
      //notice the use of mysql_real_escape_string, keep everything safe! 


     $username = mysql_real_escape_string($_POST['Username']); 
     $password = mysql_real_escape_string($_POST['Password']); 
      $sql = "SELECT * FROM Users WHERE Username = '$username' AND Password = '$password'";    
      $result = mysql_query($sql); 
      if(!$result) 
      { 
       //something went wrong, display the error 
       echo 'Something went wrong while signing in. Please try again later.'; 
       header("location:index.php"); 
       //echo mysql_error(); //debugging purposes, uncomment when needed 
      } 
      else 
      { 
       {     
        { 
        //set the $_SESSION['signed_in'] variable to TRUE 
        $_SESSION['signed_in'] = true; 

        //we also put the user_id and user_name values in the $_SESSION, so we can use it at various pages 
        while($row = mysql_fetch_assoc($result)) 
        { 
         $_SESSION['UserID'] = $row['UserID']; 
         $_SESSION['Username'] = $row['Username']; 
        } 

        echo 'Welcome, ' . $_SESSION['Username'] . ' <a href="index2.php">Proceed to the forum Home page</a>.'; 
        } 
       } 
      } 
     } 

?> 

감사합니다.

+0

먼저 mysql_ 대신에'PDO'를 사용하십시오 –

+4

주 :'mysql_ *'함수는 PHP 7에서 삭제되었으며, 그 버전으로 업그레이드하면 코드가 작동을 멈 춥니 다. 새로운 코드를 써서는 안되며 대신 [mysqli_ *'또는 PDO] (http://php.net/manual/en/mysqlinfo.api.choosing.php)를 사용하십시오. –

+2

또한 SQL 인젝션을 사용할 수 있습니다. –

답변

0

기능 mysql_query()은 실제 mysql 오류가있을 때 FALSE을 반환합니다. 구문 오류, 유효하지 않은 제한 조건 삽입 또는 입력 데이터 유형 불일치 일 수 있습니다. 삽입 된 사용자 이름과 암호 조합이 유효 할 수있는 경우 오류가 발생하지 않습니다. 이름 또는 비밀번호가 잘못된 경우 경우


, 그것은 0 행 (자료 없음) 하지오류 인 반환되는 것을 의미한다. 따라서 코드에서 변수 $result은 절대로 FALSE이 아니므로 코드가 오류 루프에 들어 가지 않습니다.

이 문제를 해결하려면 result가 TRUE인지 확인하는 대신 반환 된 행 수가 0보다 큰지 확인하기 위해 코드를 변경해야합니다. mysql_num_rows() 기능을 사용하여이 작업을 수행 할 수 있습니다.
변경된 코드는이

$result = mysql_query($sql); 
$num_rows = mysql_num_rows($result); 
if($num_rows < 0){ 
    //put some code for error 
} 

또한 노트처럼 보일 것입니다 : 당신이 PDO를 사용하지 않을 경우
당신은 MySQL을 대신 mysqli를 사용할 수 있습니다. 또한 SQL 인젝션에 취약합니다. prepared statements을보고 서버에 오는 데이터를보다 안전하게 만드는 방법은 정말 좋습니다.

+0

정말 도움이 된 @Bozic에게 감사드립니다. 필자는 phpadmin에 수동으로 입력 한 사용자에 대한 내 페이지에만 사용자 정보를 표시하고 내 등록 양식을 통해 추가 한 사용자는 표시하지 않는 것과 관련하여 두 번째 문제점 (위 참조)에 대해 조언하지는 않습니다. 감사 – DarkKnight1203

관련 문제