PHP - 检查单元格是否为空

时间:2015-06-25 16:02:03

标签: php database-design

我正在编写一个简单的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语句检查某些内容是否为空?
  3. 有更有效的方法吗?
  4. 代码=

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

1 个答案:

答案 0 :(得分:0)

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

// 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>';

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

通过为标题提供专用表格,可以在数据库级别进一步优化:

  

表:relevant_topics_titles
  topic_id | title_id |名字|网址|降序

其中topic_id是加入您的表relevant_topics的外键,而title_id17之间的数字(或更少或更多)

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