2011-03-29 65 views
2

基本上我有一個動態表單,它根據用戶選擇的方式提供可變數量的輸入,我用這個name="user[]"設置了所有文本輸入以將值存儲到數組。將表單輸入存入數組並查詢數組存在問題

我然後提交表單的地方進入此陣後:

$array = check_input($_POST['user']);

然後我用這陣在查詢像這樣:

$query = 'SELECT * FROM users_tb WHERE student_number IN(' . implode(',', $array) .')'; 
mysql_query($query) or die(mysql_error()); 
$result=mysql_query($query); 

,我得到這個錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

現在我想要檢查數值是否在數組中,但是當我嘗試print_r($array);以查看數值是否存在時,它僅打印單詞「Array」

我在這裏做錯了什麼?

感謝

另外的問題----

我具有由用戶在不同的動態形式輸入一個字符串數組。我想將數組中的每個值和itemid一起存儲到表中(這對所有數據都是一樣的)

我的查詢當前正在用implode將整個數組插入到一行text_value中。有沒有辦法,而不是遍歷數組,併爲數組中的每個值運行查詢,對我來說呢?

當前查詢:

$query = "INSERT INTO answers_tb (item_id, text_value)VALUES('$itemid','".implode(',', $answers) . "')"; 

這裏是print_r的陣列:

陣列([0] =>選項1 [1] =>選項2 [2] =>選項3 [3] =>選項4)

感謝

+0

聽起來像你的check_input()函數可能做錯了什麼。我們可以看到它的來源嗎? – erisco 2011-03-29 15:19:59

回答

1

您在check_input()中執行的所有操作都是爲字符串設計的。考慮試試這個。

function check_input_array($data) 
{ 
    foreach ($data as &$d) { 
    $d = trim($d); 
    $d = stripslashes($d); 
    $d = htmlspecialchars($d); 
    $d = mysql_real_escape_string($d); 
    } 
    return $data; 
} 

現在你將有兩個功能:check_input(),其是適用於字符串和check_input_array(),其是適用於一維數組。

另外,請參閱fredrik的答案,因爲他發現您的代碼忘記引用您放入SQL字符串的值。


我的猜測是,對於您的示例數組,需要將以下內容插入表中。

item_id|text_value 
-------+---------- 
     0|option 1 
     1|option 2 
     2|option 3 
     3|option 4 

那看起來就像這樣。

$records = array(); 
foreach($array as $item_id => $text_value) { 
    $records[] = '("' . $item_id . '","' . $text_value . '")'; 

} 
$sql = 'INSERT INTO answers_tb (item_id, text_value) VALUES'; 
$sql .= implode(',', $records); 
+0

$ d的&infront有什麼作用? – buymypies 2011-03-29 15:33:59

+0

&$ d表示$ d是參考,而不是副本。這樣,當我更改$ d的值時,它會更改它引用的值 - 在這種情況下,它是$ data中的值。如果沒有參考,$ d將是該值的副本,並且$ d的變化對$ data中的值沒有影響。 – erisco 2011-03-29 15:36:12

+0

好吧,謝謝!任何機會,你可以幫助我與我的實際查詢問題?我已更新 – buymypies 2011-03-29 15:43:32

0

你的陣列是

當數組爲空print_r將打印喜歡:

Array 
(
) 

而且當數組是空的,你的查詢將是這樣的:

SELECT * FROM users_tb WHERE student_number IN() 

這是因爲空表的不正確爲IN子句。

你可以試試:

$query = 'SELECT * FROM users_tb WHERE student_number IN('NULL, ' . implode(',', $array) .')'; 
1

我已經做了,在過去的類似查詢,我只好用這個破滅,它的工作:

$numbers = "'".implode($array,"','")."'"; 
$query = "SELECT * FROM users_tb WHERE student_number IN ($numbers)"; 

編輯:此可能不是你的問題的解決方案,問題可能是你的check_input函數。如果參數是一個數組。我修剪不採取數組作爲輸入參數,但一個字符串,所以你將不得不遍歷數組並修剪每個元素。