2011-12-26 75 views
0

這會在用戶用可選輸入填寫表單時開始。這些值由AJAX傳遞給另一個PHP頁面以插入到數據庫中。如果一個特定的輸入是空的,我不想更新存儲在數據庫中的數據。除了寫很多if語句之外,有沒有辦法檢查輸入值是否爲空?如果它是空的,我該如何編寫語句,以便MySQL不會更新數據庫中的相應字段?是否有一種簡單的方法可以跳過將字段更新爲數據庫中的空值?

if(isset($_POST['f_name']) && isset($_POST['m_name']) && isset($_POST['l_name']) && isset($_POST['alt_name'])){ 
    $fname = $_POST['f_name']; 
    $mname = $_POST['m_name']; 
    $lname = $_POST['l_name']; 
    $altname = $_POST['alt_name']; 

如果某些$ _POST條目爲空,則不應將其放入數據庫中。我這樣說是因爲如果數據庫中已經存在一個值,我不想用空的值覆蓋這個值。

+0

[表單域輸入的可能重複空比不更新](http://stackoverflow.com/questions/6577678/form-field-input-empty-than-do-not-update),[如何更新一個或多個字段忽略空字段爲mysql數據庫?](http://stackoverflow.com/questions/6522096/) – outis 2011-12-26 23:04:10

回答

2

在這種情況下,你還不允許人們進入只是一個blank space/&bnsp;

<?php 
$empty = FALSE; 

foreach ($_POST as $key) 
{ 
    if (!isset($key) || strlen(trim($key)) != 0) 
    { 
     $empty = TRUE; 
    } 
} 

if (!$empty) 
{ 
    $fname = $_POST['f_name']; 
    $mname = $_POST['m_name']; 
    $lname = $_POST['l_name']; 
    $altname = $_POST['alt_name']; 
} 
?> 
+0

?我希望能夠插入所有沒有空間的變量。我會將查詢更新放入if(!empty)嗎? – hellomello 2011-12-26 23:39:23

+0

不,把查詢放在我的代碼下面:-) – 2011-12-26 23:57:49

+0

所以我可以把'UPDATE user SET fname ='$ fname',mname ='$ mname',lname ='$ lname',altname ='$ altname'' ;並且這些設置參數中的每一個只有在沒有空輸入時才能起作用? – hellomello 2011-12-27 00:00:25

1

呃...你可以使用foreach來檢查所有的值。

$empty = FALSE; 
    foreach ($_POST as $key) { 
    if (!isset($key)) { 
     $empty = TRUE; 
     break; 
    } 
} 

if (!$empty) { 
$fname = $_POST['f_name']; 
    $mname = $_POST['m_name']; 
    $lname = $_POST['l_name']; 
    $altname = $_POST['alt_name']; 
} 
+0

在這種情況下,你也只允許人們使用'space' /' '。而且,你在第三行缺少''''。 – 2011-12-26 22:57:49

+0

是真的,謝謝指出。如果($ key =='')可能會解決這個問題。除非我再次失去某種東西 – Darvex 2011-12-26 23:00:14

+0

@ Mr.Plalazzo:在空格的情況下,該值不是空的,並且在問題的上下文中不應被過濾。 – adlawson 2011-12-26 23:00:23

-1

我通常使用速記如果statments(也稱爲三元運算符)來做這樣的事情。你也許可以寫你的SQL查詢是這樣的:

$query = "UPDATE my_table SET f_name = ".(!empty($fname) ? "'$fname'" : 'f_name').", m_name = ".(!empty($mname) ? "'$mname'" : 'm_name').", "; 
//etc.. etc.. 
+3

您有一個SQL注入漏洞。 – SLaks 2011-12-26 22:54:35

+0

更不用說使用'f_name = f_name'的查詢(或其他任何東西)真的很討厭。 – adlawson 2011-12-26 22:56:55

+0

值不應該直接插入到語句中。相反,使用位置參數構建語句並使用準備好的語句。 – outis 2011-12-26 22:58:08

相關問題