{MySQL} créer une table à partir script PHP [Résolu/Fermé]

Signaler
Messages postés
48
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 août 2009
-
Messages postés
105
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
19 décembre 2010
-
Bonjour,

Je débute dans la création de site web, je suis des tutoriaux sur le web mais j'ai encore des soucis dont je n'ai pas trouvé de solutions, je me retrouve bloqué et je pense que la solution est toute bête...
Voici ce que je voudrais faire :

Je crée un livre d'or avec formulaire pour un site sur la peinture.
J'ai déjà réussi à faire une table 3 entrées (id,pseudo,message) en PHP et mysql avec WAMP/PHPmyadmin
J'aimerais faire un petit sondage sur les peintures préférées des gens parmi celles exposées sur le site.

Dans mon script html, j'ai donc réalisé une liste déroulante qui ressemble à ceci :

Quelle est votre peinture préférée ?
<select name="choix">
<option value="choix1">choisir sa peinture préférée</option> // valeur par défaut
<option value="choix2">Blue Guitar</option>
<option value="choix3">Big Bill</option>
etc....

Le but est de connaître les préférences des visiteurs parmi une vingtaine de choix possibles mais aussi de pouvoir faire un top 3 et l'afficher sur la page.

Mon problème : je ne sais pas comment créer la table mysql pour ceci, je ne sais pas quel type de champ utiliser pour ces "choix". En consultant de la documentation, j'ai essayé d'ajouter un champ "set" à ma table mais j'ai ce message d'erreur qui s'affiche :

requête SQL:

ALTER TABLE `guestbook` ADD `choix_peinture` SET NOT NULL

MySQL a répondu:Documentation
#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 'NOT NULL' at line 1

Quelqu'un saurait-il m'aider ?

En vous remerciant de m'avoir lu,

Benyaamin

12 réponses

Bonjour

Il faut bien préciser quels sont les éléments de l'ensemble! (SET = ensemble)
D'après la doc (pas testé)
ALTER TABLE `guestbook` ADD `choix_peinture` SET('element11','element2','element3') NOT NULL
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57070 internautes nous ont dit merci ce mois-ci

je n'ai pas vraiment compris (lacunes en vocabulaire technique...) ce que tu veux dire par ensemble. Ce n'est pas une question de vocabulaire technique, c'est une question d'anglais. SET signifie ENSEMBLE (au sens théorie des ensembles). Le type SET représente un ensemble de valeurs (par opposition au type enum (énuméré) qui représente une seule valeur parmi une liste). Si chaque visiteur a droit à une seule valeur préférée, le type enum est préférable; s'il peut en sélectionner plusieurs, il faut choisir un type SET.

Pour ce qui est de la manière d'ajouter un champ à ta table, je ne vois pas ce qui t'oblige à le faire par programme. Pourquoi ne pas le faire à partir de phpmyadmin (ou de tout autre gestionnaire de bdd dont tu disposes) ?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57070 internautes nous ont dit merci ce mois-ci

(un faux ami surement) Tu as donc des problèmes avec le français aussi... Un faux-ami ça n'est pas du tout ça. ce serait un faux ami s'il y avait un mot français qui s'écrivait aussi SET (ou y ressemblait beaucoup) et que tu avias confondu avec ce mot.

ALTER TABLE `guestbook` ADD `choix_peinture` ENUM NOT NULL Même problème qu'avec ta requête avec le SET. Un enum peut perndre une valeur parmi plusieurs, il faut bien que tu précises quelles sont ces valeurs possibles, or elles n'apparaissent pas dans la requête. Comment veux-tu que mysql devine les valeurs possibles d'enum ?
Quand tu crées le champ, il faut que dans la case 'valeurs' tu mettes les valeurs possibles , entre apostrophes et séparées par une virgule
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57070 internautes nous ont dit merci ce mois-ci

Merci de prendre avec humour mon côté père fouettard (car je dois bien reconnaître que j'en ai un). Mais comme je ne suis pas à une mauvaise foi près, je dirai que c'est parce que j'aime bien les gens et que qui aime bien châtie bien.
Pour ce qui est des valeurs à retenir pour l'enum, en théorie peu importe. Mais ça va être plus pratique de prendre les champs "value" du select, car ce sont ces valeurs-là que tu vas relire dans la variable $_POST et elles seront directement exploitables pour une requête mysql.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57070 internautes nous ont dit merci ce mois-ci

Messages postés
48
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 août 2009
64
Merci pour ta réponse rapide,

Malheureusement, je n'ai pas vraiment compris (lacunes en vocabulaire technique...) ce que tu veux dire par ensemble et comment les préciser ? Je ne veux pas uniquement les lister mais connaître la fréquence avec laquelle on les choisit.

Veux-tu dire qu'il faut que je fasse une table de ce type d'abord ?

ID(type INT) NOM DU TABLEAU (type SET)

0 valeur 0 défaut
1 nom du tableau 1
2 nom du tableau 2
3 nom du tableau 3
etc.. etc...

Ensuite intégrer cet ensemble dans mon autre table ?

Merci pour tes conseils
Messages postés
48
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 août 2009
64
En fait, pour préciser, la base de mon script est pris sur le site du zero :

http://www.siteduzero.com/tutoriel-3-14547-tp-un-livre-d-or.html

Dans le formulaire html, j'ai donc ajouté une liste déroulante

J'aimerais récupéré dans la base de données, les choix des peintures préférées des visiteurs avec le pseudo qui y est affilié.
Par exemple: Benyaamin laisse un message et fait un choix de sa peinture préférée.
J'aimerais donc pouvoir ajouté ce champ correspondant au choix dans la table qui sert au pseudo et au message ou bien de créer une nouvelle table qui ait au moins ces deux champs : pseudo et choix de peinture.
Mais je n'arrive pas à ajouter ce champ, je ne sais comment faire..

J'espère avoir été précis, j'ajouterai d'avantage d'informations si besoin
Super ! J'avance !

Je pensais que c'était SET pour "établir" (un faux ami surement)...

J'utilise phpmyadmin avec wamp
J'essaye d'introduire un nouveau champ appelé "choix_peinture", de type ENUM donc, je n'ose pas trop toucher la case defaut en mettant un null donc je laisse ainsi.Je ne touche à rien d'autre
Je sauvegarde le changement et la phpmyadmin me met :

requête SQL:

ALTER TABLE `guestbook` ADD `choix_peinture` ENUM NOT NULL

MySQL a répondu:Documentation
#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 'NOT NULL' at line 1


C'est la réponse que me donne php my admin, j'ai vidé la table préalablement au cas où, il n'y a rien d'utile dedans pour l'instant.

J'ai donc toujours un problème donc, même si je sais maintenant quel type de champ utiliser.
J'avance d'un shouya
Quel est le problème selon vous ?

Merci
Messages postés
48
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 août 2009
64
Hum, tu as entièrement raison, pour la similitude des mots que sous-entend le terme : faux-ami. Je voulais utiliser l'aspect trompeur du faux-ami qui n'est pas, il est vrai, son sens premier.
Ceci étant dit, le terme SET signifiant "ensemble" dans son sens littéral n'est pas franchement le plus évident (surtout quand on pratique l'anglais sans parler de théories des ensembles..) et j'ai pourtant un excellent niveau dans la langue (vérifié au TOIEC, niveau or).
Bref, là n'est pas la question (lepère est un peu fouettard ;-) et moi légèrement susceptible) et je ne peux que te remercier pour ton aide.


Revenons à nos moutons : J'ai appliqué ce que tu m'as conseillé (de façon rudimentaire pour l'instant), et le champ ENUM fonctionne, plus du tout de messages d'erreurs

"Quand tu crées le champ, il faut que dans la case 'valeurs' tu mettes les valeurs possibles , entre apostrophes et séparées par une virgule"

Quelle est le nom des valeurs possible selon le code HTML ci-dessous ?

-------------------------------------------------------------------------------
Quelle est votre peinture préférée ?
<select name="choix">
<option value="choix1"></option>
<option value="choix2">Blue Guitar</option>
<option value="choix3">Big Bill</option>
<option value="choix4">Blind Willie McTell</option>
etc...
--------------------------------------------------------------------------------

les valeurs sont : 'choix1', 'choix2', 'choix3', 'choix4', etc... ?
ou ce sont : '','blue guitar','big bill','blind willie mctell', etc... ?

car avec la requête PHP de mon script (qui peut encore contenir des erreurs, mais là n'est pas l'objet de cette discussion) qui prend les infos depuis le formulaire, il me renvoie :

- "choix+numéro" comme valeur si je fais la première solution
- rien du tout si je mets le nom de tableau comme valeur


Merci encore
Messages postés
48
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 août 2009
64
Notre père qui es (sûrement) au travail,
Que ton nom soit sanctifié,
Donne-nous aujourd'hui ton conseil quotidien,
Pardonne-nous nos offenses,
Comme nous aussi nous pardonnons à ceux qui nous ont offensés,
Mais délivre-moi du problème qui est le mien !
Messages postés
48
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 août 2009
64
Et bien merci lepère,

Pour répondre aux problèmes des gens sur les forums, il faut les aimer en quelque sorte, il faut aussi savoir respecter le caractère de chacun et faire avec. Je ne suis pas non plus exempt de certains travers.
Si j'ai été piqué dans ma fierté, j'ai aussi pris plaisir à concevoir la réponse en forme de prière.
Je mets "résolu" puisque mon problème "mysql" va fonctionner à présent.
Il ne me reste plus qu'à travailler sur le script PHP et je devrais pouvoir m'en sortir par moi-même ce coup-ci.

Bref, merci pour le coup de pouce !
Messages postés
105
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
19 décembre 2010
7
<option value="choix1">choisir sa peinture préférée</option> == tu peux cliquer dessus or je pense que tu voulais en faire un titre dans ta liste deroulante, dans ce cas, il serait preferable de faire <optgroup label="un_nom">choisir sa peinture préférée</optgroup> et ce sera a partir de la qu'une variable php sera creer ($_POST['le nom du label']) et tu pourras ainsi traiter les données des internautes
Messages postés
105
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
19 décembre 2010
7
dsl je me suis tromper c'est avec sa que tu traites les données $_POST['choix'] (j'avais pas vu les select désolé)