{MySQL} créer une table à partir script PHP

Résolu/Fermé
benyaamin Messages postés 48 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 26 août 2009 - 24 août 2009 à 17:09
momo-ben2A Messages postés 105 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 19 décembre 2010 - 25 août 2009 à 19:40
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
A voir également:

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
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
(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 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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
benyaamin Messages postés 48 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 26 août 2009 65
24 août 2009 à 18:34
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
0
benyaamin Messages postés 48 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 26 août 2009 65
24 août 2009 à 19:33
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
0
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
0
benyaamin Messages postés 48 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 26 août 2009 65
25 août 2009 à 11:43
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
0
benyaamin Messages postés 48 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 26 août 2009 65
25 août 2009 à 16:09
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 !
0
benyaamin Messages postés 48 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 26 août 2009 65
25 août 2009 à 16:51
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 !
0
momo-ben2A Messages postés 105 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 19 décembre 2010 9
25 août 2009 à 19:38
<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
0
momo-ben2A Messages postés 105 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 19 décembre 2010 9
25 août 2009 à 19:40
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é)
0