如果不是空$ _POST,则仅更新值

时间:2017-09-07 09:31:55

标签: php mysql

我有4个这样的变量:

$a = $_POST['a'];    //1
$b = $_POST['b'];    //
$c = $_POST['c'];    //
$d = $_POST['d'];   // 5

当前mysql工作从输入中捕获所有值:

$wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key IN(rate1,rate2,rate3,rate4) AND post_id=".$_POST['postid']);  
$wpdb->query( "INSERT INTO $wpdb->postmeta  (post_id,meta_key,meta_value) VALUES ($_POST['postid'],rate1,$a),($_POST['postid'],rate2,$b),($_POST['postid'],rate3,$c),($_POST['postid'],rate4,$d) ");

无论如何减少只在$ _POST不为null时插入/删除的查询。当前我检查$ _POST是否为空,我将运行删除/插入一次。它使我的代码很长,因为我必须检查a,b,c,d然后插入/删除

if($a != ""){
  $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key=rate1 AND post_id=".$_POST['postid']);  
$wpdb->query( "INSERT INTO $wpdb->postmeta  (post_id,meta_key,meta_value) VALUES ($_POST['postid'],rate1,$a) ");
}

3 个答案:

答案 0 :(得分:1)

<?php
    $errors = false;
    $fields = array("a","b","c","d");

    foreach($fields as $fieldname){

        if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])){

            $errors = true;

            echo "enter ".$_POST[$fieldname];
        }
    }
    if(!$errors){
        $a = $_POST['a'];    //1
        $b = $_POST['b'];    //
        $c = $_POST['c'];    //
        $d = $_POST['d'];   // 5


        //  DO your queries

    }
?>

注意sql注射

答案 1 :(得分:0)

看起来你可能正在寻找:

if (isset($_POST)){
//code here
}

答案 2 :(得分:0)

根据您的原始代码,如果未设置任何四个变量,PHP将发出通知(您正在尝试访问不存在的数组索引)。

为了符合fail-fast原则,您需要通过在层次结构中的某个位置使用以下代码将该通知提升为异常状态(PHP7 +代码,但PHP5 +代码可用于底部链接)。

set_error_handler(function($severity, $message, $filename, $lineno) {
    throw new Exception($message);
});

这样,无论何时尝试读取尚未设置的POST变量,执行都不会向前移动,数据不完整。您需要执行try / catch以优雅地处理该异常。

PHP5 +代码:https://www.electrictoolbox.com/error-reporting-exception-handlers-php/