2015-06-25 271 views
0

我正在编写一个简单的PHP页面,将信息拉入卡片。 目前我的脚本编码的数量是“linktitle_1,linktitle_2,linktitle_3”等,可以通过,现在是3,并且如果3个单元中的任何一个都是空的,它们仍然作为空的,之后用逗号。 我想要做的是能够打印出0-7项中的任何信息。 (适当的列存在于数据库中) 的伪代码将是这样的:PHP - 检查单元格是否为空

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

我期待与两个相关的链接做到这一点,和链接标题部分。所以我想我需要知道的是:

  1. 如何避免这些语句将在里面的回声?
  2. 如何使用if语句来检查某些内容是否为空/空?
  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(); 
?> 

回答

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 |名称| url |说明

topic_id是一个外键的加入与你的表relevant_topicstitle_id17(或更多或更少)之间的一个数。

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

相关问题