2016-07-19 7 views
-1

Хотелось бы, чтобы последнее сообщение появилось полностью, а не обрезало его, но затем остальные позиции были обрезаны. Я не уверен, как это сделать, поэтому я здесь! Вот код!Как я могу показать последнее сообщение без обрезки и обрезать остальные?

<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

Вам понадобится код, чтобы определить, когда вы выводите последнее сообщение. быстрый/грязный способ - получить подсчет строк и посмотреть, выводите ли вы окончательную строку. или fetch/cache в массив, а затем цикл в массиве, и тогда вы будете знать, насколько велик массив. –

ответ

1

Прежде всего: don't use mysql_ functions, но mysqli_ или PDO. mysql_ функции устарели несколько лет назад и больше не поддерживаются в самых последних версиях PHP.

В ответах на this question описано несколько способов определения последней строки набора результатов.

Я не буду предлагать решение на основе устаревших функций mysql_; вы должны сначала преобразовать свой код.

Если вы идете mysqli_ и получить соединение в $ кон, то вы можете сделать это:

$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 
    "; 
} 

Если цель состоит в том, чтобы рассматривать первую запись по-другому, то просто изменить состояние соответственно:

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

Это предположение, что последнее - это ваш первый результат, который, по-видимому, основан на запросе.

Вам нужен условный и способ знать, когда обрезать так, за пределами цикла While добавить:

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

Тогда в верхней части цикла в то время как

$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 
} 

Теперь вы можете сделать

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

Это как Марк Б и недлист. Вам нужно знать, где находится последнее сообщение. Один из способов сделать это:

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

С этим вы знаете, сколько у вас новостей.

Перед вами во время:

$i = 0; 

Только после того, как ваше время, увеличиваем $ я: $i++;

Затем проверить, если $ я равно числу новостей, если да, то вы в последний сообщение:

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