0

我有一个 php UPDATE 脚本,它正在更新数据库中的一行,并将信息输入到表单中。

我有一个名为:status

和一个名为:resolved

我需要更改resolved1if statusis equal toDone否则resolved需要0

我想出了这个,但它似乎不起作用,代码运行得很好,没有错误。但已解决的字段不会改变。

 ...

    if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

mysqli_query($con,"UPDATE affiliate_tasks SET status= '$_POST[task_status_edit]',task_name = '$_POST[task_name_edit]',due_date = '$_POST[task_date_edit]',if ($_POST[task_status_edit] == 'Done') {
    resolved = '1'
}
else{
    resolved = '0'
    }
WHERE task_id='$_POST[task_id]'");


echo '<meta http-equiv="Refresh" content="0;url=http://www.green-panda.com/website/panda/affiliates/task.php?msg=' . urlencode(base64_encode('A task was updated!')) . '">';

?>
4

3 回答 3

4

您在 SQL 语句中混合了 PHP,从而创建了一个无效的语句(这正是错误消息告诉您的内容:)You have an error in your SQL syntax。记住:SQL 与 PHP 无关。

您应该在运行查询$_POST[task_status_edit] 之前检查 的值,并resolved相应地设置变量。然后运行查询:

$resolved = $_POST['task_status_edit'])=='Done'?1:0;

mysqli_query($con,"UPDATE affiliate_tasks 
                   SET resolved='$resolved', 
                       status= '$_POST[task_status_edit]',
                       task_name = '$_POST[task_name_edit]',
                       due_date = '$_POST[task_date_edit]' 
                   WHERE task_id='$_POST[task_id]'");
于 2013-06-08T08:59:13.810 回答
1

那这个呢:

($_POST[task_status_edit] == 'Done')?1:0;

您可以使用 if else 结构添加替换它:

mysqli_query($con,"UPDATE affiliate_tasks SET status= '$_POST[task_status_edit]',
task_name = '$_POST[task_name_edit]',
due_date = '$_POST[task_date_edit]',
resolved=".($_POST[task_status_edit] == 'Done')?1:0 ."
WHERE task_id='$_POST[task_id]'");
于 2013-06-08T09:01:15.093 回答
1

像这样...

if($_POST['task_status_edit']=='Done'){
  $resolved =1;} else {$resolved=0;}


mysqli_query($con,"UPDATE affiliate_tasks SET resolved='$resolved', status= '$_POST[task_status_edit]',task_name = '$_POST[task_name_edit]',due_date = '$_POST[task_date_edit]' WHERE task_id='$_POST[task_id]'");

或者更简单的一种线性方式......

mysqli_query($con,"UPDATE affiliate_tasks SET status= '$_POST[task_status_edit]', task_name = '$_POST[task_name_edit]', due_date = '$_POST[task_date_edit]', resolved=".($_POST[task_status_edit] == 'Done')?1:0 ." WHERE task_id='$_POST[task_id]'");
于 2013-06-08T09:02:44.670 回答