我现在遇到了一堵墙,这段代码会在每条记录的末尾显示一个带有按钮的表。按下此键后,将执行一个函数,以-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