通过ID = ID更新单个记录

时间:2013-02-21 13:59:12

标签: php html mysql

我此刻碰到了一堵墙,这段代码会在每条记录的末尾显示一个带有按钮的表格。一旦按下它,然后执行一项功能,将健康记录更新为-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";
 }?>  

2 个答案:

答案 0 :(得分:0)

这可以通过$_POST['id']变量进行攻击。通过PDO或MySQLi使用mysql_real_escape_string或更好的准备好的查询,无论如何这与你遇到的问题是正交的,了解它是个好主意。

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

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

答案 1 :(得分:-1)

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

另外,您的代码完全不安全,可以轻易更改和入侵。

你应该尝试PDO而不是mysql_query,它也是折旧的。 http://php.net/PDO