使用输入类型作为数字时,我想更新数据库,但每次运行脚本时,最后一行的值都会更新到整个表。只有那些值必须根据更改进行更改。
$conn=mysql_connect('localhost','root','');
$db=mysql_select_db('shaggy');
$q = "SELECT * FROM `automata`";
$re=mysql_query($q)or die(mysql_error());
$num=mysql_num_rows($re);
从中提取行数的sql连接
$i=0;
while($num>$i)
{
$bupin=mysql_result($re,$i,'bupin');
$name=mysql_result($re,$i,'name');
$q1=mysql_result($re,$i,'q1');
$q2=mysql_result($re,$i,'q2');
$mst1=mysql_result($re,$i,'mst1');
$mst2=mysql_result($re,$i,'mst2');
$est=mysql_result($re,$i,'est');
echo "<tr>
<td> <b>$bupin</b> </td>
<td><b> $name </b></td>
<td><input type='number' min='00' max='30' value='$q1' name='f1' ></td>
<td><input type='number' min='00' max='30' value='$q2' name='f2' ></td>
<td><input type='number' min='00' max='50' value='$mst1' name='f3' ></td>
<td><input type='number' min='00' max='50' value='$mst2' name='f4' ></td>
<td><input type='number' min='00' max='100' value='$est' name='f5' ></td>
</tr>";
$i++;
}
在此脚本的帮助下,将显示数据库表中的所有值,并且还可以使用用户想要更改的数字选项。但是在更改值并提交它时,将为所有表分配在最后一行中更新的值,并且不会使用其各自的值进行更新。 更新代码如下:
$conn=mysql_connect('localhost','root','');
$db=mysql_select_db('shaggy');
$q = "SELECT * FROM `automata`";
$re=mysql_query($q)or die(mysql_error());
$num=mysql_num_rows($re);
$i=0;
while($num>$i)
{
$a=$_POST['f1'];
$b=$_POST['f2'];
$c=$_POST['f3'];
$d=$_POST['f4'];
$e=$_POST['f5'];
$nbupin=mysql_result($re,$i,'bupin');
$nname=mysql_result($re,$i,'name');
mysql_query("UPDATE automata SET q1=$a, q2=$b, mst1=$c, mst2=$d, est=$e WHERE bupin='$nbupin'");
$i++;
}
echo "Success";
答案 0 :(得分:3)
最简单的方法是将<input>
转换为数组,并以$bupin
为键。
$i=0;
while($num>$i)
{
$bupin=mysql_result($re,$i,'bupin');
$name=mysql_result($re,$i,'name');
$q1=mysql_result($re,$i,'q1');
$q2=mysql_result($re,$i,'q2');
$mst1=mysql_result($re,$i,'mst1');
$mst2=mysql_result($re,$i,'mst2');
$est=mysql_result($re,$i,'est');
echo "<tr>
<td> <b>$bupin</b> </td>
<td><b> $name </b></td>
<td><input type='number' min='00' max='30' value='$q1' name='f1[$bupin]' ></td>
<td><input type='number' min='00' max='30' value='$q2' name='f2[$bupin]' ></td>
<td><input type='number' min='00' max='50' value='$mst1' name='f3[$bupin]' ></td>
<td><input type='number' min='00' max='50' value='$mst2' name='f4[$bupin]' ></td>
<td><input type='number' min='00' max='100' value='$est' name='f5[$bupin]' ></td>
</tr>";
$i++;
}
现在,在表单提交上,您可以在循环中使用$bupin
来更新表格。
$conn=mysql_connect('localhost','root','');
$db=mysql_select_db('shaggy');
foreach($_POST['f1'] as $bupin => $value)
{
$a=$_POST['f1'][$bupin];
$b=$_POST['f2'][$bupin];
$c=$_POST['f3'][$bupin];
$d=$_POST['f4'][$bupin];
$e=$_POST['f5'][$bupin];
mysql_query("UPDATE automata SET q1=$a, q2=$b, mst1=$c, mst2=$d, est=$e WHERE bupin='$bupin'");
}
echo "Success";
注意,您还应将mysql_
代码更新为mysqli_
或PDO
,并了解sql注入 - 请参阅How can I prevent SQL-injection in PHP?