Create table plusieurs d'un coup

olimart23
Invité n'ayant pas de compte PHPfrance

14 déc. 2010, 01:47

Allo, 1er post mais pas le dernier je pense.

J'essaie de créer 2 tables. Tous les exemples montrent la création d'une seule table. La 1ère table se créée bien mais la 2ème ne se créée pas du tout. Pas d'erreur de syntaxe (enfin pas au rendu).
// Create table
mysql_select_db($databasename, $connect);
$tablecreation = "CREATE TABLE users
(
ID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(ID),
Name varchar(30),
Username varchar(20),
Password varchar(32),
UserType varchar(35),
modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";

"CREATE TABLE settings
(
ID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(ID),
Name varchar(30),
Username varchar(20),
Password varchar(32),
UserType varchar(35),
modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";

if (mysql_query($tablecreation,$connect)) {
  echo '<p class="success">' ."Table created". '</p>';

ViPHP
ViPHP | 5462 Messages

14 déc. 2010, 02:03

ta variable n'est pas bonne fais un

echo $tablecreation; et tu comprendras :wink:

Eléphanteau du PHP | 16 Messages

15 déc. 2010, 07:30

Merci pour ta réponse malheureusement mon niveau étant plus que débutant je ne saisis pas la subtilité. Si je mets echo $tablecreation alors seule la 1ère table apparaît mais aucune idéé comment inclure la 2ème.

Je ne sais même pas si c'est comme ça qu'il faut s'y prendre, si c'est ce qui est recommandé, si je dois fermer les guillemets après le 1er create table et les rouvrir ensuite ou si une seule paire de guillemets suffisent...

Enfin question subsidiaire, comment stocker dans un fichier à part les instructions pour crééer la BDD et éviter de surcharger mon fichier. Idéalement je lance l'instruction ici qui exécute la création des tables à partir d'un autre fichier et renvoie le message erreur/confirmation sur la page vue. Qu'est-ce qui est préconisé?

Merci par avance.
ta variable n'est pas bonne fais un

echo $tablecreation; et tu comprendras :wink:

ViPHP
ViPHP | 5462 Messages

15 déc. 2010, 11:14

normale regarde bien ta chaine tes quotes ne sont pas bon

Eléphanteau du PHP | 16 Messages

15 déc. 2010, 18:06

Je veux bien mais je n'ai aucune idée de comment elles devraient être mises.
Quelle est la syntaxe à respecter?
normale regarde bien ta chaine tes quotes ne sont pas bon

ViPHP
ViPHP | 5462 Messages

15 déc. 2010, 18:09

Je veux bien mais je n'ai aucune idée de comment elles devraient être mises.
Quelle est la syntaxe à respecter?
normale regarde bien ta chaine tes quotes ne sont pas bon
relis bien ton code tu vois bien que tu fermes ta chaine avec ";

Eléphanteau du PHP | 16 Messages

15 déc. 2010, 18:37

Voici l'erreur Error creating table: 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 'CREATE TABLE settings ( ID int NOT NULL AUTO_INCREMENT, PRIMARY KEY(ID), Name v' at line 14

Mon code révisé (sachant que je ne sais toujours pas si je dois mettre un seul "; )
// Create table
$tablecreation = "CREATE TABLE users
(
ID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(ID),
Name varchar(30),
Username varchar(20) UNIQUE,
Password varchar(32),
UserType int,
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (UserType) REFERENCES Settings(ID)
) CHARACTER SET utf8


CREATE TABLE settings
(
ID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(ID),
Name varchar(30),
Username1 varchar(20) UNIQUE,
Password varchar(32),
UserType int(2),
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (UserType) REFERENCES Settings(ID)
) CHARACTER SET utf8";

if (mysql_query($tablecreation,$connect)) {
  echo '<p class="success">' ."Table created". '</p>';
Je veux bien mais je n'ai aucune idée de comment elles devraient être mises.
Quelle est la syntaxe à respecter?
normale regarde bien ta chaine tes quotes ne sont pas bon
relis bien ton code tu vois bien que tu fermes ta chaine avec ";

ViPHP
ViPHP | 5462 Messages

15 déc. 2010, 18:54

faut garder ton ; par contre :wink:

Eléphanteau du PHP | 16 Messages

15 déc. 2010, 19:00

On va ya arrriver mais pas encore cette fois-ci.
Si je mets le code ci-dessous alors j'ai une erreur de syntaxe et la page ne peut même pas être charrgée.
// Create table
$tablecreation = "CREATE TABLE users
(
ID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(ID),
Name varchar(30),
Username varchar(20) UNIQUE,
Password varchar(32),
UserType int,
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (UserType) REFERENCES Settings(ID)
) CHARACTER SET utf8;


CREATE TABLE settings
(
ID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(ID),
Name varchar(30),
Username1 varchar(20) UNIQUE,
Password varchar(32),
UserType int(2),
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
) CHARACTER SET utf8;"
faut garder ton ; par contre :wink:

ViPHP
ViPHP | 5462 Messages

15 déc. 2010, 20:07

oui t'as pas mis le ; a la fin de ta chaine, y'en a dans le SQL mais aussi dans le PHP, c'est que des erreurs d'inattention

Eléphanteau du PHP | 16 Messages

15 déc. 2010, 20:32

Merci. Je comprends mieux. Par contre ça ne fonctionne toujours pas. Ça marche avec 1 table mais avec 2 non (je promets que je ne le fais pas exprès)

L'erreur dit
Error creating table: 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 'CREATE TABLE settings ( ID int NOT NULL AUTO_INCREMENT, PRIMARY KEY(ID), Name' at line 14

Est-ce le champ Name qui pose problème? Si ou pourquoi ça fonctionne avec la première table?

Le code.
// Create table
//mysql_select_db($databasename, $connect);
$tablecreation = "CREATE TABLE users
(
ID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(ID),
Name varchar(30),
Username varchar(20) UNIQUE,
Password varchar(32),
UserType int,
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (UserType) REFERENCES Settings(ID)
) CHARACTER SET utf8;

CREATE TABLE settings
(
ID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(ID),
Name varchar(30),
Username1 varchar(20) UNIQUE,
Password varchar(32),
UserType int,
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
) CHARACTER SET utf8;"  ;

if (mysql_query($tablecreation,$connect)) {
  echo '<p class="success">Table created</p>';
oui t'as pas mis le ; a la fin de ta chaine, y'en a dans le SQL mais aussi dans le PHP, c'est que des erreurs d'inattention

ViPHP
ViPHP | 5462 Messages

15 déc. 2010, 20:39

je pense que ca doit venir de ta virgule après AUTO_INCREMENT, PRIMARY KEY(ID) va avec ton champs

Eléphanteau du PHP | 16 Messages

15 déc. 2010, 20:49

J'ai légèrement réarrangé les choses pour éviter le problème de virgule mais pas mieux
$tablecreation = "CREATE TABLE users
(
ID int NOT NULL AUTO_INCREMENT,
Name varchar(30),
Username varchar(20) UNIQUE,
Password varchar(32),
UserType int,
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(ID)
) CHARACTER SET utf8;

CREATE TABLE settings
(
ID int NOT NULL AUTO_INCREMENT,
Name varchar(30),
Username1 varchar(20) UNIQUE,
Password varchar(32),
UserType int,
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(ID)
) CHARACTER SET utf8;" ;


if (mysql_query($tablecreation,$connect)) {
  echo '<p class="success">Table created</p>';
je pense que ca doit venir de ta virgule après AUTO_INCREMENT, PRIMARY KEY(ID) va avec ton champs

ViPHP
ViPHP | 5462 Messages

15 déc. 2010, 20:53

mais non c'est comme :
ID int NOT NULL AUTO_INCREMENT PRIMARY KEY(ID),
pourquoi avoir mis les PRIMARY KEY a la fin ? tu connais pas le SQL ?

Eléphanteau du PHP | 16 Messages

15 déc. 2010, 21:03

Non je ne connais pas le SQL. Wordpress met la clé primaire à la fin donc je ne voyais pas le problème. Et ça ne fonctionne pas. J'ai viré la clé primaire temporairement mais ce n'Est pas ça encore.
$tablecreation = "CREATE TABLE users
(
ID int NOT NULL auto_increment,
Name varchar(30),
Username varchar(20) UNIQUE,
Password varchar(32),
UserType int,
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
) CHARACTER SET utf8;

CREATE TABLE settings
(
ID int NOT NULL auto_increment,
Name varchar(30),
Username1 varchar(20) UNIQUE,
Password varchar(32),
UserType int,
Modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) CHARACTER SET utf8;" ;


mais non c'est comme :
ID int NOT NULL AUTO_INCREMENT PRIMARY KEY(ID),
pourquoi avoir mis les PRIMARY KEY a la fin ? tu connais pas le SQL ?