将表单输入存储到数组并查询数组时出现问题

时间:2011-03-29 15:14:44

标签: php mysql

基本上我有一个动态表单,根据用户选择的方式提供可变数量的输入,我已使用此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)

感谢

3 个答案:

答案 0 :(得分:1)

我过去做过类似的查询,我不得不使用这个内爆来实现它:

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

编辑:这可能不是您问题的解决方案,问题可能是您的check_input函数。如果参数是数组。修改不会将数组作为输入参数,而是一个字符串,因此您必须循环遍历数组并修剪每个元素。

答案 1 :(得分: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);

答案 2 :(得分: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) .')';