2016-07-31 7 views
-2

Привет Я новичок в PHP программирования и попытался создать зашифрованный пароль, но проблема всегда генерировать тот же md5 для различных паролей, и я не могу войти, используя login.php Вот мой кодPHP ошибка синтаксиса базы данных

<?php 

$name = $_POST['name']; 
$password = md5($_POST['password']); 

if($name && $password){ 

    mysql_connect("localhost","root","") or die(mysql_error); 
    mysql_select_db("myfirstdatabase") or die(mysql_error); 

    $query = mysql_query("SELECT * FROM usernames WHERE name='$name'"); 
    $numrows = mysql_num_rows($query); 

    if ($numrows != 0){ 

     while ($row = mysql_fetch_assoc($query)){ 
      $dbname = $row['name']; 
      $dbpassword = $row['password']; 

      } 
       if ($name==$dbname){ 
        if($password==$dbpassword){ 

         header("location: users.php"); 

        }else { 
         echo "Your password is incorrect!"; 
        } 
       }else{ 

         echo "Your name is incorrect!"; 
       } 





     }else { 
      echo "Name is not registered!"; 
     } 

    }else{ 

     echo "You have to type a name and password"; 
    } 

?> 
+3

Использование 'md5' несоленые к "хэш" пароли, используя' 'mysql_ * функции ... Что это, 2005? –

+0

Прошу прощения, что я новичок в программировании, и я изучаю источник, который у меня есть. –

+1

Ваш источник плохой. Вы должны найти более свежий. Для начала используйте пароли ['password_hash'] (http://php.net/password-hash) и [' password_verify'] (http://php.net/password-verify) для паролей. Не 'md5'. Этот материал не был безопасным в течение многих лет. –

ответ

-1

Вы должны сделать это, как показано ниже: -

<?php 
error_reporting(E_ALL); // check all errors 
ini_set('display_errors',1);// show all errors 
if(isset($_POST['name']) && isset($_POST['password'])){ 
    $conn = mysqli_connect("localhost","root","","myfirstdatabase"); 
    if($conn){ 
     $name = mysqli_real_escape_string($conn,$_POST['name']); 
     $password = mysqli_real_escape_string($conn,md5($_POST['password'])); 
     $query = mysqli_query($conn,"SELECT * FROM usernames WHERE name= $name AND password = $password"); 
     if(mysqli_num_row($query)>0){   
      header("location: users.php"); 
     }else { 
      echo "user name or password is incorrect!"; 
     } 
    }else{ 
     echo "deb connection error:-".mysqli_connect_error(); 
    } 
}else{ 
    echo "Please fill form fully"; 
} 
?> 

Предложения: -

1.Не используйте mysql_* (устарели от php5.5 и удалены с php7). Использовать mysqli_* OR PDO

2.Использование механизма шифрования пароля вместо md5.

3.Use prepared заявления mysqli или PDO для предотвращения вашего кода от SQL Injection.

+0

почему -ve маркировка? –

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