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