2

基本的に、データベースに記事があり、最初のレコードの表示方法を変更したいと考えています。最新の (投稿された) 記事に焦点を当て、古い記事だけを一覧表示したい ( F1.comを参照)。配列内の最初の値を取得して別の方法で表示する方法を知る必要がありますが、これを行う方法がわかりません。最初の行を変更する方法ではなく、すべての行が同じように表示されるようにすることができます。また、残りの行に同じものを表示するように指示する方法を知る必要があります。その後、そこでifステートメントを使用し、その前に行の何らかのカウントを使用していると推測します。


現在のコード:

    $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);

OK、Luke Dennis のコードを取得してテストしようとしましたが、次のエラーが表示されます:警告: foreach() に無効な引数が指定されました。これは foreach ステートメントの行です。ちょうど頭に浮かんだことは、5 つほどの古い記事だけを表示したいということです。これは私が持っているもので、エラーを作成しています:

<? $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']."";
        
    }
}

?>

配列をセットアップするために mysql_fetch_array をどこかに追加する必要がありますか?

4

8 に答える 8

8

結果を繰り返し処理し、css クラスを最初のエントリに適用します。

$first = true;    
while ($row = mysql_fetch_assoc($result)) {
  $cssClass = '';
  if ($first) {
    $cssClass = 'highlight';
  }
  echo '<p class="' . $cssClass . '">' . $row['text'] . '</p>';
  $first = false;
}
于 2009-02-23T22:36:48.630 に答える
5

少し大雑把ですが、ループの最初の実行を指定する変数をハードコーディングすることがよくあります。次のようなものです:

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

        $first = false;
    }
    else
    {
        // Do some other stuff
    }
}
于 2009-02-23T22:37:43.950 に答える
1

上記のすべてが正しいです。もちろん、Luke Dennis の投稿はもう少し肉付けされています。

Brian Fisher が言ったように、Luke の投稿に従って、最初のリンクに遭遇したら CSS スタイルを追加してください。

F1のサイトの記事一覧を見てみました。かなりよく構築されたサイト - 「それは当然のことです。」:-)

いずれにせよ、記事の一覧は 2 行のテーブル (summary="Latest Headlines") 内に降順 (新しい順) に含まれています。

クラスを 2 列目に配置するだけです (<td class="first-news-article">)。次に、クラス名と適切なスタイル設定値を css ファイル (おそらくあなたの modules.css) に追加します。そのファイルには記事に関連付けられたかなりの数のクラス値が既にあるため、既存の値をそのまま使用できる場合があります。

それはそれについてであるべきです-実際にそれをすること以外に!

ところで、基礎となる html の品質から判断すると、「記事リスト エミッター」は既にあると思います。そのエミッターを見つけて、最初のレコードをテストするための適切な条件を配置するだけです。

ダレル

コードの追加に注意しました。例としてF1のサイトを見せていたと思います。とにかく、あなたは進んでいると思います。

于 2009-02-23T23:15:27.150 に答える
1

結果をループするときは、通常、単純な if ステートメントでうまくいきます。ブール値を使用して、結果の最初の行を出力したか、現在出力しているかを示すことができます。まだ指定していない場合は、特定のスタイルを指定してから、ブール値を true に設定してください。その後、すべての後続の行は異なるスタイルになります。

于 2009-02-23T22:37:03.000 に答える
0

私は使用しますarray_shift()

$result = mysql_fetch_assoc($resultFromSql); // <- edit
$first = array_shift($result);
echo '<h1>'.$first['title'].'</h1>';

foreach ($result as $row) {
  echo '<h2>'.$row['title'].'</h2>';
}
于 2009-02-24T21:02:42.983 に答える
0

PHP はよくわからないので、Perl で疑似コーディングします。私はこのようにはしません:

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

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

ループ内の if ステートメントは、ループ ロジックを不必要に混乱させます。これはパフォーマンスの問題ではなく、コードの読みやすさと保守性の問題です。そのようなことは、バグのせいです。それが配列の最初のものであるという事実を利用してください。それは 2 つの異なることであり、2 つの異なるコードで実行します。

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

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

もちろん、タグを使用して最初の行を目立たせる必要があります。

于 2009-02-24T21:23:56.520 に答える
0

結果セットをループしてページに出力するコードがあると思いますか? このコードを貼り付けていただけないでしょうか。

于 2009-02-23T22:37:28.647 に答える
-1

これを行う最良の方法は、whileループの前にfetchステートメントを配置することです。

1回の反復でのみ真であるwhileループ内にテストを配置すると、数百万行の結果が得られるため、時間の無駄になる可能性があります。

于 2009-02-24T20:03:25.887 に答える