problème nom de table avec create table

loozman
Invité n'ayant pas de compte PHPfrance

09 janv. 2006, 16:54

Bonjour.

Je commence juste à étudier sql et je rencontre un problème.

En effet, je cherche a créer automatiquement une table nommée Titre avec le code suivant:
$titre='Titre';

$requete = "
create table $titre (
dessin_id smallint unsigned auto_increment,
dessin_date date not null,
dessin_auteur text not null,
dessin_commentaires text not null,
primary key (dessin_id))";
$ok=mysql_query($requete);

if ($ok){
	$etat.="<p>La table <b>$titre</b> a été créée avec succès.</p>";
	$requete = "
	insert into $titre (dessin_id, dessin_date, dessin_auteur, dessin_commentaires)  
	values ('',NOW(),'$auteur','$mes')";
	$ok=mysql_query($requete);
		if ($ok){$etat.="<p>La table <b>$titre</b> a été éditée avec succès.</p>";} 
		else {$etat.="<p><font color='red'>La table <b>$titre</b> n'a pu être éditée.</font></p>";}
	}
else {$etat.="<p><font color='red'>Impossible de créer la table <b>$titre</b>.<br> Une table portant ce nom existe déjà.</font></p>";}

return $etat;
Ce code fonctionne très bien dans le cas où $titre est une chaine sans espace, tirets, guillemets, apostrophes...

Ma question est donc de savoir comment faire pour créer des table dont le nom contient ces caractères.


En espérant avoir été assez clair dans ma description.


Merci pour vos réponses.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 janv. 2006, 17:38

Je te déconseille trsè fortement d'insérer des caractères spéciaux dans le nom d'une base de données, table ou autre champs

Tu risque de rencontrer des problèmes lors des requetes SQL. La preuve par l'exemple est le problème que tu nous expose ici ;)

Il faut toujours formater tes noms
l'exemple => l_exemple ou lexemple


En ce qui concerne les espaces, il faut que tu encadres tes nom par le quote inversé `(Alt Gr + 7)

Code : Tout sélectionner

CREATE TABLE `nom table` ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 649 Messages

09 janv. 2006, 22:13

[quote=zeus]Je te déconseille trsè fortement d'insérer des caractères spéciaux dans le nom d'une base de données, table ou autre champs [/quote]
Moi de même. D'ailleurs, je fais toujours de petits efforts pour donner des noms clair et significatifs, il y a toujours moyen. Par exemple, au lieu d'utiliser les tirets, j'utilise _, ce qui ne pose aucun problème.

Des guillemets dans un nom de table? Nan, tu vas avoir encore plus de problèmes.

Et si tu te mets à utiliser des caractères accentués, on sait jamais comment ça peut être interprété.

Un truc je peux donner que plusieurs ont: écrit le noms de tes tables en les regroupant dans une catégorie, de cette manière par exemple, voici un exemple tirée de ma base:
  • forums_categories
  • forums_forums
  • forums_messages
  • site_membre
  • site_connectes
Bon, désolé d'étaler tous mes trucs, je vous embête pas plus longtemps
Bon :oops:
Image

loozman
Invité n'ayant pas de compte PHPfrance

10 janv. 2006, 13:02

Ok merci pour ces informations.

A défaut de résoudre mon problème, ça me permet de comprendre pourquoi ça ne marchait pas.
Sur ces indications, il faut que je pense différemment mes appels à la BDD.

Merci pour votre aide.