【问题标题】:Error INSERTING Array With Form Validation使用表单验证插入数组时出错
【发布时间】:2013-04-12 01:52:07
【问题描述】:

我有三个关于使用 mysqli 的标签系统的表单验证的查询。 .什么是转义 $tag_no 数组的最佳做法。 .当 $tag_no 数组从整数作为字符串传递的形式传递时,is_int 将不适用于 $tnumber,有什么想法吗? .这是验证从表单传递的标签数组的整体最佳实践吗?

希望这是清晰简洁的,任何帮助将不胜感激。 提前致谢。

$tag_no = $_GET['tno'];
$tno = mysqli_real_escape_string($link, $tag_no);

if ($tag_no != false) {
   $query = "INSERT INTO `uc` (`UNO`, `BNO`) VALUES ('$uno', '$box');";
   foreach ($tag_no as $tnumber) {
      if (is_int($tnumber)) {
         $query .= "
         INSERT INTO `ut` (`UNO`, `TNO`) VALUES ('$uno', '$tnumber')";
      } else {
         $query .= "INSERT INTO tags (TName) VALUES ('$tagname')"; 
      }
   };
};
mysqli_multi_query($link, $query);

【问题讨论】:

  • 即使是本地语法荧光笔也会告诉您缺少引号。您发布的是真实代码吗?
  • 如果您想这样做,为什么不将它们作为整数而不是字符串传递?
  • 使用ctype_digit()函数

标签: php forms mysqli


【解决方案1】:

即使您使用mysql_multi_query(),您也必须使用“;”将各个查询分开。

所以把你的代码改成:

foreach ($tag_no as $tnumber) {
    if (is_int($tnumber)) {
        $query .= "
        INSERT INTO `ut` (`UNO`, `TNO`) VALUES ('$uno', '$tnumber');"; # <-- note the ;
    } else {
         $query .= "INSERT INTO tags (TName) VALUES ('$tagname');"; # <-- note the ;
    }
 }

我也很确定,这会失败:

 foreach ($tag_no as $tnumber)

$tag_no 实际上是一个字符串,而 foreach 需要一个数组。 (您已将其与 mysqli_real_escape_string() 一起使用。)

【讨论】:

  • $tnumber 的类型不是整数,因为它来自于
  • 谢谢,嘿,is_array($tag_no) 返回 'array',我有什么遗漏吗?
  • is_array($tag_no); 永远不会返回 'array'。它将返回 TRUEFALSE
  • 对不起,它返回'TRUE',我不是字面意思的数组。
  • 请注意,您不能将数组传递给mysqli_real_escape_string()。你必须先解决这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
相关资源
最近更新 更多