Search code examples
phppdoforeachsubmit-button

foreach loop submit button issue


First of all i start writing php this week and there may be unnecessary lines:) I'm just trying figuring out the logic. For now everything went fine(thx to stackoverflow). Until,

In my foreach loop statement i put submit button, I added the db id after button name. So i put the id after $_POST too. But the problem is only the first submit button works. When i click the others nothing happens.

Thanks for your help. (btw i tried all other answers for foreach button issues. didn't help)

if (isset($_POST['arama'])) {
    $ara = trim(strip_tags($_POST["ara"]));
    $duzelt = trim(strip_tags($_POST["duzelt"]));
    $id = $_SESSION["id"];

    if (!empty($ara)) {
        echo '<div class="form-style-10">';
        echo '<table><tr>';
        echo "<th>İsim</th><th>Cep Telefonu</th><th>Sabit Telefonu</th>        </tr>";

        $ara1 = '%'.$ara.'%';
        $sql = $db -> query("SELECT * FROM rehber WHERE k_id='".$id."' AND isim LIKE '%$ara%'");
        $yok = $sql->rowCount();;

        if ($yok != 0) {

            echo "<form action=''  method='POST'>";
        foreach ($sql as $dizi) {
            $iden=$dizi[id];
            echo "<tr><td><input type='text' name='isim1' value='$dizi[isim]'></td>";
            echo "<td><input type='text' name='cep1' value='$dizi[cepno]'></td>";
            echo "<td><input type='text' name='ev1' value='$dizi[evno]'></td>";
            echo "<input type='hidden' name='id2' value='$iden'>";
            echo "<td><input type='submit' name='duzelt".$iden."' value='duzelt'></td></form></tr>";
        }
        echo "</table>";

        echo "</div>";

    }else{
        echo '<div class="form-style-10" style="background-color:#f04"><div class="section" style="color:#FFFC00">'.$ara.' adında bir kullanıcı kayıtlı değildir.</div></div>';
        header("refresh:3;rehber.php?mr=arama");
    }
    }
    else{
        echo '<div class="form-style-10" style="background-color:#f04"><div class="section" style="color:#FFFC00">Arama kutusu boş. Lütfen aramak istediğiniz kişinin adını yazınız.</div></div>';
        header("refresh:3;rehber.php?mr=arama");

    }
}
$buton = "duzelt".$_POST["id2"];
if (isset($_POST[$buton]) && $_POST[$buton]) {
    $duz = $_POST[$buton];
    if (!empty($duz)) {
            echo $_POST["isim1"];
            echo $_POST["cep1"];
            echo $_POST["ev1"];
            echo $_POST["id2"];
            echo $buton;

            $sql1 = $db -> prepare("UPDATE rehber SET isim = ?, cepno = ?, evno = ? WHERE id = ?");
            $sql1 -> execute(array($_POST["isim1"], $_POST["cep1"], $_POST["ev1"], $_POST["id2"]));
            echo "Kayıt başarıyla tamamlanmıştır.";
            header("refresh:3;rehber.php?mr=duzen");
        }else{
            echo "kaydedilecek veri yok";
        }
        }

Solution

  • The only real issue that I can see if that the initial form constructor appears outside of the form element, whilst the form element is closed in the foreach loop. I would move the form constructor into the foreach loop. Also, as a secondary, you are using id as a constant value in your $iden constructor. This is easily resolved, but it seems you really want the index, which you can get from the foreach loop.

    Please observe:

        foreach ($sql as $iden => $dizi) { // <-- $iden is now the index
            //$iden=$dizi[id]; <- no longer required
            echo "<form action=''  method='POST'>"; // <--form created inside loop
            echo "<tr><td><input type='text' name='isim1' value='$dizi[isim]'></td>";
            echo "<td><input type='text' name='cep1' value='$dizi[cepno]'></td>";
            echo "<td><input type='text' name='ev1' value='$dizi[evno]'></td>";
            echo "<input type='hidden' name='id2' value='$iden'>";
            echo "<td><input type='submit' name='duzelt".$iden."' value='duzelt'></td></form></tr>";
        }
    

    Now you have the form being constructed within the loop, and the index is properly being passed along.