2016-10-19 36 views
0

我正在升級我的網站,並希望從具有相同代碼的多個頁面移動到執行所有用戶操作的單個頁面。我可以做得很好,但因爲用戶可以請求任何不可預測的內容,所以某些<div>標籤將爲空,並且MySQL將拋出未定義的偏移錯誤,因爲database中沒有足夠的內容來填充fetch_array()。一些示例代碼..避免未定義的空數組偏移錯誤

<?php 
 
$dbhost = 'localhost'; 
 
$dbname = 'd_dundaah'; 
 
$dbuser = 'max'; 
 
$dbpass = ''; 
 

 
$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
 
if ($conn->connect_error) die($conn->connect_error); 
 

 
$query = "SELECT * FROM events WHERE day='mon'"; 
 

 
$result = $conn->query($query); 
 
if (!$result) die($conn->error); 
 

 
$rows = $result->num_rows; 
 
$j = 0; 
 

 
$heading_array=''; 
 
$paragraph_array=''; 
 

 
while ($j < $rows) 
 
{ 
 
$result->data_seek($j); 
 
$row = $result->fetch_array(MYSQLI_ASSOC); 
 

 
$event_heading = $row['heading']; 
 
$event_paragraph = $row['paragraph']; 
 

 
$heading_array[]=$event_heading; 
 
$paragraph_array[]=$event_paragraph; 
 

 
++$j; 
 
} 
 

 
$result->close(); 
 
$conn->close(); 
 

 
?>

然後調用數據時,如果mon只有一行數據的偏移誤差將被調用。我如何讓MySQL忽略這個?

<div class="one"> 
 
\t <h1><?php echo $heading1[0];?></h1> 
 
\t <p><?php echo $paragraph1[0];?></p> 
 
</div> 
 
<!--ignore this 'two' if none existent in database--> 
 
<div class="two"> 
 
\t <h1><?php echo $heading1[1];?></h1> 
 
\t <p><?php echo $paragraph1[1];?></p> 
 
</div>

謝謝。

+0

使用'empty'或'isset' - [PHP: 「通知:未定義變量」 和 「通知:未定義指數」]!(http://stackoverflow.com/questions/4261133/php-notice-未定義的變量和 - 通知-未定義索引) – jitendrapurohit

回答

2

isset()函數是你的朋友在這裏。 如果指定的索引存在,則返回true,否則返回false。

你可以像這樣使用它。

if(isset($heading1[1])){ 
    // Do something here, only if $heading1[1] exists 
} 
1

你的HTML改爲:

<?php if (isset($heading1[1]) && isset($paragprah[1])) : ?> 
<div class="two"> 
    <h1><?php echo $heading1[1];?></h1> 
    <p><?php echo $paragraph1[1];?></p> 
</div> 
<?php endif; ?> 

或更安全,防止空數組:

<?php if (isset($heading1[1]) && !empty($heading1[1]) && isset($paragprah[1]) && !empty($paragprah[1])) : ?> 
<div class="two"> 
    <h1><?php echo $heading1[1];?></h1> 
    <p><?php echo $paragraph1[1];?></p> 
</div> 
<?php endif; ?>