通过ID=ID更新单个记录


Updating a single record Via ID = ID

我现在遇到了一堵墙,这段代码会在每条记录的末尾显示一个带有按钮的表。按下此键后,将执行一个函数,以-5更新健康记录。

这对工作效果很好,但它会影响所有行,我试图通过ID只接触一条记录,但没有成功!如果你能帮忙那就太好了!

php

$sql="SELECT `id` , `FirstName` , `Health` FROM ajax_demo WHERE `id` = `id` LIMIT 0 , 30";
$result = mysql_query($sql);

if(isset($_REQUEST['submit']))
{
counterminus();
}
  function  counterminus()
{
$cmeter = $cmeter - 1;
$id = $_POST["id"];
$FirstName = $_POST["FirstName"];
mysql_query("UPDATE ajax_demo SET `Health` = `Health` - `Damage` WHERE id = {$id}");
Header("location:oo_test.php");
}

这是php/form

<?php 
echo 
"<table border='1'>
<tr>
<th>id</th>
<th>Firstname</th>
<th>health</th>
</tr>";
while($row = mysql_fetch_row($result)) {
    echo '<tr>';
    foreach($row as $cell) {
        echo "'n<td>$cell</td>";
}
echo '<td><form id="theForm" action="" method="POST" >
<input type="submit" name="submit"  id="submit" value="Attack" />
<input type="hidden" name="'.$row[1].'" /></form></td></tr>';
 echo "'n'n";
 }?>  

这很容易通过$_POST['id']变量进行攻击。通过PDO或MySQLi使用mysql_real_escape_string或更好的准备好的查询,无论如何,这与您遇到的问题是正交的,意识到这一点是个好主意。

实际上,您从未提交过名称为id的HTML表单字段。此外,在您的HTML中,$row将是while循环之外的NULL,因此首先将是未定义的。这意味着隐藏字段的名称将为空,并且您的SQL表示UPDATE WHERE id=,这是无效的,将导致错误。

要修复此问题,您需要提交一个名称为"id"的表单字段,以便$_POST['id']实际包含一个值。

为什么写{id}而不是$id?

另外,你的代码是完全不安全的,很容易被修改和黑客攻击。

您应该尝试PDO,而不是同样折旧的mysql_query。http://php.net/PDO