2014-07-04 66 views
0

我正在開發一個應用程序,在該應用程序中,如果某一行中的任何字段爲空或不空白,我需要單擊該應用程序。如果任何字段爲空,則變量$flag應該爲1,否則爲零。 我已經寫了,直到這裏,但我不知道接下來要做什麼來檢查每個字段是否爲空/空或不。檢查是否有任何字段在一行中爲空

public function profileComplete($email) 
{ 
    global $conn; 
    $flag=0; 
    try 
    { 
     $s = $conn->prepare("SELECT * from users where emailid = : email"); 
     $s->bindParam(":email",$email); 
     $s->execute(); 
     $s->setFetchMode(PDO::FETCH_OBJ); 
     while($row = $s->fetch()) 
     { 

     } 
    } 
} 

我該如何編碼才能使其按照要求工作? 所有的建議表示讚賞。

+1

沒有捷徑。你必須做'where field1爲null或者field2爲空或者field3爲null ....或者fieldn爲null'。 –

+0

@MarcB:這顯然不是真的。只要在'$ row'內有任何非NULL元素時,只需在該循環內設置'$ flag' ... –

+0

那麼整個全局的事情,是一個設計缺陷? –

回答

1

Id與數組過濾器一起去計數行,以避免內部循環。

$num_fields = 8; //should know this before hand but you could compare $row and $_row below but it would be more expensive to run. 
while($row = $s->fetch()){ 
    $_row = array_filter($row); //removes all empty elements 
    if(count($_row) != $num_fields){ 
     //some fields are empty 
    } 
} 

如果你認爲0是空的,這將是罰款。 - 注意 - empty()也會將0視爲空,如果你需要0不爲空,你可以在array_filter中使用自定義函數來進行=== 0嚴格等於或者!== 0的回調來檢查。

empty()將這些值視爲空 - 並在它們上返回TRUE。

"" (an empty string) 
0 (0 as an integer) 
0.0 (0 as a float) 
"0" (0 as a string) 
NULL 
FALSE 
array() (an empty array) 
$var; (a variable declared, but without a value) 
1
public function profileComplete($email) 
    { 
    global $conn; 
    $flag=0; 
    try 
    { 
    $s = $conn->prepare("SELECT * from users where emailid = : email"); 
    $s->bindParam(":email",$email); 
    $s->execute(); 
    $s->setFetchMode(PDO::FETCH_OBJ); 
    while($row = $s->fetch()) 
    { 
      foreach($row as $r){ 
      if(is_null($r) || $r==''){ 
       $flag=1; 
      } 
      } 
    } 
    } 
} 
1
while($row = $s->fetch()) 
{ 
    foreach($row as $val) 
    { 
     if(empty($val)) { $flag = 1; } 
    } 
} 

'空()' 假設你想趕上空,假,空字符串和零。如果您不想捕獲零/假,請使用if(is_null($val) || $val == '') { $flag = 1; }

1

試試這個,雖然我沒有檢查輸出。希望它可以幫助你! :)

while($row = $s->fetch()){ 
    foreach($row as $rowval){ 
      if($rowval == null || empty($rowval)){ 
      $flag=1; 
      } 
    } 
} 
+0

null爲空(),如果OP有布爾0字段或字段,例如價格總和爲0且不應被視爲空,則檢查確實應爲(空($ rowval)&&!== 0)。 – ArtisticPhoenix