php和SQL查询的数组问题

时间:2011-04-09 07:50:14

标签: php mysql smarty

嘿伙计们,我正在使用smarty和php我试图让这个功能正常工作

                {foreach $rows as $row}
            <input type="checkbox" name="likes[]" value="{$row.ID}">{$row.Interests}<br>
            {/foreach}

复选框有html /模板,它从我的数据库中的表中获取数据

现在我正在尝试将数据存储到我的数据库中

     // $likes = mysql_escape_string($likes);

      $connection = mysql_open();
      $insert = "insert into Users " . 
          "values (null, '$firstName', '$lastName', '$UserName', '$email', from_unixtime('$DOB'), '$join', '$gender')";


      $result = @ mysql_query ($insert, $connection)
            or showerror();
        $id = mysql_insert_id();
        //echo $id; testing what it gets.
          mysql_close($connection);

      $connection = mysql_open();
      foreach($likes as $like)
      {

      $insert3 = "insert into ProfileInterests " .
        "values ('$id', '$like', null)";
      $result3 = @ mysql_query ($insert3, $connection)
        or showerror();

      }
      mysql_close($connection)
        or showerror();
    }

我正在使用的脚本将数据输入我的数据库......上面还有更多内容只是清理用户输入。 mysql_open()是我自己的函数,所以不必过于担心。

    $likes = @$_POST['likes'];

这就是我用来获得喜欢的东西....我觉得这是错的。我不知道该怎么做....

此刻我收到此错误。为foreach()提供的参数无效 我认为这完全与变量$ likes有关,我认为它并没有被视为一个阵列...我应该做什么的任何想法..我是一个相当新手。

1 个答案:

答案 0 :(得分:1)

以下一行:

$likes = join(",",$likes);

正在将您的$likes 数组转换为$likes 字符串,其中包含值并用逗号分隔。

所以,稍后,当你尝试遍历$likes时,它不再是一个数组:它是一个字符串 - 它解释了为foreach()提供的无效参数。


在评论后编辑:调用以下行时:

$likes = mysql_escape_string($likes);

如果您的$likes是一个数组,则会遇到一些麻烦,因为mysql_escape_string适用于字符串。

不要试图一次性逃避整个数组,而应该在每个项目上使用mysql_escape_string,同时在数组上循环 - 有点像:

foreach($likes as $like)
{
    // escape the current item :
    $escaped_like = mysql_real_escape_string($like);

    $insert3 = "insert into ProfileInterests values ('$id', '$escaped_like', null)";
    $result3 = @ mysql_query ($insert3, $connection) or showerror();
}


作为旁注:你应该在开发时使用var_dump()来查看它们包含的内容;-)它会帮助你理解你的代码在做什么。