数组爆炸并保存

时间:2012-02-22 20:35:03

标签: php mysql arrays

我将数据保存到mysql数据库中,这些将是不同的选项,而不是将它们放在自己的列中,我试图将它们保存在同一个数据库中。

所以像mysql中的表面看起来像:草,路面,停机坪 - 我可以获得要显示的数据,但在添加新选项或删除选项后,我无法出于某种原因将其保存。

编辑 - 现在正在运行,我将它转发到此处,以便其他人需要帮助!谢谢

添加:

    $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'");

感谢您的帮助 问候

1 个答案:

答案 0 :(得分:1)

使用for循环将数组构建为以逗号分隔的字符串,将错误的路径发送给您。

这里正确的做法是使用PHP内置的implode()来构建数组中的字符串:

$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();
}