2013-04-29 43 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