2012-02-22 100 views
0

我正在將數據保存到mysql數據庫,這些將會是不同的選項,而不是讓他們在他們自己的列我試圖讓他們在同一個。數組爆炸並保存

所以像mysql中的表面看起來像:grass,pavement,tarmac - 我可以獲取要顯示的數據,但由於某種原因無法在添加新選項或刪除選項後將其保存。

編輯 - 這是現在的工作,我轉發它在這裏,以幫助別人需要幫助!由於

地址:

$surface = mysql_real_escape_string($_POST['surface']); 
    $array = explode(',',$setQuery['Surface']); 
    $new_array = implode(',',$array).','.$surface; 
    $saveSettings = mysql_query("UPDATE `settings` SET Surface = '$new_array' WHERE id = '1'"); 

刪除:

$surface = mysql_real_escape_string($_GET['s']); 
    $array = explode(',',$setQuery['Surface']); 
    unset($array[$surface]); 
    $new_array = implode(',',$array); 
    $saveSettings = mysql_query("UPDATE `settings` SET Surface = '$new_array' WHERE id = '1'"); 

感謝所有幫助 問候

+6

停止所有'for'循環無義加入數組元素轉換爲字符串,並[使用'破滅()'](http://us3.php.net/manual/en/function.implode.php )'$ new_array = implode(「,」,$ array);' – 2012-02-22 20:36:29

+0

如果你有正確的錯誤處理:'mysql_query(...)或die(mysql_error())',你會被告知爲什麼你的查詢失敗。 – 2012-02-22 20:37:47

+0

你是否從'mysql_query()'得到錯誤?檢查'mysql_error()'。另外,當你的刪除從'$ _GET'獲取時,你的添加來自'$ _POST'。在任何情況下,您都不會在查詢之前調用mysql_real_escape_string()來轉義輸入值... – 2012-02-22 20:39:25

回答

1

已經使用for循環來構建陣列到逗號分隔的字符串送你走錯了路。

正確的行動當然這裏是使用內置implode()的PHP從您的數組構造字符串:

$new_array = implode(",", $array); 

我還請注意,您的add方法從$_POST['s']讀取輸入而delete方法讀取從$_GET['s']。檢查這些之間的一致性,如果這是一個問題。

但是,在任何一種情況下,必須調用mysql_real_escape_string()以正確地將其轉義爲SQL注入。在將數組添加到數組中並將其從數組中刪除並被稱爲implode()之前,最好在將其插入SQL字符串之前完成此操作。

// All changes add/del made to array already... 
$new_array = implode(",", $array); 
$new_array = mysql_real_escape_string($new_array); 

$saveSettings = mysql_query("UPDATE `settings` SET Surface = '$new_array' WHERE id = '1'"); 
// Use error handling methods: 
if (!$saveSettings) { 
    // Something went wrong 
    echo mysql_error(); 
}