2009-04-20 64 views
3

我從數據庫中檢索3個字段,默認情況下,只有用戶名字段將包含內容。其他信息將從用戶應用程序中添加。如果該字段中沒有條目,我想將該字段顯示爲「無信息」。我試圖使用empty()和is_null()都無濟於事。在兩種情況下,$ row ['firstname']和$ row ['lastname']的var_dump都返回NULL。檢查數據庫中的空值 - 失敗

<?php 
    if (isset($_GET["subcat"])) 
    $subcat = $_GET["subcat"]; 
if (isset($_GET["searchstring"])) { 
    $searchstring = $_GET["searchstring"]; 
} 
$con = mysqli_connect("localhost","user","password", "database"); 
if (!$con) { 
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); 
    exit; 
} 
$table = 'USERS'; 
$brand = '%' . $searchstring . '%'; 
$rows = getRowsByArticleSearch($brand, $table); 
echo "<table border='0' width='100%'><tr>" . "\n"; 
echo "<td width='15%'>Username</td>" . "\n"; 
echo "<td width='15%'>Firstname</td>" . "\n"; 
echo "<td width='15%'>Surname</td>" . "\n"; 
echo "</tr>\n"; 
foreach ($rows as $row) { 
    if (is_null($row['firstname']) || $row['firstname'] == "") { 
     $row['firstname'] == "No Info"; 
    } 
    if ($row['lastname'] == null || $row['lastname'] == "") { 
     $row['firstname'] == "No Info"; 
    } 
    var_dump($row['firstname']); 
    var_dump($row['lastname']); 
    echo '<tr>' . "\n"; 
    echo '<td><a href="#" onclick="updateByUser(\''. $row['username'] .'\',\''.$subcat.'\')">'.$row['username'].'</a></td>' . "\n"; 
    echo '<td><a href="#" onclick="updateByUser(\''. $row['username'] .'\', \''.$subcat.'\')">'.$row['firstname'].'</a></td>' . "\n"; 
    echo '<td><a href="#" onclick="updateByUser(\''. $row['username'] .'\', \''.$subcat.'\')">'.$row['lastname'].'</a></td>' . "\n"; 
    echo '</tr>' . "\n"; 
} 
echo "</table>\n"; 
function getRowsByArticleSearch($searchString, $table) { 
    $con = mysqli_connect("localhost","user","password", "database"); 
    $recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lower(username) LIKE ? "; 
    if ($getRecords = $con->prepare($recordsQuery)) { 
     $getRecords->bind_param("s", $searchString); 
     $getRecords->execute(); 
     $getRecords->bind_result($username, $firstname, $lastname); 
     $rows = array(); 
     while ($getRecords->fetch()) { 
      $row = array(
          'username' => $username, 
          'firstname' => $firstname, 
          'lastname' => $lastname, 
         ); 
      $rows[] = $row; 
     } 
     return $rows; 
    } else { 
     print_r($con->error); 
    } 
} 

回答

4

打開display_errors並將error_reporting設置爲E_ALL(無論是在php.ini中還是在htaccess中)。這應該揭示任何非明顯的錯誤。

試試下面的檢查,如果事情是空的:

<?php 
if(!isset($row['...']) || empty($row['...'])) 
{ 
    $row['firstname'] = 'No Info'; 
} 
?> 

此外,請注意,您正在使用「==」到$行的東西設置爲「無信息」。這個確實是返回'真正'(或1)。使用一個'='來設置變量。

1

兩件事情嘗試...

if($row['field'] === NULL) { } 

if(isset($row['field'])) { } 
+0

這兩種方法沒有什麼區別。埃。 – 2009-04-20 13:50:39

3

首先,你的主要問題:

您正在使用比較操作符$行[ '姓名'] == 「無信息」 ;代替分配運營商$ row ['firstname'] =「No Info」;

其他問題:

  • 爲什麼你建立連接兩次?或者實際上多次?找到讓您的功能知道連接的方法!
  • 將連接分解爲包含。
  • 如果你可以直接訪問返回的數組,那麼你爲什麼要這麼做while循環呢?