IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

problème de syntaxe ?


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    496
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 496
    Points : 123
    Points
    123
    Par défaut problème de syntaxe ?
    Bonjour à tous

    j'en ai marre de tourner en rond! j'ai des difficultés avec la syntaxe !

    j'ai créé une fonction de connexion à ma base de donnée pour pouvoir réutiliser fréquemment:

    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
    <?php
    	$serveur = "localhost"; /* L'adresse du serveur */
    	$login = "root"; /* Votre nom d'utilisateur */
    	$password = ""; /* Votre mot de passe */
    	$Base =""; //votre base de donnée
     
    	function connexionBase($Base)
    	{
    		echo '<br />'.'function connexion à la base de donnée :'.$Base;
    		global $serveur, $login, $password,$Base ; 
     
     		try{
    			$connexion=new PDO("mysql:host=$serveur;dbname=$Base",$login,$password);
    			//l'extension PDO possède les outils pour gérer les exceptions.
    			//ici, on fixe le mode d'erreur de PDO sur "exception"
    			$connexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    		}
    		//si le bloc try rencontre une exception, le script s'arrête et on passe
    		//diretement dans le bloc catch, qui va afficher un message d'erreur avec des informations sur l'exception
    		catch(PDOException $e){
    			//echo 'Echec de la connexion:'.$e->getMessage();//
    			//Notez que j’ai cette fois ci utilisé la fonction die en cas d’erreur. 
    			//C’est une autre façon de faire, qui fait aussi bien le travail même si ce n’est pas strictement nécessaire ici.
    			die('Echec: ' .$e->getMessage());
    		}	
    		echo '<br />'.'Connexion au serveur :'.$serveur;
     
    	}
    ?>
    je pense que pour utiliser cette fonction je dois dans les autres fichier faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    include("/BaseDonnee/ConnexionBase.php");
     $nameTable='nouvelTable';
    $Base="test";
    $connexion=connexionBase($Base);
    ....
    c'est après que ça ce gâte (peut être déjà avant ?) lorsque je veux créer ma table :

    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
    <?php
    include("/BaseDonnee/ConnexionBase.php");
    $nameTable='nouvelTable';
    $Base="test";
    $connexion=connexionBase($Base);
    echo '<br/> retour de la connexion';
    function CreateTable($nameTable){
    	global $nameTable;
    	 echo '<br> Création de la table :'.$nameTable.'<br/>';
     
    	 // on vérifie que la connexion est bonne
    	if($connexion){
    		// on créer la requête  
    //c'est ici je ne sais plus ou mettre les guillemets les apostrophes ou mes variables j'ai tout essayé dans tous les sens, pris beaucoup d'exemple  rien  y fait j'ai toujours des erreurs de syntaxe
    	$requete=('CREATE TABLE' test."nouvo" (
    			"id" INT NOT NULL AUTO_INCREMENT , 
    			"nom" VARCHAR NOT NULL ,
    			"prenom" VARCHAR NOT NULL ,
    			"age" INT NOT NULL ,
    			PRIMARY KEY (`id`)) ENGINE = InnoDB);
     
     
    		// on prépare et on exécute la requête
    		$connexion->prepare($requete)->execute();
    	}
    }
    createTable($nameTable);
    ?>
    Si vous pouviez m'aider

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    à quoi doit ressembler la requête envoyée ?
    est ce que c'est cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'CREATE TABLE' test."nouvo" ("id" INT NOT NULL AUTO_INCREMENT);
    dans ce cas, s'il la chaine PHP est entouré d'apostrophes, il faut échapper les apostrophes et réciproquement si la chaine est entourée de guillemets
    donc cela donne une des 2 écritures suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "'CREATE TABLE' test.\"nouvo\" (\"id\" INT NOT NULL AUTO_INCREMENT);";
    $sql = '\'CREATE TABLE\' test."nouvo" ("id" INT NOT NULL AUTO_INCREMENT);';

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    496
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 496
    Points : 123
    Points
    123
    Par défaut
    le problème c'est que je ne sais pas comment la requete s'écrit ou il faut mettre guillemet
    Je ne sais pas s'il faut écrire CREATE TABLE entre guillemet ou pas ??

    De plus ma fonction de connexion ne fonctionne pas j'ai toujours un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function exec() on null in C:\xampp\htdocs\testPHP\Bridgez\BaseDonnee\installationbis.php on line 25

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu n'as pas fait de return dans ta fonction de connexion
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ à moins de travailler avec plusieurs bases de données, autant mettre TOUS les paramètres DANS la fonction :
    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
    <?php
     
    	function connexionBase()
    	{
    		$serveur = "localhost"; /* L'adresse du serveur */
    		$login = "root"; /* Votre nom d'utilisateur */
    		$password = "......."; /* Votre mot de passe */
    		$Base ="test"; //votre base de donnée
     
     		try{
    			$connexion = new PDO("mysql:host=$serveur;dbname=$Base",$login,$password);
    			//ici, on fixe le mode d'erreur de PDO sur "exception"
    			$connexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
     
    			return $connexion;
    		}
    		catch(PDOException $e){
    			die('Echec: ' .$e->getMessage());
     
    			return false;
    		}	
     	}
     
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    include("/BaseDonnee/ConnexionBase.php");
    $connexion = connexionBase();
    ....
    2/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nameTable='nouvelTable';
    ...
    function CreateTable($nameTable){
    	global $nameTable;
    ...
    Il faudrait savoir : soit tu passes $nameTable en paramètre de la fonction, soit en variable global (quel intérêt ?), mais pas les deux...

    PAR CONTRE, tu peux/dois passer $connexion en global :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function CreateTable($nameTable){
    	global $connexion;
    ...
    Bref : l'informatique supporte mal l'"à-peu-près"...

    3/ Quant à la requête :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	$requete = 'CREATE TABLE `' . $nameTable . '` (
    			`id` INT NOT NULL AUTO_INCREMENT , 
    			`nom` VARCHAR NOT NULL ,
    			`prenom` VARCHAR NOT NULL ,
    			`age` INT NOT NULL ,
    			PRIMARY KEY (`id`)) ENGINE = InnoDB';
    Dernière modification par Invité ; 15/04/2017 à 16h58.

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    496
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 496
    Points : 123
    Points
    123
    Par défaut
    Bonsoir

    merci pour vos réponses.

    c'est vrai que j'ai de grosses lacunes.

    j'ai pigé les variables globales et le return que j'avais oublié.

    reste la manière d'écrire les requête.

    je ne vois pas bien le signe après CREATE TABLE c'est un tilde ~ ???

    j'ai vu qu'il fallait utiliser les apostrophes ' pour écrire en PHP mais pour les requètes qu'il était plus simple d'écrire avec de guillemets " car les variables entre guillemets sont reconnus comme des variables .

    donc le code que tu m'as transmis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $requete = 'CREATE TABLE `' . $nameTable . '` (
    			`id` INT NOT NULL AUTO_INCREMENT , 
    			`nom` VARCHAR NOT NULL ,
    			`prenom` VARCHAR NOT NULL ,
    			`age` INT NOT NULL ,
    			PRIMARY KEY (`id`)) ENGINE = InnoDB';
    donne ceci (après bien des tâtonnement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // on crée la requête 
     		$requete="CREATE TABLE $nameTable(
    			id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    			prenom VARCHAR(50) NOT NULL,
    			nom VARCHAR(50) NOT NULL,
    			pseudo VARCHAR(50) NOT NULL
    			)";
    		// on prépare et on exécute la requête
    		$connexion->prepare($requete)->execute();
    mais j'ai essayé de mettre sous la même forme la requête suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		$connexion->exec('INSERT INTO players(nom,prenom,pseudo,motDePasse,email,ville,pays,langue) 
    					VALUES("'.$_POST['Nom'].'","'.$_POST['prenom'].'","'.$_POST['Pseudo'].'",".$messageChiffre.",
    					"'.$_POST['email'].'","'.$_POST['Ville'].'","'.$_POST['Pays'].'","'.$_POST['Langue'].'")');
    impossible d'y arriver je ne comprends pas cette suite de ' ou " ?
    une requête est une chaîne de caractère un string ???
    lorsqu'on a une variable $var il suffit de faire une concaténation avec le point .


    Si vous pouvez encore m'aider merci d'avance

Discussions similaires

  1. Problème de syntaxe - elements['x'].value
    Par Equus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/02/2005, 11h22
  2. [Interbase] Problème de syntaxe SQL
    Par navis84 dans le forum InterBase
    Réponses: 4
    Dernier message: 22/12/2004, 17h07
  3. Problème de syntaxe
    Par Mister_FX dans le forum ASP
    Réponses: 5
    Dernier message: 30/06/2004, 10h01
  4. Problème de syntaxe ADO ...
    Par bendev dans le forum ASP
    Réponses: 2
    Dernier message: 15/04/2004, 14h38
  5. Réponses: 2
    Dernier message: 08/03/2004, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo