嗨我知道这个问题在这个论坛上有很多答案,但我真的不明白,对不起我只是一个想要学习php的新手,请你好。 =(
我试图找出如何使用数组更新mysql表。
表有4个字段。 REGNO,BATCHNO,NAMES和ATTEN_SUM。 REGNO具有独特的价值。
$i = 0;
while($row_recordset = mysql_fetch_array($query_run)) {
echo "<tr>";
echo " <td>{$row_recordset['REGNO']}</td>
<td>{$row_recordset['NAME']}</td>
<td><input type='text' name='atten_ave".$i."'></td>
";
echo "</tr>";
$i++;
这是我在更新页面后的上一页的html代码。
foreach($_POST as $textbox => $values) {
$query_update = "UPDATE `grades` SET `ATTEN_SUM` = '$values' WHERE `BATCHNO` = '$sessionbatch'";
if(mysql_query($query_update)) {
echo 'SUCCESS';
} else{
die(mysql_error());
}
}
$ _ POST是来自上一页的动态输入的数组。 以下是表中输出的示例。
REGNO | BATCHNO | NAME | ATTEN_SUM
====================================================
1 | ARPA 00-055 | Jason | 99
2 | ARPA 00-055 | Mark | 99
3 | ARPA 00-055 | Edgar | 99
它使用我输入的最后一个值更新所有行。
请帮助.. =(
答案 0 :(得分:1)
HTML
//<input type='text' name='atten_ave".$i."'
<input type='text' name='atten_ave[]'...
PHP
//foreach($_POST as $textbox => $values) {
foreach($_POST['atten_ave'] as $textbox => $values) {
但这次更新毫无用处。它只是更新所有记录使用最后一个文本框。
我认为您需要将名称或ID传递给php, 然后sql查询添加类似'where id =“$ _ POST ['ID']”...
的内容*CHECK mysql injections.
答案 1 :(得分:0)
正如你所说,REGNO是唯一的密钥,但是根据你的输出,你正在更新BATCHNO,这不是唯一的。
答案 2 :(得分:0)
如果你仔细查看WHERE子句,(WHERE BATCHNO
='$ sessionbatch')你会明白它每次都会更新SAME行,因此你会看到最后一次更新。
打印查询语句,你会很清楚。
if(mysql_query($query_update)) {
echo $query_update.'</br>';
答案 3 :(得分:0)
1)
你不应该再使用mysql_ *函数了。它们是deprecated,可能会为mysql injections留下漏洞。您应该学会使用Mysqli或PDO。
2)
您的代码对任何可能的mysql注入完全开放。您应该使用mysql_real_escape_string
或查看上面的1)
。
3)
使用foreach($_POST)
,您将遍历每个$_POST
项目。我假设(也许我错了)您正在从HTML表单提交数据。试试var_dump($_POST)
,您会发现有许多值与您想要做的事情无关。例如:
<input type=”submit” value=”Some value” name="update">
将导致PHP
echo $_POST["update"];
// result: Some value
如果您可以发布var_dump($_POST)
的输出,我们都可以看到您在foreach循环内部传递的内容,并可能提供更详细的解决方案。