2012-07-31 28 views
1

這個新板不合邏輯的邏輯有些幫助,但愛它到目前爲止:)需要對PHP + MySQL和HTML表格

我目前正在幫助一個朋友的礦井重做她的個人網站,我跑我的頭靠在桌子上的邏輯牆。

該表suppossed顯示在表的最新消息,包括4 columens /電池/ TDS PR行(僅此而已) - looing是這樣的: http://screencast.com/t/Rh39oh6ms0OL

所以基本上我有一個SQL查詢從新聞表中選擇日期,縮略圖和標題(由id desc命令,因此我得到最新的第一個)。

我已經做了一些邏輯(正如你可以在下面的代碼中看到的),但它只是導致表中的第一行顯示。 任何人誰可以讓我回到正確的軌道?這將非常感激。

<table> 
    <?php 
    //PHP code used for building HTML table showing news-resumes 
    //Written by: Jesper Flindt 
    //Date:  2012.07.30 
    //Version: 1.0 

    //Getting data from MySQL database 
    $query = "select date, thumbnail, headline from news order by id desc"; 
    $result = mysql_query($query) or die("Connection Error:" . mysql_error()); 

    //Setting variables 
    $i = 0; 
    $p = 0; 

    //Starting row in table 
    print('<tr>'); 

    //Looping through the resultset 
    while($row = mysql_fetch_assoc($result)) 
    { 
    //Limit row to 4 cells (TDs) 
    if($i < 4) 
    { 
     //Display the date of the news as well as its thumbnail 
     print('<td><div style="padding-left:8px;"><b>Tilf&oslash;jet d. '.$row['date'].'</b></div><div class="news_thumbframe"><img src="./upload/'.$row['thumbnail'].'" alt=""/></div></td>'); 
     $i++; 
     $p++; 
    } 
    //If row is 4 cells wide, start new row 
    else if($i % 4 == 0) 
    { 
     print('</tr><tr>'); 
     $i++; 
     $p++; 
    } 
    //Every second row should display the news headline as well as a "Read More" link ("L&aelig;s mere" in danish) 
    else if($i % 4 != 0 || $p % 4 == 0) 
    { 
     print('<td width="215" valign="top"><br /><div style="padding-left:8px;"><h2>'.$row['headline'].'</h2><a href="#">L&aelig;s mere</a></div></td>'); 
     $i++; 
     $p++; 
    } 
    else 
    { 
     $i = 0; 
     $p = 0; 
    } 
    } 
    ?> 
</table> 
+2

我假設'$ p'是'$ i'的弟弟,只是複製'$ i'的所有內容,因爲他認爲他很酷。 – Rhys 2012-07-31 12:06:23

+1

不應再使用MySQL函數。而是使用MySQLi或PDO來訪問您的數據庫。 – Lusitanian 2012-07-31 12:08:18

+0

你試圖把image1 n date1放在row1,col1(html表格)&headline1放在row2,col1第一次執行循環? – Makesh 2012-07-31 12:10:07

回答

0

可能會看起來更好

$result = mysql_query($query) or die("Connection Error:" . mysql_error()); 

$items = array(); 

while($row = mysql_fetch_assoc($result)){ 
    $items[] = array('date'=>$row['data'], 
        'thumbnail'=>$row['thumbnail'], 
        'headline'=>$row['headline'],); 
} 

$pairs = array_chunk($items,4); 

foreach ($pairs as $pair){ 

    print '<tr>'; 

    foreach ($pair as $row){ 
    print('<td><div style="padding-left:8px;"><b>Tilf&oslash;jet d. '.$row['date'].'</b></div><div class="news_thumbframe"><img src="./upload/'.$row['thumbnail'].'" alt=""/></div></td>'); 
    } 

    print '<tr/><tr>'; 

    foreach ($pair as $row){ 
    print('<td width="215" valign="top"><br /><div style="padding-left:8px;"><h2>'.$row['headline'].'</h2><a href="#">L&aelig;s mere</a></div></td>'); 

    } 
    print '<tr/>'; 
} 
+0

爲什麼使用'array()'? – phant0m 2012-07-31 12:12:41

+0

@ voodoo417 - 感謝您的幫助 - 這個解決方案爲我做了竅門。現在來分析一下你的代碼示例,以便下次需要時在我的腦海中找到合適的工具。 – JFlindt 2012-07-31 19:38:50

1

對於每一個結果(即一個整個新聞條目,沒有之一的列),你執行你的,如果條款中只有一個,因爲你使用if/elseif/elseif/else結構。它們是相互排斥的。

啓示:

此跳過你的數據庫結果每第四行共:

else if($i % 4 == 0) 
{ 
    print('</tr><tr>'); 
    $i++; 
    $p++; 
} 

這捕獲不是4的倍數和大於4的所有行:

else if($i % 4 != 0 || $p % 4 == 0) 
    { 
     print('<td width="215" valign="top"><br /><div style="padding-left:8px;"><h2>'.$row['headline'].'</h2><a href="#">L&aelig;s mere</a></div></td>'); 
     $i++; 
     $p++; 
    } 

這將永遠不會執行:

else 
{ 
    $i = 0; 
    $p = 0; 
} 

因爲您的其他條件已經耗盡所有可能性。

  • 第一個子句將執行4次。
  • 然後第二個子句會執行一次,因爲$i == 4
  • 現在第三子句,將執行爲$i == 5, 6, 7
  • 第二個子句將執行爲$i == 8
  • 第三個句子會$i == 9, 10, 11

等等等等

爲什麼你有兩個計數器變量執行?據我所知,你總是在相同的地方增加它們,並在相同的地方將它們設置爲零。有什麼不同?

更新

爲了澄清一些你在評論中提到:

else if($i % 4 != 0 || $p % 4 == 0) 

||表示邏輯或。它會首先檢查第一個條件,如果不是這樣,它會檢查第二個條件。如果其中任何一個是真的,則整個條件被認爲是真實的,並且該條款將被執行。

但是,當$i % 4 == 0爲真時,$i % 4 != 0僅爲假。這意味着,前面的else if子句被執行。該支票甚至從未到達$p部分。

+0

好的,謝謝...我會爲你帶來一個新的嘗試評論但是請注意,在第二個子句中,如果($ i%4!= 0 || $ p%4 == 0) - 該子句使用$ i作爲第一部分,使用$ p作爲第二部分,而不使用$ i對於 – JFlindt 2012-07-31 12:01:02

+1

@ phant0m說得好:) – Makesh 2012-07-31 12:02:02

+0

@JFlindt:第二部分'|| $ p%5 == 0'永遠不會是真的,永遠不會執行。 – phant0m 2012-07-31 12:13:57

0

您可以修改代碼,這樣你就可以同時生成[縮略圖,日期] & [標題]一起,每4臺

PHP:

//Setting variables 
    $i = 1; 
    $img_date = ''; 
    $headline =''; 

    //Looping through the resultset 
    while($row = mysql_fetch_assoc($result)) 
    { 
    //Building both content for 4 columns 
    $img_date .= '<td><div style="padding-left:8px;"><b>Tilf&oslash;jet d. '.$row['date'].'</b></div><div class="news_thumbframe"><img src="./upload/'.$row['thumbnail'].'" alt=""/></div></td>'; 

    $headline .='<td width="215" valign="top"><br /><div style="padding-left:8px;"><h2>'.$row['headline'].'</h2><a href="#">L&aelig;s mere</a></div></td>'; 


    if($i == 4) // Time build row 
    { 
     // Building both thumbnail and headline row 
     echo "<tr id='thumb_date'>$img_date</tr>"; 
     echo "<tr id='headline'>$headline </tr>"; 

     //resetting 
     $i=1; 
     $img_date = ''; 
     $headline =''; 
     } 
     else 
     i++; 

    }//end while 
+0

不錯的輸入@Makesh然而voodoo417的解決方案沒有辦法。 – JFlindt 2012-07-31 19:37:15