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

Langage PHP Discussion :

Erreur de connections [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Erreur de connections
    Bonjour,

    Je découvre PHP grâce au tuto de S. VAUTHIER (au passage, vraiment très bien), et j'en suis à l'étape 6.

    La base de donnée est bien renseignée lorsque je clique sur le bouton OK, mais au lieu de revenir sur la page form.php, j'ai ce message d'erreur:

    Page Web inaccessible

    La page Web à l'adresse http://localhost/PHP/form.php est peut-être temporairement inaccessible ou a peut-être été redirigée de façon permanente vers une nouvelle adresse Web.

    Plus d'informations sur cette erreur
    Message d'erreur original ci-dessous

    Erreur 101 (net::ERR_CONNECTION_RESET) : Erreur inconnue
    Je bloque un peu là, et si quelqu'un peut m'aider ça serait vraiment sympa.

    Merci

  2. #2
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    salut,
    tu pourrais donner le code de ta page stp merci.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Là voici... J'ai exactement repris l'exemple du tuto

    fonctions.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    function connectMaBase(){
        $base = mysql_connect ('localhost', 'root', '');  
        mysql_select_db ('MaBase', $base) ;
    }
    ?>
    form.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    include("fonctions.php");
    ?>
    <html>
        <head><title>Formulaire de saisie utilisateur </title></head>
        <body>
            <h1>Inscrivez-vous !</h1>
            <h2>Entrez les données demandées :</h2>
            <form name="inscription" method="post" action="form.php">
                Entrez votre pseudo : <input type="text" name="pseudo"/> <br/>
                Garçon ou fille ? 	<input type="radio" name="sexe" value="G"/>Garçon<input type="radio" name="sexe" value="F"/>Fille<br/>
                Entrez votre age : <input type="text" name="age"/><br/>
                <input type="submit" name="valider" value="OK"/>
            </form>
            <?php
            if (isset ($_POST['valider'])){
                //On récupère les valeurs entrées par l'utilisateur :
                $pseudo=$_POST['pseudo'];
                $age=$_POST['age'];
                $sexe=$_POST['sexe'];
                //On construit la date d'aujourd'hui
                //strictement comme sql la construit
                $today = date("y-m-d");
                //On se connecte
                connectMaBase();
     
                //On prépare la commande sql d'insertion
                $sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")'; 
     
                /*on lance la commande (mysql_query) et au cas où, 
                on rédige un petit message d'erreur si la requête ne passe pas (or die) 
                (Message qui intègrera les causes d'erreur sql)*/
                mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
     
                // on ferme la connexion
                mysql_close();
            }
            ?>
        </body>
    </html>
    Quelque chose me dit que cela peut venir de la méthode de fermeture du mysql, mais j'en suis pas sûr du tout.

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Jiyuu
    Quelque chose me dit que cela peut venir de la méthode de fermeture du mysql, mais j'en suis pas sûr du tout.
    Pas seulement, tu rencontre surtout un problème de portée (visibilité, accessibilité) de variable.

    C'est le fait de faire ta connexion dans une fonction.
    Faut savoir que la fonction mysql_connect() retourne un ID unique de connexion (un link identifiant), c'est $base dans ton code, et ce $base n'a qu'une portée locale uniquement dans cette fonction connectMaBase()

    2 choses une :
    - Soit tu retourne cette valeur (return $base) et il te faut la récupérer + l'exploiter dans toutes les autres fonctions mysql_* réclamant ce paramètre, ce qui aura pour effet de conserver la même connexion.

    - Soit ne pas utiliser de fonction connectMaBase(), mais te contenter de faire cette connexion dans un fichier à part (genre connectMaBase.php) et l'inclure une fois.
    Cependant, si tu fait une requête dans une fonction, il y aura encore un souci de portée, mais elle peut facilement être corrigée, suffit de déclarer $base en globale dans cette (ou ces) fonctions.

  5. #5
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    il faudrait ajouter le nom de la connexion dans le mysql_close()

  6. #6
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Merci pour votre aide. J'ai rencontré encore quelques problèmes et du coup j'ai abandonné la présentation de l'auteur du tuto pour faire de la même manière que j'aurai fait en python, à savoir tout ce que j'ouvre dans une fonction je le ferme dans cette même fonction.

    Ça donne ça

    fonctions.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
    16
    17
    <?php
    function connectMaBase($pseudo, $sexe, $age, $today){
        $base = mysql_connect ('localhost', 'root', '');  
        mysql_select_db ('MaBase', $base) ;
     
    	//On prépare la commande sql d'insertion
        $sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")'; 
     
        /*on lance la commande (mysql_query) et au cas où, 
        on rédige un petit message d'erreur si la requête ne passe pas (or die) 
        Message qui intègrera les causes d'erreur sql)*/
        mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
     
        // on ferme la connexion
        mysql_close($base);
    }
    ?>
    form.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    include("fonctions.php");
    ?>
    <html>
        <head><title>Formulaire de saisie utilisateur </title></head>
        <body>
            <h1>Inscrivez-vous !</h1>
            <h2>Entrez les données demandées :</h2>
            <form name="inscription" method="post" action="form.php">
                Entrez votre pseudo : <input type="text" name="pseudo"/> <br/>
                Garçon ou fille ? 	<input type="radio" name="sexe" value="G"/>Garçon<input type="radio" name="sexe" value="F"/>Fille<br/>
                Entrez votre age : <input type="text" name="age"/><br/>
                <input type="submit" name="valider" value="OK"/>
            </form>
            <?php
            if (isset ($_POST['valider'])){
                //On récupère les valeurs entrées par l'utilisateur :
                $pseudo=$_POST['pseudo'];
                $age=$_POST['age'];
                $sexe=$_POST['sexe'];
                //On construit la date d'aujourd'hui
                //strictement comme sql la construit
                $today = date("y-m-d");
                //On se connecte
                connectMaBase($pseudo, $sexe, $age, $today);
            }
            ?>
        </body>
    </html>
    Et là plus de souci.

    Encore merci

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Ok, mais crois tu qu'il est judicieux de faire ainsi, soit créer 1 fonction par requête ?

    Des requêtes, tu risque d'en faire beaucoup, plusieurs centaines peut être.
    Vas tu créer les centaines de fonctions ?

  8. #8
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Ok, mais crois tu qu'il est judicieux de faire ainsi, soit créer 1 fonction par requête ?

    Des requêtes, tu risque d'en faire beaucoup, plusieurs centaines peut être.
    Vas tu créer les centaines de fonctions ?
    Evidemment non. Si je ramène cet exemple à python, je règlerai le problème de cette manière:
    1°) Création d'une fonction comportant à minima 2 arguments. 1 pour le nom de la bdd et le deuxième une liste (un tableau en php) comportant toutes les valeurs que je souhaite mettre dans ma bdd.
    2°) Recherche d'une méthode permettant de passer à 'INSERT INTO Utilisateurs VALUES(...) autant de valeur qu'il y en a de contenu dans la liste.
    3°) Appel de la fonction avec les bons arguments.

    Mais comme je débute je voulais avant tout réussir à faire tourner l'exemple du tuto.

    Voilà comment je pourrais faire de manière très synthétique... Tu pourras ainsi me dire si ceci est envisageable et peut être même m'aider ^^...

    fonctions.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
    16
    17
    18
     
    <?php
    function connectMaBase($mabdd, $matable, $tableau_de_valeur){
        $base = mysql_connect ('localhost', 'root', '');  
        mysql_select_db (.$mabdd., $base) ;
     
        // Ici je dois trouver le moyens de passer autant de valeurs à 'INSERT INTO Utilisateurs VALUES qu'il y en a dans le tableau...
       /*en python ça pourrait donné un truc du genre:
    $sql = 'INSERT INTO'+str($matable)+'VALUES('','
    for i in $tableau_de_valeur:
        $sql = $sql +',' + str(i)
    $sql = $sql +')'*/
    // il me faut donc trouver l'équivalent de ceci en php, ce qui doit pas être bien compliqué. Puis...
     
        mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());                          
        mysql_close($base);
    }
    ?>
    Et voilà... je pense que le tour est quasi joué... Qu'en dis tu?

  9. #9
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Jiyuu
    Et voilà... je pense que le tour est quasi joué... Qu'en dis tu?
    Tu demande mon avis ? Malheureusement j'adhère pas vraiment ... mais c'est mon avis.

    Cette fois tu prends la voie de tout rassembler toutes les fonctionnalités dans une seule fonction, ça me semble pas une bonne idée tant les cas sont différents, tant les besoins sont variés, complexes, et parfois même très spécifiques.
    Tu vas perdre toute la souplesse/facilité qu'offre les divers et nombreuses fonctions mysql_* à mon avis. Tu t'enferme pas mal avec cette fonction.

    Pour pouvoir profiter de toutes les combinaisons qu'offres ces fonctions, tu devras en créer d'autres, et encore d'autres pour contourner les problèmes.
    La solution, qui au départ devait simplifier les choses ne le sera plus au fil du temps.
    Enfin, c'est ce que j'imagine.


    Si tu veux quelque chose de simple, créer un simple fichier (genre connexion.php) et l'inclure en début de page 1 seule fois pour faire la connexion et ensuite utiliser les fonctions mysql telles quelles reste efficace.
    Certe, utiliser, répéter partout dans son code des mysql_query() peu paraitre peu rationnel, mais il me semble difficile de faire autrement si on prend la voix d'utiliser uniquement des fonctions.


    J'ai jamais trop adhérer à ce principe de surcharge de fonctions alors quelles existent déjà, au bout, on se retrouve avec une pléiades de fonctions, au bout d'1 an on ne comprend plus grand chose à son propre code.


    Pour ma part 2 chose une :
    Soit on veux un code simple. La technique du include + utilisation des fonctions existantes reste la plus simple.
    Soit on a un besoin plus étendu, alors on s'oriente vers la POO. On peut créer une classe (genre MySQL) qui collera au mieux à son besoin.

    A savoir qu'il existe la classe PDO/PDOStatement, qui me semble une excellent solution, c'est cela dont j'utilise d'ailleurs.


    Tout ceci reste un avis perso, évidemment

  10. #10
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Je te rassure une nouvelle fois, tout n'est pas à prendre au pied de la lettre.
    Certaines choses doivent être sûrement complétées, modifiées, améliorées... Ce n'est pas parce que j'ai dit que je pouvais faire ainsi que je vais m'efforcer de faire tout le temps ça... je suis un peu têtu mais pas non plus à ce point.

    Comme je l'ai plus ou moins indiqué, je programme en python. Depuis plus d'un 1 an je suis sur un programme que j'améliore continuellement. Pas seulement dans les fonctionnalité qu'il offre mais aussi dans sa maintenabilité. J'entends par là le rendre facile à comprendre de telle sorte que d'une part lorsque je reprends une partie je ne passe pas 1 semaine à comprendre ce que j'ai fait, et d'autre part faire en sorte de limiter les répétitions inutiles.

    Aujourd'hui mon programme doit comprendre plus de 20 000 lignes de codes... Et je te promets que je sais exactement à quoi chacune d'elles correspond.

    Quoiqu'il en soit dans le cas présent, j'avais un bout de code qui ne fonctionnait pas (j'ignore réellement pourquoi), je l'ai quelque peu adapté et maintenant il fonctionne. Je suis satisfait. Maintenant quand j'aurai quelques heures de php dans les doigts, je me dirai très certainement... "Pfff c'est pas comme cela qu'il faut faire ^^"

    En tout cas merci à toi pour tes commentaires et remarques qui me seront très certainement utile pour la suite.

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

Discussions similaires

  1. aide SVP : erreur de connection, tns protocol
    Par isidore dans le forum Connexions aux bases de données
    Réponses: 5
    Dernier message: 04/04/2006, 17h16
  2. [Access]: message d erreur: erreur de connection!!!
    Par amine15534 dans le forum Access
    Réponses: 1
    Dernier message: 21/03/2006, 15h45
  3. Erreur de connection avec une ADOTable
    Par Sunchaser dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/03/2006, 19h03
  4. [VB]DataEnvironment et erreurs de connections
    Par VVE dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 31/01/2006, 19h03
  5. [ADO.NET] Erreur de connection à une DB SQL
    Par BilTCD dans le forum ASP
    Réponses: 4
    Dernier message: 10/08/2005, 16h11

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