如果发布提交语句没有超过每个循环

时间:2012-02-04 15:20:02

标签: php mysql variables foreach conditional-statements

在此先感谢,这是正在发生的事情:

if(isset($_POST['submit']))
{
$var = $_GET['var'];

foreach((array)$_POST['content'] as $area => $contents)
    {

        $result = 'UPDATE $table SET '.$area.' = "'.mysql_real_escape_string(stripslashes($contents)).'" WHERE var = "'.$_GET['var'].'";';
        mysql_query ($result);
    }


$query = 'UPDATE $table SET '.
            'title = "'.mysql_real_escape_string(stripslashes($_POST["title"])).'", '.
            'template = "'.mysql_real_escape_string($_POST["templateid"]).'", '.
            'description = "'.mysql_real_escape_string(stripslashes($_POST["description"])).'", '.
            'keywords = "'.mysql_real_escape_string(stripslashes($_POST["keywords"])).'" '.
            ' WHERE var = "'.$_GET['var'].'";';

mysql_query ($query);// or die(mysql_error());

}

我无法让if语句超越for each循环。它不会使用$ query mysql语句更新数据库。它简单地为每个循环内部的所有内容更新表,然后存在。我是否需要做一个If而不是if?我试着查找php条件语句,是否有这样的事情和声明?如:如果帖子提交做这个和这个?这基本上就是我想做的事情,如果帖子提交,请为每个循环执行并执行$ query。

如果您需要更多信息,请与我们联系。

3 个答案:

答案 0 :(得分:1)

嗯,$_POST['content']是否定义了?在这种情况下,您可能希望使用print_r($_POST)开始调试,以查看您获得的所有值。

您可能打算做的是:

foreach ($_POST as $key => $val)

编辑:
你应该真的逃脱$_GET['var']以及循环中的$area!逃避所有用户输入,总是!!!

答案 1 :(得分:0)

表名不会显示。还添加一些东西来显示mysql错误消息以帮助调试:

$result = 'UPDATE '.$table.' SET '.$area.' = "'.mysql_real_escape_string(stripslashes($contents)).'" WHERE var = "'.$_GET['var'].'";';
mysql_query ($result) or die(mysql_error());

答案 2 :(得分:0)

尝试添加* ini_set('display_errors',1); *添加脚本的开头以确保错误输出。 并使用* var_dump(mysql_error()); *来显示第二个查询的mysql错误。

还有一个小小的建议。 在$ area上切换以确保传递有效字段:

switch ($area) {
  case 'field1': $area='field1'; break;
  case 'field2': $area='field2'; break;
  default: echo 'No valid field'; continue; break;
}
祝你好运!