Formulaire avec noms de champs variables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Formulaire avec noms de champs variables

Re: Formulaire avec noms de champs variables

par Spols » 18 févr. 2017, 14:10

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.

Re: Formulaire avec noms de champs variables

par Une Minute » 17 févr. 2017, 18:19

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

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

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

par Spols » 17 févr. 2017, 11:26

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);

Formulaire avec noms de champs variables

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

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 !