Bir veritabanından bir null değeri edin -

3 Cevap php

Ben bir veritabanından 3 alanları alınıyor yaşıyorum, ve varsayılan olarak, yalnızca adı alan içeriğe sahip olacaktır. Diğer bilgi, bir kullanıcı bir uygulamadan eklenecektir. Ben alanda hiçbir giriş yoksa "Hayır Bilgiler" olarak alanını göstermek istiyorum. Ben boşuna hem boş () ve is_null () kullanmaya çalışıyorum. $ Satırın bir var_dump ['Isim'] ve $ satır ['soyad'] Her iki durumda null döndürür.

<?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);
    }
}

3 Cevap

Display_errors açın ve (php.ini veya bir htaccess ya) E_ALL için error_reporting ayarlanır. Bu herhangi olmayan bariz hatalar ortaya koymalıdır.

Şey boş ise kontrol için aşağıdakileri deneyin:

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

Ayrıca, please note you're using '==' to set the $row things to 'No Info'. Al, bu 'gerçek' dönmek (veya 1) yoktur. Değişkenleri ayarlamak için bir tek '=' kullanın.

İlk ve ana sorun:

Sen ['Isim'] == "Bilgi yok" $ satırda karşılaştırma operatörlerini kullanıyor; yerine ['Isim'] = "Bilgi yok" assignement operatörler $ satır;

Diğer konular:

  • Neden iki kere bağlantı kurmak mı? Ya da aslında birden çok kez? Lütfen fonksiyonları bağlantıyı bildirmek için bir yol bulun!
  • Include içine bağlantıyı faktör.
  • Neden yapıyorsun bu süre döngü, doğrudan döndürülen dizi erişebilirsiniz?

Denemek için iki şey ...

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

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