0

我创建了更新代码,用于使用 id 在表中更新密码。这是我从中获取 id 的 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了,但还是不行。

编辑: 我正在使用此 url 重置密码以发送给使用创建的用户 http://www.example.com/en/resetPaSS.php?id=$id&token=$token

4

3 回答 3

2

尝试这个:

 $sql = "UPDATE user SET password='$pass_hash' WHERE id='" . mysqli_real_escape_string($_GET['id']) . "'";
于 2013-06-08T13:22:42.630 回答
1

如果您使用表单,则 id 不在操作 url 中。您还可以使用隐藏的输入字段发布 id

您必须使用准备好的语句来防止 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();

编辑 通过单击链接,您将转到表单所在的页面。您必须通过执行以下步骤将 id 编辑到表单或操作 url 以使您的脚本正常工作

像这样创建一个名为 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);
于 2013-06-08T13:31:31.217 回答
0

如果您知道,该 id 是数字,请执行以下操作:

$id = intval($_GET['id']);
$sql = "UPDATE user SET password='$pass_hash' WHERE id='$id';";
于 2013-06-08T13:29:57.333 回答