1

PHPのforeachループについて質問があります。どういうわけか、私はこの方法で最後の行をエコーバックするだけのようで、この問題がどこにあるのか迷っています。$ onderdeeltje[1]と$selectedmodelをforeachループ内とIFステートメント外のエコーでチェックするたびに、問題なくすべてが完全に貼り付けられます。また、それらが等しく同じであり、IFステートメントに反応する必要があることも示しています。IFステートメント内の2つを比較するとすぐに、最後の1つだけが表示されます。チェックボックスechoを削除して、echo"test"などに置き換えます。また、一度だけテストすることも示しています。誰かがこれに光を当てることができますか?同じページにこのような複数(2 +これ)のforeachループがあり、完全に機能しますが、これだけがバグのようです。

echo "<form method='post' action='formpie.php'>";

$onderdelen = file("onderdelen.txt");

foreach ($onderdelen as $onderdeel) 
{
    $onderdeeltje = explode(",", $onderdeel);

    if ($onderdeeltje[1] == $selectedmodel)
    {
        echo "<input type='checkbox' name='check_list[]' value='$onderdeeltje[0]'>$onderdeeltje[0]<br>";
    }
}

echo "</form>";

$ selectedmodelは次のようになります:iPhone 3Gおよびテキストリストは次のとおりです:

Reparatie touchscreen €41.50,iPhone 3G
Reparatie Wi-Fi-antenne €50.00,iPhone 3G
Reparatie trilmodule €40.00,iPhone 3G
Reparatie sim slot €70.50,iPhone 3G
Reparatie oorluidspreker €46.00,iPhone 3G

チェックボックスとしてReparatieoorluidspreker€46.00のみが表示されます。

私を助けてください!:) 前もって感謝します!

-------------------------------------------------- -----------

の解き方:

<br>繰り返しフォームのチェックボックス値のリストのようなもの、または私の場合はリストを1行ごとに貼り付けると、出力に非表示のスペースが表示されない可能性があるようです。

これを修正するには、次のようにIFequalステートメントの前または内部の値をトリミングする必要があります。

foreach ($onderdelen as $onderdeel) 
{
    $onderdeeltje = explode(",", $onderdeel);

    if (trim($onderdeeltje[1]) == $selectedmodel)
    {
        echo "<input type='checkbox' name='check_list[]' value='$onderdeeltje[0]'>$onderdeeltje[0]<br>";
    }
}

ZombieSpyからのサポートのおかげで解決しました。

4

1 に答える 1

0

マークBが言ったように、あなたは改行のものを持っているかもしれないので、str_replaceを使用してください

echo "<form method='post' action='formpie.php'>";

$onderdelen = file("onderdelen.txt");

foreach ($onderdelen as $onderdeel) 
{
    $onderdeeltje = explode(",", $onderdeel);

    if (str_replace ("\n", "", $onderdeeltje[1]) == $selectedmodel)
    {
        echo "<input type='checkbox' name='check_list[]' value='$onderdeeltje[0]'>$onderdeeltje[0]<br>";
    }
}

echo "</form>";
于 2013-01-05T20:19:58.080 に答える