2013-06-08 2 views
0

Я создал код обновления для обновления пароля в таблице с использованием id.This является URL-адресом, откуда я получаю идентификатор, используя $_GET, но его не работает.

http://www.example.com/en/resetPaSS.php?id=1&token=779d2aa48de104db46d66e29de576aac

Код:

if(isset($_POST['sub'])) 
{ 
$pass_hash = PassHash::hash($_POST['pass']); 

$sql = "UPDATE user SET password='$pass_hash' WHERE id='$_GET[id]'"; 
$resu = mysqli_query($link,$sql); 
//echo $sql; 
if(!$resu) 
    { 
    $error="Unable to change Password. Try Again!"; 
    } 
    else 
    { 
    echo"changed"; 
    } 
} 

Я также echo $sql и это показывает UPDATE user SET password='$2a$10$bed9ad8e6cb910e0f1f12uXJldZLQ79f5HVrIiIAIZeZ9088Rre9.' WHERE id=''

также попытался $_REQUEST, но до сих пор не работает.

EDIT: Я использую этот адрес для переустановки пароля, чтобы отправить пользователь, который создается с помощью http://www.example.com/en/resetPaSS.php?id=$id&token=$token

+0

Что делает простой 'эхо $ _GET [ "ID"]' шоу ? Также у вас есть значения POST - они установлены? Откуда они берутся? –

+5

[SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection): [прочитать об этом] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in -php) – PeeHaa

+0

показывает 1 @Pekka 웃 –

ответ

1

Если вы используете форму, то идентификатор а не в URL-адресе действия. Вы можете также разместить идентификатор с помощью скрытого поля ввода

Вы должны использовать подготовленное заявление, чтобы предотвратить SQL инъекции:

$sql = "UPDATE user SET password='?' WHERE id=?"; 
$stmt = $link->prepare($sql); 

/* bind parameters */ 
$stmt->bind_param("si", $pass_hash, $_GET['id']); 

/* execute query */ 
$stmt->execute(); 

EDIT Нажав на ссылку, вы будете идти на страницу, где форма есть. Вы должны изменить идентификатор формы или URL действия, чтобы сделать ваш скрипт работает, выполнив следующие действия

делают variabele названный ID так:

$id = isset($_GET['id']) ? $_GET['id'] : $_POST['id']; 

добавить скрытое поле в форме:

<input type="hidden" name="id" value="<?php echo $id; ?>"> 

Изменение bind_param запрос на:

$stmt->bind_param("si", $pass_hash, $id); 
+0

нет m не используя форма ...см. мой отредактированный вопрос –

+0

Как вы публикуете данные? Используя только URL-адрес, вы не можете публиковать данные. – Perry

+0

, но я использовал '$ _get [id]' в том же для select query..then y его не работает для этого запроса на обновление, и если i 'echo $ _get [id]' его эхо значение, но запутанное y не работает с update –

2

попробовать это:

$sql = "UPDATE user SET password='$pass_hash' WHERE id='" . mysqli_real_escape_string($_GET['id']) . "'"; 
+4

Нет, не надо. Используйте подготовленные заявления. ** Не ** создавайте свои SQL-запросы вручную. Это простое правило следовать, нет причин, чтобы его нарушать. Да, это может работать в этом очень простом случае. Это по-прежнему очень плохой совет. (Это также не решает проблему OP.) –

+0

не работает .... –

0

Если вы знаете, что идентификатор номер , выполните следующие действия:

$id = intval($_GET['id']); 
$sql = "UPDATE user SET password='$pass_hash' WHERE id='$id';"; 
Смежные вопросы