Il y a une erreur dans ta requete, vérifie la dans phpmyadmin
Il y a une erreur dans ta requete, vérifie la dans phpmyadmin
Ouais, j'ai un message d'erreur :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'option' at line 1
Là je comprends pas !
J'ai recréé ma BBD, et j'ai tjs la même erreur dans PHPMyAdmin et dans mon formulaire !
OPTION est un mot reservé Mysql, renomme ta table.
OK, la table renommée, les pictos s'affichent !!!
Bien, maintenant je dois récupérer l'enregistrement de ces pictos et les attribuer à l'établissement qui vient de s'inscrire.
D'où la création de la troisième table (appelée : liaison, qui j'espère n'est pa réservée à MySQL)
Pour la première partie du formulaire, c'est bon ça fonctionne, mon établissement s'enregistre dans la table "etab" comme ceci :
Pour la récupération de 'id_picto je pédale dans la semoule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php // On commence par récupérer les champs if(isset($_POST['nom_etab'])) $etab=$_POST['nom_etab']; else $etab=""; if(isset($_POST['texte_etab'])) $texte=$_POST['texte_etab']; else $texte="";
En resumé moi je procède ainsi :
On peut se demande pourquoi j'efface tout au départ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // on efface tout $sql = "DELETE FROM liaison WHERE etablissement_id =" . $etablissement_id; // on ré-ecrit if (isset($_POST['option'])) { foreach ($_POST['option'] as $option_id) { $sql = "INSERT INTO liaison (etablissement_id, option_id) VALUES ($etablissement_id, intval($option_id))"; .... } }
Une case a cocher ne renvoit un valeur que si elle a été cochée, on ne peut donc pas savoir si une case a été decochée.
La manière la plus simple est donc de supprimer toutes les options déjà dans la base puis d'ajouter celle qui ont été cochées.
Pour ne pas incrémenter les ids a toute vitesse on peut n'effacer que celles qui n'ont pas été cochées puis faire un INSERT IGNORE basée sur un INDEX UNIQUE ...
mais bon ...
Là c'est pas clair du tout du tout !!!
Je comprends pas pourquoi tu effaces alors qu rien n'est enregistré.
Je pensais qu'il fallait enregistrer dans la table "liaison", "l'id_etab" et récupérer la valeur "id_picto" des pictogrammes cochés dans le formulaire.
Parce que j'ai essayé ta solution, a priori adaptée à mon cas :
ais sur cette ligne y a erreur : $sql = "DELETE FROM liaison id_etab =" . $id_etab;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 <?php // On commence par récupérer les champs if(isset($_POST['nom_etab'])) $etab=$_POST['nom_etab']; else $etab=""; if(isset($_POST['texte_etab'])) $texte=$_POST['texte_etab']; else $texte=""; // on efface tout $sql = "DELETE FROM liaison id_etab =" . $id_etab; // on ré-ecrit if (isset($_POST['picto'])) { foreach ($_POST['picto'] as $id_picto) { $sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, intval($id_picto))"; } } // Aucun champ n'est vide, on peut enregistrer dans la table $db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error()); // sélection de la base mysql_select_db('test_picto',$db) or die('Erreur de selection '.mysql_error()); // on écrit la requête sql $sql = "INSERT INTO etab(id_etab,etab,texte) VALUES('".mysql_real_escape_string('')."','".mysql_real_escape_string($etab)."','".mysql_real_escape_string($texte)."')"; // on insère les informations du formulaire dans la table mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); // on affiche le résultat pour le visiteur echo "<br />"; echo 'Votre Etablissement a été enregistré avec succés !'; echo "<br />"; mysql_close(); // on ferme la connexion ?>
J'ai essayé de mettre .", rien tjs même message
J'essaye un autre code :
En cochant le premier voilà le résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $picto = (isset($_POST['picto']))?$_POST['picto']:null; echo "Pictos cochés :<br>"; if (!empty($picto)) { foreach($picto as $cle => $valeur) { echo $cle.' : '.$valeur.'<br>'; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Pictos cochés : 0 : 1
Actuellement rien n'est encore enregistré ; mais quand des options auront été ajoutées et que tu reviendras sur le fiche, il faudra effacer et réecrire pour la raison que j'ai indiqué.Je comprends pas pourquoi tu effaces alors qu rien n'est enregistré.
Il manquait par contre effectivement le WHERE dans ma requete DELETE.
Rebonjour,
Me revoilà donc avec ces satanés pictos :
Tu m'as dit qu'il manquait un WHERE, que j'ai rajouté
mais ça fonctionne pas !
Code : Sélectionner tout - Visualiser dans une fenêtre à part $sql = "DELETE FROM liaison id_etab WHERE=" . $id_etab;
On reste concentré :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $sql = "DELETE FROM liaison WHERE id_etab =" . $id_etab;
Je vais me concentrer !!
Donc j'ai corrigé le code comme ceci :
Mais j'ai tjs cette erreur qui s'affiche...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $sql = "DELETE FROM liaison id_etab WHERE id_etab =" . $id_etab;
Code : Sélectionner tout - Visualiser dans une fenêtre à part Notice: Undefined variable: id_etab in D:\Romuald\Travail\wamp\www\test_picto\recup_donnee.php on line 11
Tu n'as pas du donner de valeur à $id_etab
Juste une question certainement stupide, où tu mets la valeur $id_etab dans le code ?
N'importe ou avant d'en avoir besoin![]()
Dans le formulaire o u dans mon doc oùj j récupère ls données ?
En cherchant des tutaux, jai trouvé ça :
Bon ça affiche bien les pictos que j'ai cochés dans mon formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $picto = (isset($_POST['picto']))?$_POST['picto']:null; echo "Pictos cochés :<br>"; if (!empty($picto)) { foreach($picto as $cle => $valeur) { echo $cle.' : '.$valeur.'<br>'; } }
Maintenant il faut l'enregistrer dans la BDD
Sinon je continue à chercher :
Toujours la même ligne qui me pose problème !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 <?php // On commence par récupérer les champs if(isset($_POST['nom_etab'])) $etab=$_POST['nom_etab']; else $etab=""; if(isset($_POST['texte_etab'])) $texte=$_POST['texte_etab']; else $texte=""; // On efface tout $sql = "DELETE FROM liaison id_etab WHERE id_etab =" . $id_etab; // on ré-ecrit if (isset($_POST['picto'])) { foreach ($_POST['picto'] as $id_picto) { $sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, intval($id_picto))"; } } // Aucun champ n'est vide, on peut enregistrer dans la table $db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error()); // sélection de la base mysql_select_db('test_picto',$db) or die('Erreur de selection '.mysql_error()); // on écrit la requête sql $sql = "INSERT INTO etab(id_etab,etab,texte) VALUES('".mysql_real_escape_string('')."','".mysql_real_escape_string($etab)."','".mysql_real_escape_string($texte)."')"; // on insère les informations du formulaire dans la table mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); // On récupère l'id_etab qui vient d'être généré $id_etab = mysql_insert_id(); // Ci-dessous on insère les infos dans liaison $sql = "INSERT INTO liaison(id_liaison, id_etab, id_picto) VALUES('','$id_etab','$id_picto')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); // On insère les informations du formulaire dans la table mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); // On affiche le résultat pour le visiteur echo "<br />"; echo 'Votre Etablissement a été enregistré avec succés !'; echo "<br />"; mysql_close(); // on ferme la connexion ?>
Voilà l'erreur ue j'ai etje galère depuisde jours dessus :
Notice: Undefined variable: id_etab in D:\Romuald\Travail\wamp\www\test_picto\recup_donnee.php on line 16
Tu n'as toujours pas donné de valeur à $id_etab
Est-ce que je peux remplace mon "nom_etab" par "id_etab" ?
Le champ "nom" ne devrait pas être l'id de ta table : que se passerait-il si deux etablissements avaient le meme nom ?
Partager