0

さて、私はこれを約6時間いじっていましたが、正しく動作させることができません. それは私がやっていることはただのばかげたことだと確信しています。

$i = 0;
$sql = mysql_query("SELECT type, info, url FROM alerts WHERE username = '$user_logged_in' ORDER BY id ASC LIMIT 40");
$div_grid = '<div style="float:left;">';


while ($row = mysql_fetch_array($sql))
{
    if ($i < 11){
    $display = '<a href="' . $row['info'] . '"><div class="' . $row['type'] . "_alert" . '" style="float:left; margin-left:-22px;"></div></a>';


    $div_grid .='<div style="float:left;">' . $display . '</div>';
    $i++;
    } 
    if ($i > 11){
        $display = '<a href="' . $row['info'] . '"><div class="' . $row['type'] . "_alert" . '" style="float:left; margin-left:-22px; margin-top:14px;"></div></a>';


    $div_grid .='<div style="float:left;">' . $display . '</div>';
    $i++;
    }

}
$div_grid .= '</div>';

echo $div_grid;

何らかの理由で、これらの div 出力の最初の行全体を取得しますが、2 行目は出力されません。$i >= 11{ を設定した場合を除いて、2 つの ID 11 が得られます。明らかに、ここで重要な何かが欠けています。何か案は?

また、最後に、if ステートメントを >= 10 && <= 20; にしたいと思います。これまでのところ機能していないようですが、最初に別の場所に問題があると思います。

4

3 に答える 3

2

$i両方のifステートメント内でインクリメントしています。$iが 10 のときはif11$iに増加し$iます。

2 つの提案:

  1. $i外側ifのインクリメント
  2. doif {} else {}ステートメント
于 2012-10-26T14:13:22.290 に答える
0

少しリファクタリングすると、コードが少しわかりやすくなります。

$i = 0;
$sql = mysql_query("SELECT type, info, url FROM alerts WHERE username = '$user_logged_in' ORDER BY id ASC LIMIT 40");
$div_grid = '<div style="float:left;">';

while ($row = mysql_fetch_array($sql))
{
    $displayStyle = 'float:left; margin-left:-22px;';

    if ($i > 11) $displayStyle .= ' margin-top:14px;';

    $display = '<a href="' . $row['info'] . '"><div class="' . $row['type'] . "_alert" . '" style="' . $displayStyle . '"></div></a>';
    $div_grid .='<div style="float:left;">' . $display . '</div>';
    $i++;

}

$div_grid .= '</div>';

echo $div_grid;

if/elseif ブロック内のコードのほとんどが重複しています。類似点を抽出し、if ステートメント内の違いのみを含めると、物事がかなり単純化されます。

于 2012-10-26T14:21:15.563 に答える
0

$i++あなたは2回インクリメントしています。>=そうしないと行11が欠落し、レコードセットの最後までループが出力なしで実行されるため($1==11したがって、11未満でも11未満でもありません)、使用する必要もあります。

while ($row = mysql_fetch_array($sql)) {
    if ($i < 11){
        // first row
    } else {
        // second row
    }
    $i++; //increment
}
于 2012-10-26T14:13:54.503 に答える