Nasıl ilk satır kalanı için farklı bir görünüm yapacak php ve mysql kullanarak bir veritabanından bilgi listeleme zaman?

8 Cevap php

Temelde benim veritabanında makaleler var ve ben bir şekilde ilk kayıt görüntüler değiştirmek istiyorum. Ben en son () Yayınlanan yazı odak ve eski bir makale sadece listelemek için, (bkz: F1.com) olmak istiyorum. Ben dizide benim değerlerin ilk almak ve farklı göstermek için nasıl bilmeniz gerekir ama ben bu yüzden tüm satırlar birinci satır değiştirmek için değil sadece ne kadar aynı görüntüleyebilirsiniz bunu yapabilir, bunu nasıl emin değilim. Ben de kullanmak tahmin im sonradan aynı görüntülemek için satır kalanını anlatmak için nasıl bilmeniz gereken bir deyim var ve bu satırları saymak çeşit eğer önce.


Current code:

    $result = mysql_query("SELECT * FROM dbArticle WHERE userID='".$_SESSION["**"]."' ORDER BY timestamp DESC");

while($row = mysql_fetch_array($result))
  {
  echo "<h2 class=\"heading1\">". $row['title'] ."</h2>";
  echo "By:  ".$row['username']."  Type: ".$row['type']."  Posted: ".$row['timestamp']." 
  $body = $row['body'];
  echo "<br/><p>";
  echo substr("$body",0,260);
  echo "...<span class=\"tool\"><a class=\"blue\" href=\"index.php?pageContent=readArticle&id=".$row['id']."\">Read More</a></span></p><hr/>";
  }
mysql_close($con);


Tamam ben Luke Dennis'in kodu almış ve bunu test etmek için çalıştı, ama ben bu hatayı alıyorum var: Warning: Invalid argument supplied for foreach() bu foreach statment hattıdır. Sadece akla gelen bir şey ben sadece eski eşyaların 5 ya da öylesine görüntülemek istediğiniz olacaktır. Bu benim şu hatayı yaratıyor budur:

<? $con = mysql_connect("localhost","****","***");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("******", $con);

$result = mysql_query("SELECT * FROM dbArticle ORDER BY timestamp DESC");
$first = true;    
foreach($result as $row){
    if($first)
    {
        echo"".$row['title']."";
        echo"this is the headline";

        $first = false;
    }
    else
    {
        echo"".$row['title']."";

    }
}

?>

Ben dizi yukarı ayarlamak için bir yere mysql_fetch_array eklemek gerekir mi?

8 Cevap

Ben sadece sonuçları yineleme ve ilk girişi için bir css sınıfı geçerli olacak:

$first = true;    
while ($row = mysql_fetch_assoc($result)) {
  $cssClass = '';
  if ($first) {
    $cssClass = 'highlight';
  }
  echo '<p class="' . $cssClass . '">' . $row['text'] . '</p>';
  $first = false;
}

Biraz kaba, ama ben sık sık sabit kod değişken bir döngü ilk çalıştırmak belirtmek için. Yani bir şey gibi:

$first = true;
foreach($list_of_items as $item)
{
    if($first)
    {
        // Do some stuff

        $first = false;
    }
    else
    {
        // Do some other stuff
    }
}

Sonuçlarınıza döngü deyimini ise basit çoğunlukla hile yapacak. Eğer çıktı şimdi sonuçlarının veya ilk satırı var eğer belirtmek için bir boolean kullanabilirsiniz. Eğer bunu belirli bir stil vermek ve varsa daha sonra true boolean ayarlayın. Sonra tüm sonraki satırlar farklı bir tarzı olsun.

Yukarıdakilerin hepsi doğru. Luke Dennis'in sonrası elbette etli-out bir biraz daha.

Brian Fisher dedi gibi Luke'un yazılan başına karşılaşma ne zaman, ilk bağlantı için bazı CSS stil eklemek.

Ben F1 sitesinde makale listesinde bir göz attım. Oldukça iyi inşa sitesi - "Bir beklenebilir." :-)

Neyse, makale listeleri bir iki satırlık bir tablo azalan sırayla (özeti = "Son Başlıklar") (en yenisinden başlayarak) içinde yer alır.

Sadece ikinci sütunda () bir sınıf yerleştirin. Ardından css dosyasında sınıf adı ve uygun stil değerlerini eklemek - muhtemelen 'modules.css. Orada o dosyada makale ile ilişkili epeyce sınıf değerleri zaten, bu yüzden sadece varolan değer kullanmak mümkün olabilir.

Bu konuda olmalı - aslında bunu yaparken başka!

Bu arada, altta yatan html kalitesi bakılırsa, ben zaten var sanıyorum "makale listesi verici." Sadece bu yayıcı bulmak ve ilk kayıt için test etmek için uygun koşullu yerleştirin.

Darrell

I just noted your code addition. I assume that you were showing the F1 site as an example. Anyway, I think you're on your way.

Ben sizin resultset'de aracılığıyla döngüler ve sayfada bunları yazdıran bazı kodlar var sanırım? Eğer bu kodu yapıştırın olabilir, ve bu bize yardımcı olmak için bir başlangıç ​​noktası verebilir.

Ben PHP bilmiyorum, bu yüzden Perl bunu pseudocode'u edeceğiz. Ben böyle yapmazdım:

my $row_num = 0;
for my $row ($query->next) {
    $row_num++;

    if( $row_num == 1 ) {
        ...format the first row...
    }
    else {
        ...format everything else...
    }
}

Döngü içinde deyim gereksiz döngü mantığı Clutterlar eğer. Bu bir kod okunabilirliği ve bakımı mesele, bir performans sorunu değil. Bu tür bir şey sadece bir hata için yalvarır. Bu dizide ilk şey aslında yararlanın. Bu kod iki farklı parça bunları yapmak, iki farklı şey.

my $first = $query->next;
...format $first...

for my $row ($query->next) {
    ...format the row...
}

Tabii ki, ilk satır etiketleri ile öne yapmak gerekir.

Bunu yapmanın en iyi yolu, prior while döngüsüne bir açıklama getirmek koymaktır.

Bir yineleme için sadece doğrudur döngü içindeyken bir testi koyarak milyonlarca satır bir sonuç için zaman kaybı olabilir.