数据库设计-PHP-检查单元格是否为空


database design - PHP - check if cell is empty

我正在编写一个简单的PHP页面,它将信息拉入卡片中。目前,我的脚本正在硬编码"linktitle _1、linktitle _2、linktitle _3"等可以通过的数量,目前是3,如果这3个单元格中的任何一个是空的,它们仍然会以空的形式显示,然后用逗号表示。我想做的是能够打印出0-7项信息中的任何一项。(数据库中有相应的列)Psuedo代码应该是这样的:

if (linktitle_1 = empty, linktitle_1_url = empty) {
echo '<p>linktitle_1</p>'}
else {
do nothing
};

我希望对相关链接和链接标题部分都能做到这一点。所以我想我需要知道的是:

  1. 我该如何逃脱这些陈述的回声
  2. 如何使用if语句来检查某个内容是否为空/null
  3. 有更有效的方法吗

代码=

<?php
// DB details
$hostname = "localhost";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($hostname, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM relevant_topics";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // Removing special characters from rows.
    while($row = $result->fetch_assoc()) {
    $title_clean = $row["title"];
    $title_clean = strtolower($title_clean);
    $title_clean = preg_replace('/'s*/ ', '', $title_clean);   
    $class_clean = $row["class"];
    $class_clean = strtolower($class_clean);
    $class_clean = preg_replace('/'s*/ ', '', $class_clean);   
    $related_clean_1 = $row["related1"] ;
    $related_clean_1 = strtolower($related_clean_1);
    $related_clean_1 = preg_replace('/[.,]'s*/ ', '', $related_clean_1); 
    $related_clean_2 = $row["related2"] ;
    $related_clean_2 = strtolower($related_clean_2);
    $related_clean_2 = preg_replace('/[.,]'s*/ ', '', $related_clean_2); 
    $related_clean_3 = $row["related3"] ;
    $related_clean_3 = strtolower($related_clean_3);
    $related_clean_3 = preg_replace('/[.,]'s*/ ', '', $related_clean_3); 
    $related_clean_4 = $row["related4"] ;
    $related_clean_4 = strtolower($related_clean_4);
    $related_clean_4 = preg_replace('/[.,]'s*/ ', '', $related_clean_4); 
    echo'
         <div class="mix item '.$class_clean.'">
         <h3>'.$row["title"].'</h3>
         <p>'.$row["description"].'</p>
         </br>
         <p>Related Items:</p>
         <p>
         <a href="#myModal'.$related_clean_1.'" role="button" data-toggle="modal">'.$row["related1"].'</a>
         <a href="#myModal'.$related_clean_2.'" role="button" data-toggle="modal">'.$row["related2"].'</a>
         <a href="#myModal'.$related_clean_3.'" role="button" data-toggle="modal">'.$row["related3"].'</a>
         <a href="#myModal'.$related_clean_4.'" role="button" data-toggle="modal">'.$row["related4"].'</a>
         <a href="'.$row["related1_link"].'">'.$row["related1"].',</a> &nbsp;
         <a href="'.$row["related2_link"].'">'.$row["related2"].',</a> &nbsp;
         <a href="'.$row["related3_link"].'">'.$row["related3"].',</a> </p>
         </br>
         <div class="item-bottom '.$row["class"].'_counter">
         <a href="#myModal'.$title_clean.'" role="button" data-toggle="modal">See more</a>
         </div>
     </div>
    <div id="myModal'.$title_clean.'" class="modal fade">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h3 class="modal-title modal-top-health">'.$row["title"].'</h3>
            <br>
            <p>'.$row["details"].'</p>
            <br>
            <a href="'.$row["linktitle_1_url"].'">'.$row["linktitle_1"].', </a>
            <p>'.$row["linktitle_1_desc"].'</p>     
            <a href="'.$row["linktitle_2_url"].'">'.$row["linktitle_2"].', </a>
            <p>'.$row["linktitle_2_desc"].'</p> 
            <a href="'.$row["linktitle_3_url"].'">'.$row["linktitle_3"].', </a>
            <p>'.$row["linktitle_3_desc"].'</p>    
          </div>
        </div>
      </div>
    </div>
 ';

}
} else {
echo "0 results";
}
$conn->close();
?>

使用循环进行优化,将输出存储在变量中:

// build list of titles
$titles = '';
for($i=1; $i<=7; ++$i) {
   // check for data
   if($row['linktitle_'.$i.'_url'] != null && $row['linktitle_'.$i] != null) {
      // add to output
      $titles .= '
            <a href="'.$row['linktitle_'.$i.'_url'].'">'.$row['linktitle_'.$i].', </a>
            <p>'.$row['linktitle_'.$i.'_desc'].'</p>';
   }
}
echo '
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h3 class="modal-title modal-top-health">'.$row["title"].'</h3>
            <br>
            <p>'.$row["details"].'</p>
            <br>'.$titles.'
          </div>';

然后,您可以将7更改为任何数字。

如果值可能破坏HTML,则可以使用htmlspecialchars()对其进行转义。

$titles .= '
      <a href="'.htmlspecialchars($row['linktitle_'.$i.'_url']).'">'.
      htmlspecialchars($row['linktitle_'.$i]).', </a>
      <p>'.htmlspecialchars($row['linktitle_'.$i.'_desc']).'</p>';

相同的逻辑可以应用于相关链接。

它可以在数据库级别进行进一步优化,方法是为标题提供一个专用表:

表:相关主题标题
topic_id|title_id|name|url|desc

其中,topic_id是要与表relevant_topics联接的外键,而title_id是介于17(或更少或更多)之间的数字。

然后,您可以获取与主题id相关联的所有标题,并循环浏览它们以构建标题列表。