【问题标题】:I can't figure out why one of these PHP scripts is not working我不明白为什么这些 PHP 脚本之一不起作用
【发布时间】:2013-10-21 20:07:52
【问题描述】:

我有两个脚本在做几乎相同的事情,但其中一个不工作。我只是想不出问题出在哪里。两个脚本的代码几乎相同,但“更新消息”脚本不起作用。我没有收到任何 php 错误,但数据库没有更新。

删除脚本(工作):

<?php
function deleterow() 
{
$con=mysqli_connect("localhost","root","root","TP1AlexandreBouletCouture");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$delete_id =  ($_GET["delete_id"]); 
$sql="DELETE FROM `table1` WHERE `table1`.`id` = '$delete_id'"; 


if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo '<p>Message supprimé</p>';


mysqli_close($con);
}
if(isset($_GET['delete_id']))
{
deleterow($_GET['delete_id']);
}
?>

<form action="history.php" method="get">
<input type="submit" value="Supprimer">
<input type="hidden" name="delete_id" value='.$row['id'].'>
</form>

更新消息脚本(不工作):

<?php
function updatemyinfos() 
{
$con=mysqli_connect("localhost","root","root","TP1AlexandreBouletCouture");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$update_id =  ($_GET["update_id"]);
$new_message = ($_GET["updatemessage"]);
$sql="UPDATE `table1` SET  `message` =  '$new_message' WHERE  `table1`.`id` ='$update_id";


if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo '<p>Message modifié</p>';


mysqli_close($con);
}
if(isset($GET['updatemessage']))
{
updatemyinfos($GET['updatemessage']);
}
?>


<form action="history.php" method="get">
<textarea style="resize:none"cols="35"rows="3"name="updatemessage">'.$row['message'].'</textarea>           
<input type="submit" value="Modifier">
<input type="hidden" name="update_id" value='.$row['id'].'>
</form>

【问题讨论】:

  • 你很容易受到SQL injection attacks的攻击。
  • 你应该阅读这个:How can I prevent SQL injection in PHP?
  • $GET != $_GET,但这是你的问题中最小的一个:google 用于 SQL 注入以及如何防止它,并且永远不要使用 GET 请求来修改数据(预取浏览器可以预取你所有的删除链接,使您的数据库为空)。
  • 我知道我很容易受到 SQL 注入攻击,但这只是一个简单的个人项目,我正在构建它以了解 PHP 的基础知识。我不会将该脚本用于任何“真正的”目的。
  • 致 Wrikken :解决了!这是一个“错字”......我应该在尝试修复它时看到它......

标签: php mysql post get sql-update


【解决方案1】:

$update_id 之后缺少引用。

'$new_message' WHERE  `table1`.`id` ='$update_id

但您应该使用 PDO,http://php.net/manual/en/book.pdo.php。 mysql 扩展已从 php 5.5.0 中弃用

【讨论】:

  • 非常感谢,我不知道我没有看到这一点。我已经尝试修复它大约 2 小时!
【解决方案2】:

除了 Cristian 的回答之外,您的 HTML 表单中的 php 变量不会被解析。您需要将它们包装在 php 标签中:

<input type="hidden" name="update_id" value="<?php echo $row['id']; ?>">

【讨论】:

    猜你喜欢
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多