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 :

MySQL dans les Includes [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 11
    Points
    11
    Par défaut MySQL dans les Includes
    Coucou,

    Je suis en train de programmer mon premier portail personnel, et jusqu'ici je n'ai eu aucun problème, sauf un, qui n'est pas vraiment un réel problème mais bon, j'aimerais bien connaître la réponse.

    Donc voici le code, tout simple :

    INDEX.PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?
     
    include("connectSQL.php");
    include("page.php");
     
    $array_config = mysql_query("SELECT name FROM " . $db_prefix . "_config");
    while ($row = mysql_fetch_array($array_config))
    {
        echo $row['name'];
    }
     
    requete();
     
    ?>
    PAGE.PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?
     
    function requete()
    {
    	connect($db_serv, $db_name, $db_user, $db_pass);
    	$array_configw = mysql_query("SELECT value FROM " . $db_prefix . "_config");
    	while ($rowx = mysql_fetch_array($array_configw))
    	{
    	    echo $rowx['value'];
    	}
    }
     
    ?>
    Le problème est que la requête de la fonction "requête()" ne s'execute pas.
    Il faut que j'include à nouveau le connectSQL.php dans la fonction pour que celle-ci s'execute...

    J'aimerais pouvoir appeler la fonction sans à avoir refaire la connexion à la base de donnée...

    Merci d'avance !

    Dans l'attente de vous lire

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Tu as un problème avec la portée des variables.

    Un petit tour en FAQ ?


  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Et bien j'ai essayé beaucoup de chose, donc les variables globales, en ayant mis dans ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = @mysql_connect($db_serv, $db_user, $db_pass) or die("Impossible to connect the server") ;
        @mysql_select_db($db_name) or die("Impossible to connect the data-base") ;
    Mais ça n'a pas fonctionné.

    Faut-il mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function requete()
    {
    	global $sql; // pour dire que la variable est globale.
    	$sql; // pour l'executer.
     
    	[...]
    }
    J'ai un peu de mal là...
    J'ai regardé sur d'autres CMS, mais il n'y a aucun global du genre.
    La connexion est executée une fois, et aucune variable globale n'est lancée (?).

    Merci d'avance ^^.

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Drackster Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = @mysql_connect($db_serv, $db_user, $db_pass) or die("Impossible to connect the server") ;
        @mysql_select_db($db_name) or die("Impossible to connect the data-base") ;
    Mais ça n'a pas fonctionné.
    Et oui...
    Il y a du mieux mais ce n'est pas encore ça.
    Tu déclares $sql en global. OK, mais quid de $db_serv, $db_user, etc... Toute variable alimentée hors de la fonction doit être déclaré&e en global (beurk) ou passée en paramètre (miam, mieux).

    Courage, tu es sur la voie de la lumière.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Il faudrait donc que ma fonction requête devienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    requete($db_user, $db_pass, etc)
    {
    global $sql;
    $sql;
     
    [...]
    }
    ?

    Ca ne pose pas de problème niveau sécurité ? Et je dois faire cela dans chaque fonction ?!

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Drackster Voir le message
    Il faudrait donc que ma fonction requête devienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    requete($db_user, $db_pass, etc)
    {
    global $sql;
    $sql;
     
    [...]
    }
    ?

    Ca ne pose pas de problème niveau sécurité ? Et je dois faire cela dans chaque fonction ?!
    C'est une façon de faire. Tu peux aussi déclarer des constantes qui sont accessibles partout dans le code, ça se fait pas mal. Personnellement, je préfère.
    De toutes façons, c'est ton premier portail : quand il marchera, ce sera sûrement un gruyère, mais au moins il fonctionnera. Avec l'expérience et quand les bases seront acquises, tu pourras te pencher de plus près sur la sécurité.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Merci, je vais voir cela demain.
    Je reviendrais pour poser de nouvelles questions, ou si tout simplement mon problème est résolu.

    Merci encore ^^.

  8. #8
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Citation Envoyé par Drackster Voir le message
    INDEX.PHP :
    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
    <?php
    include("connectSQL.php");
    include("page.php");
    
    //tu effectues une requête... sans ouvrir de connexion à ta BdD.
    $array_config = mysql_query("SELECT name FROM " . $db_prefix . "_config");
    while ($row = mysql_fetch_array($array_config))
    {
        echo $row['name'];
    }
    
    requete();
    
    ?>
    PAGE.PHP :

    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
    <?
    
    function requete()
    {
    	//connexion (tardive) à la BdD
    	connect($db_serv, $db_name, $db_user, $db_pass);
    	//$array_configw est une variable de portée locale à requete.
    	$array_configw = mysql_query("SELECT value FROM " . $db_prefix . "_config");
    	while ($rowx = mysql_fetch_array($array_configw))
    	{
    	    echo $rowx['value'];
    	}
    }
    
    ?>
    Une simple question...

    Pourquoi ne pas faire plus simple (dans un premier temps), à savoir, dans une fonction, ouvrir ta connexion à ta BdD, faire tes requêtes, ensuite, fermer ta connexion à la BdD.

    Ouvrir et fermer la connexion pour chaque requête autrement... Mais pour ce faire, la fonction d'ouverture et la fonction de fermeture doivent être écrites

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    La connexion se faisait dans le connectSQL.php.
    Et j'ai trouvé le problème, il n'y a aucunement besoin de faire des connexions à la base de tout partout, j'ai juste mis mysql_fetch_array, au lieu de mysql_fetch_row...

    Merci pour votre aide ^^.

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

Discussions similaires

  1. [POO] mysql dans les autre classes ou pas?
    Par ibasticour dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2008, 14h40
  2. [MySQL] Connexion à mysql dans les scripts : procédure conseillée
    Par xni70 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/07/2007, 13h41
  3. ouverture des balises PHP dans les include
    Par FoxLeRenard dans le forum Langage
    Réponses: 5
    Dernier message: 30/01/2006, 12h08
  4. Problème dans les includes
    Par Machjaghjolu dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 14/01/2006, 15h10
  5. [EasyPHP] problème de visibilité des variable dans les includes
    Par d1g-2-d1g dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 23/10/2005, 01h55

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