Bonjour à tous !

Je me tourne à nouveau vers vous concernant un soucis que je n'arrive pas à résoudre. Le problème est simple:

Sur mon "appli" j'ai une multitude de lignes provenants d'une base de données, chaque ligne à une checkbox ($_POST['choix'])

Quand je coche une ou plusieurs checkbox et que je clique sur modifier cela me renvoi les lignes selectionnées dans des champs texte ($_POST['modifier'])

Je voudrais maintenant pouvoir modifier ces lignes, cliquer sur modifier une fois terminé et lancer une requête UPDATE, malheureusement je me suis un peu embrouillé avec mes conditions, j'ai un peu tout essayé mais je ne vois pas ou placer cette requête...

Voici le code:

$sep correspond à un GET pour le type de base

if (isset($sep) && !empty($_POST['choix']) && isset($_POST['modifier'])) {
    echo "ENTREE(S) A MODIFIER";
    echo "<form action='' method='post' enctype='multipart/form-data'>";
    foreach($_POST['choix'] as $val) {
        $req_select = $bdd->query("SELECT * FROM temp_$sep WHERE id = $val");
        foreach($req_select as $req):
            @$EndtoEndId = $req[EndtoEndId];
            @$InstdAmt = $req[InstdAmt];
            @$Nm2 = $req[N2];
            @$IBAN = $req[IB];
            @$postInstAmt = addslashes($_POST['InstdAmt']);
            @$postNm2 = addslashes($_POST['N2']);
            @$postIBAN = addslashes($_POST['IB']);
            echo "
            <input type='text' name='InstdAmt' value='$req[InstdAmt]'/>
            <input type='text' name='N2' value='$req[N2]'/>
            <input type='text' name='IB' value='$req[IB]'/><br />
            ";
        endforeach;
    }
    echo "
    <input type='submit' name='modification' value='VALIDER LA MODIFICATION'>
    </form>
    ";
}

je voudrais placer:

if (isset($_POST['modification'])) {
$req_modif = $bdd->query("UPDATE temp_$sep SET InstdAmt='$postInstAmt', Nm2='$postN2', IBAN='$postIB' WHERE id = $val");
}

Merci d'avance pour votre aide et vos conseils !

11 réponses


Bonjour,
Pour rappel, le "name" de chaque input doit être unique sinon il y aura des doublons.
Ensuite, vous faites des tests avec un var-dump($_POST); pour voir ce qui vous est retouné en fonction de ce que vous cochés.

Jenjak
Auteur

Bonjour carouge10, merci pour ta réponse, effectivement je ne sais pas ce qui m'a pris de mettre un name différent pour chaque input...

Au niveau de la coche c'est OK, je récupère bien les lignes que j'ai séléctionné dans un input chacun, je peux faire les modifs dessus mais je ne vois pas comment placer ma requete qui dira "une fois appuyé sur POST modification alors je fais l'UPDATE"

comment avez-vous coder vos checkbox ?

Jenjak
Auteur

Voici la partie des checkbox:

if (!isset($_POST['valider']) && !isset($_POST['supprimer']) && !isset($_POST['modifier']) && !isset($_POST['modification'])) {
    $req_temps->execute();
    echo "<form method='POST' name='id' id='id' action=''>";
    if (isset($sep)) {
        echo "<input type='checkbox' onclick='cocher(this.checked)' /> Tout cocher<br /><br />";
    }
    foreach($req_temps as $temp):
        echo "<div class='ligne'>";
        echo "<input type='checkbox' name='choix[]' value='$temp[id]'>";
        echo "<div class='bloc1'>$temp[EndtoEndId]</div>";
        echo "<div class='bloc2'>$temp[InstdAmt]</div>";
        echo "<div class='bloc5'>$temp[BI]</div>";
        echo "<div class='bloc6'>$temp[N2]</div>";
        echo "<div class='bloc7'>$temp[IB]</div>";
        echo "<div class='bloc8'>$temp[Ustrd]</div>"; 
        echo "</div>";
    endforeach;
    if (isset($sep)){
        echo "<br /><br /><center><input type='submit' name='valider' value='VALIDER CES ENTREES'> <input type='submit' name='supprimer' value='SUPPRIMER CES ENTREES'><input type='submit' name='modifier' value='MODIFIER CES ENTREES'></center>";
    }
    echo "</form>";
}

d'accord, et que renvoi le var_dump($_POST); après avoir valider la modification des données ?

if (isset($_POST['modification'])) {
    var_dump($_POST);
    }
Jenjak
Auteur

Il me renvoi seulement le champ

            <input type='text' name='modif' value='$req[IB]'/><br />

array(2) { ["modif"]=> string(27) "7845896AA" ["modification"]=> string(23) "VALIDER LA MODIFICATION" }

Jenjak
Auteur

En remettant un name différent pour chaque champ il me retourne bien les 3

array(4) { ["modif"]=> string(6) "470" ["modif2"]=> string(18) "M. C.J" ["modif3"]=> string(27) "dze85dpPP" ["modification"]=> string(23) "VALIDER LA MODIFICATION" }

Comme je vous l'ai dit, il faut un nom unique pour chaque champ:

foreach($req_select as $req):
            @$EndtoEndId = $req[EndtoEndId];
            @$InstdAmt = $req[InstdAmt];
            @$Nm2 = $req[N2];
            @$IBAN = $req[IB];
            @$postInstAmt = addslashes($_POST['InstdAmt']);
            @$postNm2 = addslashes($_POST['N2']);
            @$postIBAN = addslashes($_POST['IB']);
            echo "
            <input type='text' name='InstdAmt-".$req['Id']'."' value='$req[InstdAmt]'/>
            <input type='text' name='N2-".$req['Id']."' value='$req[N2]'/>
            <input type='text' name='IB-".$req['Id']."' value='$req[IB]'/><br />
            ";
        endforeach;

J'ai pris $req['Id'] comme Id unique pour la modification, à vous d'adapter en fonction de votre table

Jenjak
Auteur

Je crois que je viens de trouver carouge10, ne vous tracassez pas, je ne suis pas du tout dedans aujourd'hui, ça arrive... :)

Encore merci

Jenjak
Auteur

Ah oui, juste une chose, ça fonctionne parfaitement pour une ligne, par contre quand j'en selectionne plusieurs ça ne m'en modifie qu'une seule, j'en reviens encore à mon problème de boucle, je ne vois pas ou placer mon post modification pour que la requete se lance sur chaque lignes

if (isset($sep) && !empty($_POST['choix']) && isset($_POST['modifier'])) {
    echo "ENTREE(S) A MODIFIER";
    echo "<form action='' method='post' enctype='multipart/form-data'>";

    foreach($_POST['choix'] as $val) {

        $req_select = $bdd->query("SELECT * FROM temp_$sep WHERE id = $val");

        foreach($req_select as $req):
            echo "
            <input type='text' name='modif' value='$val'/>
            <input type='text' name='modif1' value='$req[InstdAmt]'/>
            <input type='text' name='modif2' value='$req[N2]'/>
            <input type='text' name='modif3' value='$req[IB]'/><br />
            ";
        endforeach;
    }
            echo "
        <input type='submit' name='modification' value='VALIDER LA MODIFICATION'>
        </form>
        ";
}
if (isset($_POST['modification'])) {
    $req_modif = $bdd->query("UPDATE temp_$sep SET InstdAmt='$_POST[modif1]', N2='$_POST[modif2]', IB='$_POST[modif3]' WHERE id = '$_POST[modif]'");
    var_dump($req_modif);
}    

Salut,
c'est normal, dans ton foreach, seul la variable $var est parsée (interprêtée).
il faut mette tes variables obj ou tableau entre { } pour quelle soient parsées.

             <input type='text' name='modif' value='$val'/>
            <input type='text' name='modif1' value='{$req[InstdAmt]}'/>
            <input type='text' name='modif2' value='{$req[N2]}'/>
            <input type='text' name='modif3' value='{$req[IB]}'/><br />

@plus

Pierre