2016-07-19 5 views
-1

Ich hätte gerne die neueste Post Show voll, anstatt es zu trimmen, aber dann die anderen Beiträge getrimmt werden. Ich bin mir nicht sicher, wie das geht, also bin ich hier! Hier ist ein Code!Wie kann ich den letzten Beitrag anzeigen und den Rest trimmen?

<div id="news"> 
    <?php 

    $query=mysql_query("SELECT NewsID, Title, Content, Author, 
         date_format(Date, '%m/%d/%y') AS Date 
         FROM news ORDER BY NewsID DESC LIMIT 2"); 

    while($row=mysql_fetch_assoc($query)){ 
     echo "<div class=\"news_item\"> 
       <div class=\"title\"> 
        <a href=\"article.php?newsID=$row[NewsID]\">$row[Title]</a> 
       </div> 
       <div class=\"date\"> 
        Posted: $row[Date] by $row[Author] 
       </div> 
       <div class=\"news_content\"> 
        <p>".trimNewsContent($row[Content])."</p> 
       </div> 
       </div>"; 
    } 
    ?> 
</div> 
+1

Sie benötigen Code, um festzustellen, wenn Sie den endgültigen Beitrag ausgeben. schnell/schmutzig wäre es, eine Zeile zu zählen, und sehen, ob Sie die letzte Zeile ausgeben. oder fetch/cache in ein Array, dann Schleife auf dem Array, und Sie wissen dann, wie groß das Array ist. –

Antwort

1

Vorweg: don't use mysql_ functions, aber mysqli_ oder PDO. mysql_ Funktionen wurden vor einigen Jahren veraltet und werden in den neuesten Versionen von PHP nicht mehr unterstützt.

In den Antworten auf this question werden verschiedene Möglichkeiten beschrieben, wie die letzte Zeile einer Ergebnismenge erkannt wird.

Ich gebe keine Lösung basierend auf veralteten mysql_ Funktionen; Sie sollten zuerst Ihren Code konvertieren.

Wenn Sie mysqli_ gehen und eine Verbindung in $ con bekommen, dann können Sie dies tun:

$query = mysqli_query($con, "SELECT NewsID, Title, Content, Author, date_format(Date, '%m/%d/%y') AS Date FROM news ORDER BY NewsID DESC LIMIT 2"); 
// fetch all rows 
$rows = mysqli_fetch_all($query); // pass MYSQLI_ASSOC as 2nd argument if needed 
foreach($rows as $i => $row) { 
    $content = $i == count($rows)-1 ? $row['Content'] : trimNewsContent($row['Content'])); 
    echo ".... // etc 
     $content 
     ....// etc 
    "; 
} 

Wenn das Ziel anders den ersten Datensatz zu behandeln ist, dann nur den Zustand entsprechend ändern:

$content = $i == 0 ? $row['Content'] : trimNewsContent($row['Content'])); 
1

Dies ist die Annahme, dass neueste ist Ihr erstes Ergebnis, das basierend auf der Abfrage scheint der Fall zu sein.

Sie benötigen eine bedingte und eine Möglichkeit zu wissen, wenn sie so vor der while-Schleife Add trimmen:

$shouldTrim = false; //Sine the latest is your first item you do not want to trim first 

Dann an der Spitze Ihrer while-Schleife

$content = ""; 
if($shouldTrim){//Anything but the latest 
    $content = trimNewsContent($row[Content]); 
} else { //This is your latest 
    $content = $row[Content]; //output to full content 
    $shouldTrim = true; //Set this to true going forward will trim 
} 

Jetzt können Sie

tun
<p>".$content."</p> 
0

Es ist wie Marc B und Nerdlyist sagte. Sie müssen wissen, wo der letzte Beitrag ist. Ein Weg es zu tun:

$query2 = mysql_query("SELECT count(*) AS nb_news FROM news"); 
$nbNews = mysql_fetch_array($query2); 

Damit wissen Sie, wie viel Nachrichten Sie haben.

Bevor Sie während:

$i = 0; 

Unmittelbar nach der Zeit, i erhöht $: $i++;

Dann testen, wenn ich $ auf die Anzahl der Nachrichten gleich ist, wenn ja, Sie am letzten sind Post:

if($i == $nbNews['nb_news']) 
{ 
    $content = $row[Content]; 
} 
else 
{ 
    $content = trimNewsContent($row[Content]); 
} 
Verwandte Themen