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 :

table recherchée dans une mauvaise bdd [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut table recherchée dans une mauvaise bdd
    Bonsoir,

    je fais une requête du genre
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $qid = $bdd_planning->prepare($query);
    $qid->execute();
    qui me donne ce message d'erreur
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 La table 'su_dev_eis.date' n'existe pas' in C:\wamp\www\devjupiter_serveur291214\eis\page\planning.htm on line 17
    donc il va chercher la table "date" dans la bdd "su_dev_eis" alors qu'elle est dans "planning_dev". Je ne vois pas ce qui ne va pas ; voici la conception :
    le fichier index.php inclut à la fois le fichier de connexion et le fichier planning.htm :

    index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    global $bdd_planning;
    ...
    include (dirname(__DIR__)."\\eis\connect_mysql_planning.php");
    ...
    $page =(isset($_GET['page'])) ? $_GET['page']:"";
    ...
    $args = explode("--",$page,10);
    $nompage=$args[0];
    ...
    include dirname(__DIR__)."\\eis\page\\".$nompage.".htm";
    ...
    ?>

    où connect_mysql_planning.php :

    Code php : 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
    <?php
    header('Content-type: text/html; charset=UTF-8');
    global $bdd_planning;
    //// connexion
     
    include_once (dirname(__DIR__).'\\eis\new\MyPdo_planning.php');
     
     
    try{
    				$bdd_planning = new MyPdo_planning();
       }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}
     
     
    ?>
    avec MyPdo_planning.php :
    Code php : 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
    30
    31
    32
    <?php
    error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
    ini_set('display_errors','1'); 
    // MyPDO
     // ls : la classe MyPdo hérite de la classe PDO (extends)
    class MyPdo_planning extends PDO {
     
    	static public $DB_NAME = "planning_dev"; // ls : static public, je sais + pourquoi...
     
    	static public $HOST = "localhost";
     
    	static public $USER ="root";
     
    	static public $PASS ="root";
     
    // ls : le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct() {
    	/* ls : la variable $pdo_options, ça date de ma formation de 2012 */ 
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
     
    	/* ls : connexion PDO : on instancie la classe, qui dérive de la classe PDO (fournie par PHP5) (les paramètres pour wampserver sont host="localhost",
    	user="root" et pwd="") */
    	parent::__construct('mysql:host=' . MyPdo::$HOST . ';dbname=' . MyPdo::$DB_NAME, MyPdo::$USER,MyPdo::$PASS, $pdo_options);
    //MyPdo::$USER
    	}
     
    }
    // fin MyPDO
    ?>

    et le fichier planning.htm qui contient la requête :
    Code php : 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
     
    <?php
    include_once dirname(dirname(__DIR__))."\\eis\connect_mysql_planning.php";
    function calendrier($m_donne,$a_donne,$nom,$prenom){
    		global $bdd_planning;
    ...
                    $query = "SELECT * from date order by date";
                    $qid = $bdd_planning->prepare($query);
    		$qid->execute();
    ...
                    $bdd_planning==NULL; 
     
    }
     
     
     
     
    calendrier(date("n"),date("Y"),$nom,$prenom);
    ?>

    sachant que le fichier planning.htm est affiché à partir de ce lien : <a href="<?php echo SITE_URL_HTTP; ?>/index.php?page=planning&...et que le constante SITE_URL_HTTP est définie dans un fichier de config :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    // -----------------------------------------------------------
    // CONFIGURATION : 
    // -----------------------------------------------------------
    if(!defined('SITE_URL_WWW'))	define('SITE_URL_WWW',	'localhost/devjupiter_serveur291214/eis');  // en TEST LOCAL, A REMPLACER PAR...
    //if(!defined('SITE_URL_WWW'))	define('SITE_URL_WWW',	'www.mon-site-en-ligne.com'); // en PRODUCTION
    if(!defined('SITE_URL_WWW_old'))	define('SITE_URL_WWW_old',	'localhost/devjupiter_serveur291214/eis/copie_du_serveur');
    if( !defined('SITE_URL_HTTP'))	define('SITE_URL_HTTP',	'http://'.SITE_URL_WWW);
    ?>
    quelqu'un peut-il m'éclairer ?

  2. #2
    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
    Par défaut
    Tu peux faire
    pour contrôler la base de données sélectionnée mais il est sur que ni PHP ni mysql n'ont inventé "su_dev_eis", c'est dans ta code quelque part.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Si je rajoute dans le code juste avant la requête les lignes :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		$query="SELECT DATABASE();";
    		$qid = $bdd_planning->prepare($query);
    		$qid->execute();
    		$data = $qid->fetchAll(PDO::FETCH_NUM); 
    		echo $data[0][0];
    ça affiche comme prévu su_dev_eis.
    Et cette table est bien présente dans l'autre fichier de connexion : connect_mysql.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    //session_start();
    include_once (dirname(__DIR__).'\\eis\new\MyPdo.php');
    global $bdd;
    header('Content-type: text/html; charset=UTF-8');
    //// connexion
    try{
    				$bdd = new MyPdo();
    				//$_SESSION['bdd']=$bdd; /* var. de session pour les fichiers non inclus */
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}		
    ?>
    avec MyPdo.php :
    Code php : 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
    <?php
    class MyPdo extends PDO {
     
    	static public $DB_NAME = "su_dev_eis"; 
    	static public $HOST = "localhost";	
    	static public $USER ="root";
    	static public $PASS ="root";
     
     
     
    // ls : le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct() {
    ...
    	parent::__construct('mysql:host=' . MyPdo::$HOST . ';dbname=' . MyPdo::$DB_NAME, MyPdo::$USER,MyPdo::$PASS, $pdo_options);
    //MyPdo::$USER
    	}
     
    }
    ?>
    et l'autre fichier de connexion est aussi inclus dans index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    global $bdd;
    global $bdd_planning;
     
    include (dirname(__DIR__).'\\eis\connect_mysql.php');
    include (dirname(__DIR__)."\\eis\connect_mysql_planning.php");
    ...
    mais ce que je ne comprends pas, c'est pourquoi la variable $bdd_planning va chercher dans cette bdd alors qu'elle est initialisée avec l'autre...

  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
    Par défaut
    Franchement avec des inclusions répétées partout, des global partout, du code dupliqué plutôt que d'utiliser des paramètres ... ça fait un beau sac de noeuf qu'il ne donne pas envie de démêler.
    D'ailleurs a quoi servent tout ces global ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Répondre m'a pris du temps...(j'y suis depuis ce matin)

    Bon, je vais essayer d'expliquer la conception (et si y a mieux à faire, ça m'intéresse), car comme il s'agit d'un site intranet professionnel, un jour, il faudra que je puisse transmettre et le document de conception est prévu mais pas encore fait (seulement quand j'aurais fini le relookage en cours), mais avant de me lancer, une question :
    du code dupliqué plutôt que d'utiliser des paramètres
    où as-tu vu ça, sachant que j'ai justement modifié la conception à un endroit où c'était le cas, pour remplacer de la duplication de code par des paramètres ?

    Conception (il y a une vingtaine d'années, quand j'étais développeur logiciel dans ma boîte, on appelait ça DCD (Document de Conception Détaillée)) :
    il y a de nombreux fichiers, mais même si l'utilisateur voit de nombreuses pages, il n'y en a qu'une, justement grâce à toutes ces inclusions. Donc index.php inclut les fichiers de connexion aux bdd, les fichiers de langue, le header, le menu, le pied de page et les pages proprement dites. Le gros intérêt est que toutes les variables créées dans index.php seront disponibles dans les fichiers inclus et inversement les variables créées dans les fichiers inclus seront disponibles dans index.php.

    Exemple pour le paramètre de langue (on a français/anglais) : il y a une variable $lang qui est modifiable via le menu. Cette variable est créée dans index.php :$lang =(isset($_GET['lang'])) ? $_GET['lang']:"";. Dans le menu, on a des liens du type <a href="<?php echo SITE_URL_HTTP;?>/index.php?page=nom_page&lang=<?php echo $lang;?>...". Dans index.php, on inclut entre autre le fichier de langue : include dirname(__DIR__)."\\eis\language.".$lang.".inc.php"; sachant qu'il y a 2 fichiers de langue language.fr.inc.php et language.en.inc.php et sachant que ces 2 fichiers contiennent l'instanciation d'un tableau :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $str[1]="Site de Gestion des Serveurs Techniques Solaris";
    $str[2]="Accueil";
    ...
    ou
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $str[1]="IT Solaris Servers Management Site";
    $str[2]="Home";
    ...
    et que dans les autres fichiers inclus, l'utilisation de ces fichiers de langue est faite par exemple comme <?php echo $str[1];?>

    gestion de la connexion aux bdd : je l'explique car justement, le problème est là. Il y a 2 bdd (su_dev_eis et planning_dev), donc 2 fichiers de connexion, tous les 2 inclus dans index.php (donc on se connecte une seule fois à ces 2 bdd).
    connect_MySQL.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    include_once (dirname(__DIR__).'\\eis\new\MyPdo.php');
    global $bdd;
    header('Content-type: text/html; charset=UTF-8');
    //// connexion
    try{
    				$bdd = new MyPdo();
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}		
    ?>
    sachant que l'autre (connect_mysql_planning.php) est du même type et que les paramètres de connexion sont dans MyPdo.php (ou MyPdo_planning.php)
    MyPdo.php :
    Code php : 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
    <?php
    error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
    ini_set('display_errors','1'); 
     
    class MyPdo extends PDO {
     
    	static public $DB_NAME = "su_dev_eis";
    	static public $HOST = "localhost";	
    	static public $USER ="root";
    	static public $PASS ="root";
     
     
    	function __construct() {
     
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
     
    	parent::__construct('mysql:host=' . MyPdo::$HOST . ';dbname=' . MyPdo::$DB_NAME, MyPdo::$USER,MyPdo::$PASS, $pdo_options);
    //MyPdo::$USER
    	}
     
    }
    // fin MyPDO
    ?>
    et l'inclusion dans index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    global $bdd;
    global $bdd_planning;
     
    include (dirname(__DIR__).'\\eis\connect_mysql.php');
    include (dirname(__DIR__)."\\eis\connect_mysql_planning.php");
    et la déclaration en global de ces 2 variables sert à ce qu'elles soient accessibles dans les fonctions des fichiers inclus (dans lesquelles la déclaration est répétée).

    Avec cette description, les choses sont elles plus claires et peux tu m'expliquer pourquoi dans la page planning.htm (dont le code est dans le post #1), la variable $bdd_planning va chercher dans la bdd su_dev_eis au lieu de planning_dev ?

  6. #6
    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
    Par défaut
    global s'écrit à l’intérieur de la fonction qui doit utiliser la variable pas au début du code.

    concernant le code répété tu as actuellement deux classes identiques écrites dans deux fichiers différents qui ne diffèrent que par le nom de la base de donnée dedans.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche dans une table via un formulaire
    Par Z[ee]k dans le forum Access
    Réponses: 3
    Dernier message: 05/06/2006, 11h14
  2. [VB6] Erreur durant la recherche dans une table
    Par quaife dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/04/2006, 17h21
  3. Recherche dans une table
    Par Fredo67 dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 17h21
  4. [Thread] Recherche dans une BDD
    Par Pedro dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2005, 14h03
  5. recherche dans une table Access en ASP
    Par D-D dans le forum ASP
    Réponses: 3
    Dernier message: 09/06/2004, 10h12

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