避免空数组的未定义偏移量错误

时间:2016-10-19 11:45:53

标签: php html mysql

我正在升级我的网站,并希望从具有相同代码的多个页面转移到执行所有用户操作的单个页面。我可以做得很好但是因为用户可以请求任何不可预测的内容,一些<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">
	<h1><?php echo $heading1[0];?></h1>
	<p><?php echo $paragraph1[0];?></p>
</div>
<!--ignore this 'two' if none existent in database-->
<div class="two">
	<h1><?php echo $heading1[1];?></h1>
	<p><?php echo $paragraph1[1];?></p>
</div>

谢谢。

2 个答案:

答案 0 :(得分:2)

isset()你是这里的朋友。 如果指定的索引存在则返回true,否则返回false。

例如,您可以像这样使用它。

whereRaw('date(created_at) = ?', [Carbon::now()->format('Y-m-d')] )

答案 1 :(得分: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; ?>