2013-04-29 38 views
0

嗨,我知道这个问题已经在这个论坛上有很多答案,但我真的没有得到它,我很抱歉我只是一个想学习PHP的新手,请对人好点。 =(相同的输出在mysql更新与foreach语句(关闭)

我试图找出如何与阵列更新MySQL表。

该表有4个领域。REGNO,BATCHNO,名字和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

你可以也请交您用来发送发布数据的HTML?你的代码中有太多的错误,我感觉起鸡皮疙瘩! – Saturnix 2013-04-29 02:48:45

+0

我已经更新先生我的问题,请参阅我的HTML代码。 – zeus2026 2013-04-29 02:58:20

回答

0

那么如你所说,REGNO是唯一的关键,但要更新上BATCHNO,这不是唯一的,根据你的输出。

+0

感谢您的回复,但先生,因为我有很多不同的BATCHNO在我的表中,我只想要更新所有相同BATCHNO的ATEN_SUM。 – zeus2026 2013-04-29 02:48:35

0

如果你看一下WHERE子句仔细地(在BATCHNO ='$ sessionbatch'中),你会明白它每次都会更新同一行,因此你会看到最后一次更新。

打印查询语句,它会很清楚给你

if(mysql_query($query_update)) { 
    echo $query_update.'</br>'; 
0

1)

您不应该再使用mysql_ *函数。它们是deprecated,可能会为mysql injections留下漏洞。您应该学会使用MysqliPDO

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循环里面有什么,也许提供更详细的解决方案。

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) { 

但这种更新是没有用的。它只是更新所有记录使用的最后一个文本框。

我认为你需要通过名称或编号,PHP, 然后SQL查询中加入类似“其中id = “$ _ POST [ 'ID']” ......

*CHECK mysql injections. 
+0

+1 - 这就是为什么我要求发布HTML – Saturnix 2013-04-29 03:02:37

+0

顺便说一句,不应该是名称='atten_ave [“。$ i。”]' – Saturnix 2013-04-29 03:04:29

+0

@Saturnix:看到我的更新 – 2013-04-29 03:06:30