2012-02-22 90 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(); 
}