2017-10-11 14 views
0

答案的動態數量,和我通過以下到後端對我使用JQuery驗證前端處理在準備好的聲明

data: { 
    'field1': $("input[name='field1']:checked").val(), 
    'field2': $("input[name='field2']:checked").val(), 
    'field3': $("#field3").val(), 
    'field4' : $("#field4").val(), 
    'field5' : $("#field5").val(), 
    'field6' : $("#field6").val() 
} 

是必需的前三個字段,所以它們會一直有一個值。接下來的三個是可選的,所以他們可能沒有價值。在我的PHP文件,我做這樣的事情必填字段

if (!empty($_POST["field1"])) { 
    $field1 = filter_var($_POST["field1"], FILTER_SANITIZE_STRING); 
    array_push($inputArray, $field1); 
} else{ 
    $errors['field1'] = 'Please select field1'; 
} 

而對於可選字段我做

if (!empty($_POST['field4'])) { 
    $field4 = filter_var($_POST["field4"], FILTER_SANITIZE_STRING); 
    array_push($inputArray, $field4); 
} 

到本月底,我有一個$inputArray可能3-6之間含有傳遞給我的數據庫文件的值。在這裏,我做這樣的事情

$stmt = $dbh->prepare("INSERT INTO database_table(Field1, Field2, Field3, Field4, Field5, Field6) VALUES (?, ?, ?, ?, ?, ?)"); 
$stmt->bindParam(1, $this->inputArray[0]); 

現在將罰款前三,但如果我再嘗試一個可選的元素,它不存在,一個錯誤就會被拋出。

什麼是處理這種情況的最好方法?在PHP文件中,我應該總是爲三個if語句(它們是可選字段)(例如,

else { 
    array_push($inputArray, ''); 
} 

我知道我可能使用的幾種解決方案,只是想從別人那裏得到他們如何處理它的意見。

感謝

+0

您可以根據您實際想要插入的數據構建預準備聲明? ^^ – Jakumi

回答

1

我發現,處理這類問題的最好的辦法就是建立動態查詢。當您使用關聯$inputArray時,這種方法更容易。這樣,而不是做

array_push($inputArray, $field1); 

$inputArray['field1Name'] = $field1; 

與每個字段的相應值替換 「字段1」。

這樣,你可以建立你的查詢是這樣的:

$qry = "INSERT INTO database_table("; 
$qry .= implode(',', array_keys($inputArray)); //append a comma separated list of field names. 
$qry .= ") VALUES(" 
$qry .= trim(str_repeat('?,', count($inputArray)), ','); //append ?, for each element in the array and trim the trailing comma 
$qry .= ')'; 

$stmt = $dbh->prepare($qry); 
$stmt->execute(array_values($inputArray)); //Execute the query with the values from the input array 

這樣的SQL查詢參數的數量是動態的,基於上填寫的字段數。

這可以很容易地更改爲使用命名參數,而不是?,但一般概念是相同的。