1

PHP スイッチを使用して、mysql データベースから同じエントリを 2 つ取得しています。私は問題をここに切り分けました。おそらく誰かが私を甘やかすことができますか? $mySQL->Fetch() はクエリの次の行を取得するだけです。

これが私が取り組んでいるものです:

while($row = $mySQL->Fetch())
{
switch($filter)
{
    case 1:
    case 2:
        $data[] = array(150, $row["lastName"]);
        $data[] = array(125, $row["firstName"]);
        $data[] = array(100, $row["city"]);
        $data[] = array(75, $row["state"]);
        $data[] = array(100, FormatPhone($row["phone"]));
        $data[] = array(125, $row["registrationDate"]);
        $data[] = array(125, $row["expirationDate"]);
        $id = $row["id"];

        echo "<a href=\"?dp=profile&filter=member&id=$id\"><ul class=\"search\">";
        foreach($data as $key => $value)
        {
             echo "<li style=\"width:$value[0]px\">$value[1]</li>";
        }
        echo "</ul></a>";
        break;
}
}

何らかの理由で、リストが作成され続けます。明らかな何かを見落としたに違いありませんが、それを追跡することはできません。

HTMLが出力しているものは次のとおりです。

<ul class="search">
    <li style="width:150px">Jones</li>
    <li style="width:125px">Bob</li>
    <li style="width:100px">City</li>
    <li style="width:75px">NH</li>
    <li style="width:100px">(123) 456-7890</li>
    <li style="width:125px">2013-01-20</li>
    <li style="width:125px">2014-07-31</li>
    <li style="width:150px">Doe</li>
    <li style="width:125px">Jane</li>
    <li style="width:100px">Little Town</li>
    <li style="width:75px">NH</li>
    <li style="width:100px">(123) 456-7890</li>
    <li style="width:125px">2013-01-20</li>
    <li style="width:125px">2014-07-31</li>
</ul>

1つではなく、2つを組み合わせます。しかし、順序付けられていないリスト タグを閉じるようにしました。毎回クエリをパージする必要がありますか?? ありがとう

4

3 に答える 3

1

あなたの答えは、PHP 変数スコープの動的な性質にあると思います。使用する前に $data を宣言する必要がなかったことに注目してください。PHP は、data という変数が必要であると想定し、[] を使用して配列に追加したため、配列が必要であると推測します。while ループの反復ごとに、必要に応じて行の結果を $data に追加しますが、「新しい」$data 変数が必要であることを PHP に伝えていません。以下のように $data を明示的に宣言することをお勧めします。

while ($row = $mySQL->Fetch()) {
    $data = array();
    switch ($filter) {
        // case statements

これにより、各反復の開始時に $data が空の配列に再初期化され、現在の行のリスト項目のみが作成されることが保証されます。

于 2013-01-21T06:18:42.680 に答える
1

最初の反復で最初に追加した後、次の反復で再び次の要素を入れて$data、 like を使用している$data[]= $next_elementため、以前のデータは $data 配列から削除されないため、反復ごとに配列を設定解除します これはうまくいくはずです。

于 2013-01-21T05:18:41.100 に答える
0

交換:

$data[] = array(150, $row["lastName"]);
$data[] = array(125, $row["firstName"]);
$data[] = array(100, $row["city"]);
$data[] = array(75, $row["state"]);
$data[] = array(100, FormatPhone($row["phone"]));
$data[] = array(125, $row["registrationDate"]);
$data[] = array(125, $row["expirationDate"]);

と:

$data = array(
    array(150, $row["lastName"]);
    array(125, $row["firstName"]),
    array(100, $row["city"]),
    array(75, $row["state"]),
    array(100, FormatPhone($row["phone"])),
    array(125, $row["registrationDate"]),
    array(125, $row["expirationDate"]),
);  

$data反復ごとに新しい配列を作成するのではなく、反復ごとに単一の配列を変更しています。

于 2013-01-21T06:19:36.937 に答える