使用<input type =“number”/>对数据库中的每一行进行单独更新

时间:2015-12-19 03:57:47

标签: php mysql

使用输入类型作为数字时,我想更新数据库,但每次运行脚本时,最后一行的值都会更新到整个表。只有那些值必须根据更改进行更改。

$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";

1 个答案:

答案 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?