2014-02-25 204 views
0

我的if语句在我的while循环中似乎无法正确执行。我认为这可能与我的逻辑有关。对我来说,它似乎应该工作,但一定有一些我错过了。我需要While循环来运行并且每次都进行计数。在第四个循环中,我需要if语句中的代码运行,但似乎永远不会发生。任何人都可以提供soloution吗?PHP IF ELSE语句问题

<?php 
    $input = $_GET['input'];//Note to self $input in the name of the search feild 
    $terms = explode(" ", $input); 
    $query = "SELECT * FROM content WHERE "; 

    foreach ($terms as $each){ 
     $i++; 
     if ($i == 1) 
      $query .= "keywords LIKE '%$each%' "; 
     else 
      $query .= "OR keywords LIKE '%$each%' "; 
    } 

    // connecting to our mysql database 
    mysql_connect("localhost", "username", "password"); 
    mysql_select_db("database"); 

    $query = mysql_query($query); 
    $numrows = mysql_num_rows($query); 

    if ($numrows > 0){ 
     for($i=0; $i < $numrows; $i++){ 
     while ($row = mysql_fetch_assoc($query)){ 

      $id = $row['id']; 
      $title = $row['title']; 
      $description = $row['description']; 
      $keywords = $row['keywords']; 
      $link = $row['link']; 
      $plink = $row ['plink']; 
      $views = $row ['views']; 

       if($i== 4){ 
      echo '<td valign="top" "width="248" height="100%"> 
      <table width="100%" border="0"> 
      <tr> 
       <td align="center" valign="top"><a href='.$link.'> 
       <img src='.$plink.'width="200" height="151" vspace="5" /> 
      <br><b><a href='.$link.'>'.$title.'</b></a> 
       <br><strong><span style="line-height:20px">Total views: '.$views.'</span></strong> 
       </td> 
        </tr> 
       </table> 
       </td><tr>';    
      } 

      else{ 

      echo '<td valign="top" "width="248" height="100%"> 
      <table width="100%" border="0"> 
      <tr> 
       <td align="center" valign="top"><a href='.$link.'> 
       <img src='.$plink.'width="200" height="151" vspace="5" /> 
      <br><b><a href='.$link.'>'.$title.'</b></a> 
       <br><strong><span style="line-height:20px">Total views: '.$views.'</span></strong> 
       </td> 
        </tr> 
       </table>' 
          ; 

       } 
        } 


     } 



     } 

    else 
     echo "No results found for \"<b>$input</b>\""; 



    // disconnect 
    mysql_close(); 
?> 
+1

您的应用程序容易受到SQL注入...... – Tobias

+0

真的,我该如何解决呢? – user3349271

+0

请参阅http://www.php.net/manual/en/function.mysql-real-escape-string.php,您需要转义所有来自脚本外部的输入。 – Tobias

回答

0

您正在为每行循环一次,但在for循环中,您有一段时间正在获取所有行。你需要摆脱for循环。

因此,而不是这样做:

for($i=0; $i < $numrows; $i++){ 
    while ($row = mysql_fetch_assoc($query)){ 

你应该这样做:

$i = 0; 
    while ($row = mysql_fetch_assoc($query)){ 
     $i++; 
     .... 
+0

我喜欢你的朋友。这是问题所在。非常感激,非常感谢。 – user3349271

+0

如果它的工作接受和upvote答案,请 – ElefantPhace

0

在您for$i == 1的第一次迭代,所以你的病情将不会执行。但是,您的while循环将清空结果集,以便在for循环的第二次和后续迭代中不会提取任何行。您的if条件不会再次遇到。