2016-07-05 30 views
-2

首先,我知道在我的示例中存在不推薦的代碼,我正在使用我前一個設計的平臺,並且尚未完成全部更新使用mysqli代替,所以我正在對現有平臺進行一些小修改。For循環只觸發一次,輸入不正確的值到mysql數據庫

所以我有一個表單根據不同表格中輸入的類別創建輸入,表單輸出正確,但對於每個存在的類別重複相同的名稱(點和貓)。

根據另一篇文章(How to insert the dynamic table row data into database at once)將這些數據插入到我的表中可以使用for循環來完成,如我的示例所示。

我遇到的問題是,它只發射一次,儘管它創建的數組應該有4個輸入。另外,發送到表列「cat_id」的數據是「3」,它可以是它使用的cat_id的第一個數字,也可以是最後一個數組迭代[0],[1],[2],[ 3]。

這是我的第一個問題,所以我很抱歉如果沒有提供所需的所有細節,我會很樂意更新,如果有其他需要的話。

$cat_id  = $_POST['cat']; 
$points  = $_POST['points']; 

$count  = count($cat_id); 

for ($i = 0; $i < $count; $i++) { 

    $sql = "INSERT INTO scoring (cat_id, points) VALUES ('$cat_id[$i]','$points[$i]')"; 
    $query = mysql_query($sql); 

} 

編輯:根據建議更新代碼。

+2

如果'mysql_real_escape_string'(請注意**「string」**)在陣列上正常運行,我會感到非常驚訝。無論如何,返回值('$ cat_id')將是一個字符串 – Phil

+0

同意@Phil。很確定mysql_real_escape _ ** string **將在這種情況下返回一個布爾值,從而使'count'爲1,從而只觸發一次循環。轉儲您使用的值並查看您獲得的值。 – CmdrSharp

+0

'mysql_real_escape_string'已經從'$ cat_id'和'$ points'中移除,結果是一樣的:( –

回答

2

您鏈接的問題/答案不正確。數組不是默認動態生成的HTML:

爲了讓您的<form>結果被當成array發送到PHP腳本,要對<input><select><textarea>元素是這樣的:

<input name="MyArray[]" /> 
<input name="MyArray[]" /> 
<input name="MyArray[]" /> 
<input name="MyArray[]" /> 

http://php.net/manual/en/faq.html.php#faq.html.arrays

所以我推測你目前有

<input name="cat"> 
<input name="cat"> 

它將只處理一個cat元素。這會導致你的1次迭代。

嘗試:

<input name="cat[]"> 

每個字段。要在將來使用print_rvar_dump來調試,請輸出您認爲變量包含的內容。

至少在您將驅動程序更新爲可處理參數化查詢的東西時,還可以使用mysql_real_escape

+1

或var_export(),以調試:P – ArtisticPhoenix

+1

我也在這裏http://stackoverflow.com/q/33469080/ lol根據評論我留在那裏回來在2015年11月 –

+1

*「也使用mysql_real_escape在當你將驅動程序更新爲可以處理參數化查詢的東西時,至少是最小的。「* - 他們可以使用」(int)「或」intval()「,使其非常安全。 –

相關問題