2014-01-17 4 views
2

У меня есть странная ошибка в моем PHP-коде. Я хочу сравнить свое имя пользователя и пароль. Когда я выхожу из формы, тогда есть правильные значения, и когда я изменяю $username и $password в переменной $sql, он отлично работает.PHP сравнить данные для регистрации

Он получает правильные переменные, но не принимает их.

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> 
    <tr> 
     <form name="form1" method="post" action=""> 
     <td> 
      <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 
       <tr> 
        <td colspan="3"><strong>Member Login </strong></td> 
       </tr> 
       <tr> 
        <td width="78">Username</td> 
        <td width="6">:</td> 
        <td width="294"><input name="myusername" type="text" id="myusername"></td> 
       </tr> 
       <tr> 
        <td>Password</td> 
        <td>:</td> 
        <td><input name="mypassword" type="password" id="mypassword"></td> 
       </tr> 
       <tr> 
        <td>&nbsp;</td> 
        <td>&nbsp;</td> 
        <td><input type="submit" name="Submit" value="Login"></td> 
       </tr> 
      </table> 
     </td> 
     </form> 
    </tr> 
</table> 
<?php 
if(isset($_POST['Submit'])) 
{ 
    $username = $_POST['myusername']; 
    $password = $_POST['mypassword']; 
    echo $username; 
    echo $password; 
    include "connect.php"; 
    $sql="SELECT * FROM access WHERE username='$username' and password='$password'"; 
    $result=mysql_query($sql); 
    // Mysql_num_row is counting table row 
    $count=mysql_num_rows($result); 
    echo $count; 
    // If result matched $myusername and $mypassword, table row must be 1 row 
    if($count==1){ 
     // Register $myusername, $mypassword and redirect to file "login_success.php" 
     session_register("myusername"); 
     session_register("mypassword"); 
     header("location:login_success.php"); 
    } else { 
     echo "Wrong Username or Password"; 
    } 
} 
?> 

PS

Я знаю, что нет никакого шифрования вообще, но я хотел бы иметь эту работу первым.

+0

Вы знаете, что '' session_register' был DEPRECATED с PHP 5.3.0 и REMOVED с PHP 5.4.0] (http://us1.php.net/session_register), и вопрос действительно является проблемой здесь? – kero

+0

выглядит правильно. возможно, у вас нет этого пользователя в таблице, или вам не хватает заглавных букв? – PolishDeveloper

+0

любая ошибка у вас? ИСПОЛЬЗОВАТЬ if (! $ Result) { die ('Неверный запрос:'. Mysql_error()); } , чтобы узнать, есть ли что-то очевидное. –

ответ

0

Независимо от того, что происходит это не будет работать:

header("location:login_success.php"); 

, потому что у вас есть HTML перед ним ... Вы должны иметь все header() перед любым HTML получает распечатаны. См. http://us2.php.net/manual/en/function.header.php

Чтобы исправить это, поставьте свой PHP-код кода перед блоком кода HTML, как это. (Убедитесь, что нет пробелов, прежде чем <?php, потому что будет оказывать header() бесполезное.

<?php 
if(isset($_POST['Submit'])) 
{ 
    $username = $_POST['myusername']; 
    $password = $_POST['mypassword']; 
    echo $username; 
    echo $password; 
    include "connect.php"; 
    $sql="SELECT * FROM access WHERE username='$username' and password='$password'"; 
    $result=mysql_query($sql); 
    // Mysql_num_row is counting table row 
    $count=mysql_num_rows($result); 
    echo $count; 
    // If result matched $myusername and $mypassword, table row must be 1 row 
    if($count==1){ 
     // Register $myusername, $mypassword and redirect to file "login_success.php" 
     session_register("myusername"); 
     session_register("mypassword"); 
     header("location:login_success.php"); 
    } else { 
     echo "Wrong Username or Password"; 
    } 
} 
?> 
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> 
    <tr> 
     <form name="form1" method="post" action=""> 
     <td> 
      <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 
       <tr> 
        <td colspan="3"><strong>Member Login </strong></td> 
       </tr> 
       <tr> 
        <td width="78">Username</td> 
        <td width="6">:</td> 
        <td width="294"><input name="myusername" type="text" id="myusername"></td> 
       </tr> 
       <tr> 
        <td>Password</td> 
        <td>:</td> 
        <td><input name="mypassword" type="password" id="mypassword"></td> 
       </tr> 
       <tr> 
        <td>&nbsp;</td> 
        <td>&nbsp;</td> 
        <td><input type="submit" name="Submit" value="Login"></td> 
       </tr> 
      </table> 
     </td> 
     </form> 
    </tr> 
</table> 

Другое дело, что люди продолжают воспитывать в SQL Injection. Это, как вы могли бы использовать mysqli. (Не забыть соединение необходимо использовать MySQLi)

$query = "SELECT * FROM access WHERE username = ? and password= ?"; 

if($stmt = $mysqli->prepare($query)){ 
    $stmt->bind_param('ss', $username, $password); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $count = $stmt->num_rows; 
    $stmt->free_result(); 
    $stmt->close(); 

    echo $count; 
}else die("Failed to prepare!"); 

, который заменил бы это:

$sql="SELECT * FROM access WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 
// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
echo $count; 
+0

Спасибо за ваш ответ. Я попробовал ваше предложение, но все равно никакого результата.Я все еще получаю 0 совпадений в моей таблице mySQL. – user3208216

Смежные вопросы