2013-04-11 2 views
0

메신저가 현재 자신의 양식에 로그인하여 다른 페이지로 보내지 않고 로그인 양식 위에 표시되는 오류가 발생하도록 로그에 양식을 만들려고 노력 중입니다. . 또한 로그인이 성공하면 원하는 페이지로 전송됩니다. 아래에 내 코드가 있는데, 나는 어떤 도움을 주셔서 감사합니다, 고마워!오류 메시지를 표시하고 자체에 제출하는 로그인 페이지

<?php 
if ((isset($_REQUEST['username'])) && (isset($_REQUEST['password']))) { 
    $adminusername = $_POST["username"]; 
    $adminpassword = $_POST["password"]; 
    if ($adminusername == '' || $adminpassword == '') { 
     echo "<b>You must complete all sections</b><br/>"; 
    } 

    $query = mysql_query("SELECT * FROM admin WHERE username = '$adminusername' AND password = '$adminpassword'"); 

    $numrows = mysql_num_rows($query); 
    if ($numrows != 0) { 

     while ($row = mysql_fetch_assoc($query)) { 
      $dbusername = $row['username']; 
      $dbpassword = $row['password']; 
     }    

     if ($adminusername == $dbusername && ($adminpassword == $dbpassword)) { 
      $_SESSION['username'] = $adminusername; 
      header("Location: admin.php"); 
     } 
    } else { 
     echo " ($error) Username and password do not match"; 
    }     
} 
?> 
<h3>Admin Login</h3> 
<form name="login" action="<?= $SERVER['PHP_SELF'] ?>" method="POST"> 
    Username: <input type="text" name="username"><br/> 
    Password: <input type="password" name="password"><br/><br/> 
    <button type="submit">Log In</button> 
</form> 
+1

무엇이 붙어 있습니까? 뭐하는거야,해서는 안되니? 그렇지 않으면 무엇을하지 않습니까? – andrewsi

+0

귀하의 문제는 ...? 물론 [SQL 주입 공격] (http://bobby-tables.com) 구멍 이외의. –

+0

관리자 페이지로 나를 보내야하는 정확한 정보를 입력하면 아무 일도 일어나지 않으며 오류 정보도 표시되지 않습니다. 정보가 올 바르면 관리자 영역으로 리디렉션해야합니다 ... – cja91

답변

1

작업 페이지 헤더에 outpu.

사용자 이름과 암호가 비어 있으면 오류가 출력되지만 데이터베이스는 여전히 쿼리됩니다.

데이터베이스 쿼리가 실제로 작동하는지 확인하지 않습니다. $query이 false가 아니라고보고하고, 오류를보고해야합니다.

사용자 이름과 암호가 두 번 일치하는지 (한 번 SQL에서 한 번 나중에) 확인합니다. 이는 과도한 조치이며, 두 번째 검사가 실패하면보고하지 않습니다.

header()은 아직 출력을 보내지 않은 경우에만 작동합니다 ... 표시된 코드 앞에 아무 것도 출력되지 않으면 PHP 외부의 빈 줄도 나오면 헤더가 작동하지 않습니다. 자신에

,이 (옆으로 SQL 주입 가능성이) 나를 위해 작동 :

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $adminusername = $_POST["username"]; 
    $adminpassword = $_POST["password"]; 
    if ($adminusername == '' || $adminpassword == '') { 
     echo "<b>You must complete all sections</b><br/>"; 
    } else { 
     $sql = "SELECT * FROM admin WHERE username = '$adminusername' AND password = '$adminpassword'"; 
     $query = mysql_query($sql); 

     if ($query === false) { 
      echo "Could not successfully run query ($sql) from DB: " . mysql_error(); 
      exit; 
     } 

     if (mysql_num_rows($query) > 0) { 
      $_SESSION['username'] = $adminusername; 
      header('Location: /admin.php'); 
      exit; 
     } 

     echo "<b>Username and password do not match</b><br/>"; 
    } 
} 
?> 
<h3>Admin Login</h3> 
<form name="login" action="<?= $_SERVER['PHP_SELF'] ?>" method="POST"> 
    Username: <input type="text" name="username"><br/> 
    Password: <input type="password" name="password"><br/><br/> 
    <button type="submit">Log In</button> 
</form> 
+0

대단히 감사합니다. – cja91

0

제출하려면 <form>을 제출해야합니다. 제출 버튼이 필요합니다. 당신이있어 :

<button type="submit">Log In</button> 

시도 :

<input type="submit" value="Log In" /> 

난 당신이 현재 양식을 제출하고 생각하지 않기 때문에 제출을 클릭하면 아무 일도 일어나지 않습니다.

+0

답장을 보내 주셔서 감사합니다, 나는 이것을 시도하고 아무것도 불행히도 변경되었습니다 ... – cja91

+1

'

+0

허. 그래서 그들은 그렇습니다. 나는 그것이 내가 배운 새로운 것 같아요. – andrewsi

0

대신 헤더 ("위치 : admin.php");

시도 자바 스크립트

echo "<script>window.location = 'admin.php';</script> 

이미있는 경우

실 거예요 당신이 더 명확 구조를 볼 수 있도록 내가 코드를 들여 쓰기 한

+0

그러나 오류가보고되지 않는 한 PHP는 헤더가 이미 전송되었음을 알려야합니다. –

0

내 솔루션은 div 내 아래에있는 오류와 함께 양식을 메아리. 나는 여전히 배우고 있지만 누군가가 도움이되기를 바랍니다.

<div> 
    <?php 
    //make sure the form action='' is set to itseslf 
echo " 
     <form action='self_page_name' method='post'> 
      <table> 
      <tr>  
       <td>UserName:</td> 
      </tr> 
      <tr> 
       <td><input type='text' name='username' required='required' /></td> 
      </tr> 
      <tr> 
       <td>Password: </td> 
      </tr> 
      <tr> 
       <td><input type='password' name='password' required='required' /></td> 
      </tr> 
      <tr> 
       <td><input type='submit' name='submit' value='Login' /></td> 
      </tr> 
      </table> 
     </form> 
    "; 
//////////your php validation script here//////////// 
    ?> 
</div> 
+0

새로운 질문에 대한 답변을 얻으려면 1 년이 지난 응답이 이미 표시되어있는 것보다 낫고 일반적으로 보람이 있습니다. – Paul

관련 문제