Page 1 sur 1

Problème dans conditions pur faire rentrer requete

Posté : 21 mars 2017, 16:27
par Jenjak77
Bonjour à tous,

Alors voilà mon problème, j'ai une liste d'éléments avec une checkbox ($_POST['choix']) pour chaque, je peux choisir ceux que je veux et cliquer sur "modifier", j'atteri sur une page avec les éléments sélectionnés dans des input text, jusque là tout va bien !

Je voudrais maintenant changer des choses dans ces input et cliquer sur (un autre) modifier pour que la modification soit faite dans la base de données.

j'y arrive pour une ligne, par contre pour plusieurs ça ne fonctionne pas, normal ça ne fait parti d'aucune boucle (cela prend je pense le dernier "id")

Je ne parviens pas à trouver la solution, soit pour faire rentrer dans une boucle, soit pour faire autrement...

Voici mon code:
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);
}
Pour info, mon isset($_POST['modifier']) qui m'affiche mes input m'empeche d'inserer le isset($_POST['modification']) par exemple dans le foreach vu qu'une fois cliqué il ne suit plus...

merci d'avance pour vos explications !

Re: Problème dans conditions pur faire rentrer requete

Posté : 21 mars 2017, 16:54
par moogli
salut,

ceci est une bonne façon de permettre les injections SQL

Code : Tout sélectionner

"UPDATE temp_$sep SET InstdAmt='$_POST[modif1]', N2='$_POST[modif2]', IB='$_POST[modif3]' WHERE id = '$_POST[modif]'

pour le reste il faut que tu nommes tes input avec la notation tableau pour récupérer tout le monde
exemple <input type='text' name='modif[]' value='$val'/>

coté validation tu auras des tableaux dans les index associé du tableau $_POST.
Reste a boucler dessus ils auront le même index pour chaque ligne de ta base de donnée et donc faire ta requête SQL.

Je te conseil aussi d'utiliser une requête préparée pour améliorer cela.


@+

Re: Problème dans conditions pur faire rentrer requete

Posté : 21 mars 2017, 17:03
par Jenjak77
Salut Moogli, merci beaucoup pour ta réponse, pour les injections effectivement j'ai simplifié au max mon code le temps de voir ou mon problème venait...

Je suis ultra débutant en PHP, si j'ai bien compris l'écriture doit être la suivante ?

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

Pour la boucle j'essaie de m'imagine, ça ressemblera plus à du while ?

Re: Problème dans conditions pur faire rentrer requete

Posté : 21 mars 2017, 17:18
par moogli
<input type='text' name='modif[]' value='$val' hidden/>
<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 />

la valeur sera ce qu'il y a dans le value html

par contre je te conseil
- d'oublier l'utilisation des " pour délimiter les chaines de caractère et d'utiliser les ' et la concaténation (en fait tu peux aussi utiliser la concaténation avec les ") ou alors heredoc mais il faut vraiment une syntaxe correcte c'est n'importe quoi la. Les indexs sont des chaines de caractères (dans ce cas) il doivent être délimité comme tel
- utiliser des " pour les attribut html (et nom les ") c'est le plus standard
- utiliser la structure foreach pour parcourir l'un des tableau issue de $_POST et avec l'index avoir les données correspondante des autres ;)


@+