[RESOLU] implode en PDO

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 : [RESOLU] implode en PDO

Re: implode en PDO

par pacphil » 15 mars 2015, 20:17

moi j'aimerais ajouter la fonction implode simplement dans le choix

Re: implode en PDO

par moogli » 15 mars 2015, 16:30

salut,

c'est pas clair ce que tu veux il te faut être plus explicite.
dans ton code tu peux sortir le prépare avant la boucle foreach, tu ne fera qu'une fois et fera plusieurs insert avec c'est à cela que servent les requête préparée :)
ce que tu fait et pas simple et source d'ennuie.
pourquoi utiliser le table pour les noms des colonnes tu les connait met les les clairement dans la requête ce sera plus performant et plus lisible :) (surtout que la tu le fait à chaque "tour" de la boucle).

a priori tu insère une annonce par choix ?
est ce qui te gène et ce que tu souhaite régler ?
si oui cela ce gère en corrigeant le défaut de conception originale ;)
il te faut une jointure entre l'annonce et une table qui contient les types.
en clair
une table type qui contient une clef primaire et un libellé
une table typeAnnonce qui contient deux colonnes clef étrangère : pk de la table annonce et pk de la table type.La pk de cette table est les deux colonnes.

lorsque tu insère ton annonce tu récupère la clef primaire (id ?).
pour chaque choix tu insère une ligne dans la table type annonce.
pour cela il faut que les case a cocher (ou la liste déroulantes) aient en valeur la clef primaire de la table type.
cela te permet d'avoir un modèle simple, et maintenable.

Dans la même optique, si tu a un "espace membre" il ne faut pas mettre le pseudo dans la table annonce mais la clef primaire de la table qui contient les utilisateur (imagine le merdier si tu renomme un utilisateur).

je ferais un truc dans ce genre
CREATE TABLE annonce (
  idannonce INT          NOT NULL PRIMARY KEY,
  sexe      VARCHAR(1)   NOT NULL CHECK (lower(sexe) IN ('m'), 'f'),
  jours     VARCHAR(50)  NOT NULL,
  annonce   VARCHAR(500) NOT NULL,
  userid    INT          NOT NULL
);
CREATE TABLE type (
  idtype  INT         NOT NULL PRIMARY KEY,
  libelle VARCHAR(20) NOT NULL
);

CREATE TABLE typeAnnonce (
  idtype    INT NOT NULL,
  idannonce INT NOT NULL,
  PRIMARY KEY (idtype, idannonce)
);
ALTER TABLE type ADD CONSTRAINT fk_type FOREIGN KEY (idtype) REFERENCES type (idtype);
ALTER TABLE typeAnnonce ADD CONSTRAINT fk_annonce FOREIGN KEY (idannonce) REFERENCES annonce (idannonce);
userid est la clef primaire de la table contenant les utilisateurs il s'agit d'une clef étrangère.
je n'ai pas gérer l'auto increment des clefs primaires cela dépend de la base de donnée que tu utilises.

@+

implode en PDO

par pacphil » 14 mars 2015, 14:57

bonjour voilà j'aimerais ajouter un implode à mon $_post[choix]

Code : Tout sélectionner

foreach($_POST['choix'] as $liste){ $add_annonce=array(':pseudo'=> $pseudo, ':sexe'=> $sexe_m, ':choix'=> $liste, ':jours'=> $jours, ':annonce'=> $annonce); $values= join(', ',array_keys($add_annonce)); $req=$connection->prepare( 'INSERT INTO annonce ('.str_replace(':','',$values).') VALUES('.$values.')' ); $req->execute($add_annonce); }