2017-09-07 17 views
0

我有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不爲空時插入/刪除。目前我檢查是否$ _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) "); 
} 
+1

您的代碼易受注入。請使用[PDO](http://php.net/manual/en/book.pdo.php)或[Mysqli準備好的陳述](http://php.net/manual/en/mysqli.quickstart.prepared-statements .php) – IsThisJavascript

+0

如果你可以將你的輸入重構成數組,你會發現使用起來更容易。如果你有以數字或字母命名的變量,這是一個好兆頭,你應該使用數組來代替。 – iainn

+0

這個代碼只是一個簡單的代碼,我寫了一個建議,而不是我的項目中的真實代碼:D – user3064132

回答

0

它看起來像它可能是你正在尋找某物:

if (isset($_POST)){ 
//code here 
} 
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注入

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/