0

我现在碰壁了,这段代码会在每条记录的末尾打开一个带有按钮的表格。一旦按下它,就会执行一个功能,将健康记录更新 -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 / 表格

<?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";
 }?>  
4

2 回答 2

0

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

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

要解决此问题,您需要提交一个名为“id”的表单字段,该字段$_POST['id']实际上包含一个值。

于 2013-02-21T14:03:25.060 回答
-1

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

此外,您的代码完全不安全,很容易被更改和黑客攻击。

您应该尝试使用 PDO 而不是 mysql_query 也已折旧。 http://php.net/PDO

于 2013-02-21T14:03:10.047 回答