Page 1 sur 1

Formulaire avec noms de champs variables

Posté : 17 févr. 2017, 10:45
par Une Minute
Bonjour,

Je me permets de refaire appel à vous pour une petite question.
J'aimerais faire un formulaire dans lequel l'utilisateur pourrait choisir le type de donnée (donc le champs) à modifier dans la bdd (en sélectionnant les champs dispos dans une simple liste déroulante).
Ma question est donc, est-ce possible d'avoir un nom variable de champs lorsqu'on fait un UPDATE ?

Exemple :
$query=$db->prepare('UPDATE mytable SET $var= :modification  WHERE username=:username');

        $query->bindValue($var,$_POST['modification'],PDO::PARAM_INT);
Je pensais faire des requêtes différentes avec des conditions du genre "if S_POST['champs'}=email { UPDATE mytable SET email etc} mais j'aurais aimé trouver un moyen plus simple et certainement plus pro..

J'ai bien cherché sur internet mais je ne trouve rien qui correspond à ce que je recherche..

Merci d'avance !

Re: Formulaire avec noms de champs variables

Posté : 17 févr. 2017, 11:26
par Spols
Non les champs ne peuvent pas être remplacé par bindValue http://stackoverflow.com/questions/1822 ... -parameter

Mais tu peux insérer cette valeur dans ta requète via une variable

$query=$db->prepare('UPDATE mytable SET '.$var.' = :modification  WHERE username=:username');


        $query->bindValue(':modification',$_POST['modification'],PDO::PARAM_INT);
        $query->bindValue(':username',$_POST['username'],PDO::PARAM_STR);

Re: Formulaire avec noms de champs variables

Posté : 17 févr. 2017, 11:47
par wireg
Salut,

Peut être ça :

Code : Tout sélectionner

$champs = array('champ1, 'champ2, 'champ3'); if (in_array($_POST['champ'], $champs)) { // update à faire } else { // champ inconnu dans la table }

Re: Formulaire avec noms de champs variables

Posté : 17 févr. 2017, 18:19
par Une Minute
Merci à vous deux !

@Spols, WAHOU, tu es sur tous les fronts ! Malheureusement je ne dois pas m'y prendre comme il faut, j'ai défini $var, il m'indique que la modification a bien été prise en compte mais rien ne se passe au niveau de la bdd.

@wireg, j'ai un message d'erreur "Notice: Array to string conversion on line 190 et si j'enlève les '. .' ça ne me marque plus de message d'erreur mais ça ne fonctionne pas non plus.
$champs = array('telephone', 'email', 'contact');

if (in_array($_POST['champs'], $champs)) {
   // update à faire


        $query=$db->prepare('UPDATE partenaires SET $champs[] = :modification,  WHERE username=:username');

        $query->bindValue(':modification',$_POST['modification'],PDO::PARAM_INT);

        $query->bindValue(':username',$_POST['username'],PDO::PARAM_INT);

Re: Formulaire avec noms de champs variables

Posté : 18 févr. 2017, 14:10
par Spols
Si tu mets ta requète entre simple quotes, il n'y aura pas d'interprétation des variables.
donc soit tu utilise des double quotes soit tu concatène comme j'avais proposé.

de plus, la syntaxe $champs[] que tu utilise ne sert qu'a ajouter un élément à ton tableau donc ce n'est pas la bonne façon de l'utiliser.

$query=$db->prepare("UPDATE partenaires SET $_POST['champs'] = :modification, WHERE username=:username");
OU
$query=$db->prepare('UPDATE partenaires SET '.$_POST['champs'].' = :modification, WHERE username=:username');

dans tous les cas, si ca marche pas, fait afficher ta requète pour la debugger plus facilement.