2013-05-31 2 views
-3

Итак, я пытаюсь изменить пароль в пользователях таблицы, потому что я использую следующий PHP-код, но он не обновляется.Не удалось обновить пароль в mysql, используя php

<?php 
session_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="bloodbank"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username ,password and newpassword sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 
$newpassword=$_POST['newpassword']; 
$sql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 

?> 

Тогда я попытался использовать этот код, хотя я получаю «Обновлено успешно», на самом деле она не получает обновляется в базе данных, может кто-нибудь пожалуйста, скажите мне, где ошибка.

<?php 
session_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="bloodbank"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username,password and newpassword sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 
$newpassword=$_POST['newpassword']; 
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

if($count==1) 
{ 
$mysql="UPDATE $tbl_name SET password='$newpassword'"; 
echo "Updated Successfully"; 
} 
else 
{ 
echo "Wrong password or Username"; 
} 
?> 
+2

Ну, это потому, что вы не выполняете запрос. –

+0

не могли бы вы рассказать мне, как это сделать. – manju

+0

где выполняется запрос? –

ответ

-2

В вашем первом коде вы никогда не выполняете запрос mysql. Второй код просто делает бесполезный sql-запрос. Try:

<?php 
session_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="bloodbank"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username ,password and newpassword sent from form 
$username=mysql_real_escape_string($_POST['username']); 
$password=mysql_real_escape_string($_POST['password']); 
$newpassword=mysql_real_escape_string ($_POST['newpassword']); 
$sql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 
?> 
+0

@manju убедитесь, что вы действительно принимаете во внимание все, что написал Паташу, если вы планируете использовать это на общедоступном веб-сайте. Это действительно важно! – noamik

5

В этом коде

if($count==1) 
{ 
$mysql="UPDATE $tbl_name SET password='$newpassword'"; 
echo "Updated Successfully"; 
} 

существуют следующие проблемы:

1) является то, что вы ничего не делаете с SQL вы только что построенном - Вы забыли выполнить запрос используй это.

2) заключается в том, что вы не храните пароль с солью, храня пароли в открытом тексте в вашей базе данных, это SUPER SUPER bad, в первый раз, когда кто-либо еще получает вашу базу данных любым способом, каждый из паролей ваших пользователей будет в Интернете, и теперь их банковские счета и электронные письма находятся под угрозой. Не думайте, что этого не произойдет, все, что требуется, - это одна ошибка или одна вещь, которую вы упустили, а высокая доля людей использует один пароль для всего, поэтому преступники ЛЮБЯТЬ это, когда базы данных имени пользователя и пароля просочились в Интернет , Read http://www.martinstoeckli.ch/php/php.html#bcrypt

3) заключается в том, что инструкция обновления, как написано, установит пароль EVERY SINGLE ROW для значения в $ newpassword - вы забыли использовать предложение WHERE.

4) заключается в том, что этот код уязвим для инъекции SQL, а это означает, что если хакер отправляет код SQL вместо пароля, будет запущен код SQL. В одном из решений вместо этого используются подготовленные инструкции. См How can I prevent SQL injection in PHP?

+0

Спасибо, я новичок в этой теме, сделаю то, что вы показали. – manju

1

Вам нужно WHERE условие в вас UPDATE заявление:

mysql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 

А также выполнить запрос

$result2=mysql_query($mysql); 

С уважением.

+0

старый пароль также должен быть проверен, потому что в противном случае все ppl могли бы изменить пароль для определенного пользователя. –

+0

Вы правы Bojane :) – mirkobrankovic

2

Изменение:

$sql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 

if($count==1) 
{ 
$mysql="UPDATE $tbl_name SET password='$newpassword'"; 
echo "Updated Successfully"; 
} 

To:

$sql="UPDATE $tbl_name SET password='$newpassword' WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 

if($count==1) 
{ 
$mysql="UPDATE $tbl_name SET password='$newpassword'"; 
$result2=mysql_query($mysql); 
echo "Updated Successfully"; 
} 

Причина это не обновление происходит потому, что $sql запрос не выполняется.

+0

Спасибо большое – manju

+0

Нет проблем. Если это сработало для вас, не забудьте замаскировать правильный ответ. :) –

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