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 mise au point avec appel de fonctions [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut Problème de mise au point avec appel de fonctions
    Re Bonjour,
    C'est encore moi le débutant qui souffre.
    je n'arrive pas à comprendre l'erreur
    Voici le code:
    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
    41
    42
    43
    44
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Exemple Appel Fonction requête SQL</title>
    </head>
     
    <body>
    <?php 
    /* appel de la fonction EXTRACTION DES DONNEES */
    $infoID = extraireinfos("1143");  		
    /* RECUPERATION DES DONNEES */
    /* Exemple de Lecture des lignes avec Extract */
    $ligne = mysqli_fetch_assoc($resultat);
    extract($ligne);
    if ($Identifiant == $infoID)
      {
       echo 'Identifiant: $Identifiant';
       echo 'Nom: $nom';
       echo 'Prénomom: $nom';
     
       }
    else 
       echo 'pas trouvé';
     
    ?>
    </body>
    </html>
    <?php 
    function extraireinfos($Identifiant)  
    {
    $hote = "localhost";
    $utilisateur = "root";
    $mPasse = "";
    $nombase = "Anciens élèves";
    $connexion = mysqli_connect($hote, $utilisateur, $mPasse, $nombase) or die ("Connexion au serveur impossible.");
    /* Attention le nom de la table doit être mis entre ` `  ce ne sont pas des quotes' '.
     Voir si on peut le changer dans le serveur SQL */
    $requete = "SELECT nom,prénom,entrée_berthelot,sortie_berthelot FROM `cotisants 2009` WHERE Identifiant='$Identifiant'";
    $resultat = mysqli_query($connexion, $requete) or die ("Execution requête SQL impossible");
    return mysqli_fetch_assoc($resultat);
    }
    ?>
    et voici l'erreur:

    Notice: Undefined variable: resultat in C:\wamp\www\TESTPHP\Fonction Exploitation Requete SQL.php on line 14

    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\wamp\www\TESTPHP\Fonction Exploitation Requete SQL.php on line 14

    Warning: extract() expects parameter 1 to be array, null given in C:\wamp\www\TESTPHP\Fonction Exploitation Requete SQL.php on line 15

    Notice: Undefined variable: Identifiant in C:\wamp\www\TESTPHP\Fonction Exploitation Requete SQL.php on line 16
    pas trouvé.

    Désolé et Merci d'avance pour votre aide au debug.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton fetch est déjà fait dans ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ligne = extraireinfos("1143");

  3. #3
    Membre confirmé
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 453
    Points
    453
    Par défaut
    La variable resultat est une variable locale à la fonction extraireinfos. Elle n'est pas accessible en dehors.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Ne m'en sort toujours pas.
    Ai je pense suivi conseils voici le code:
    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
    41
    42
    43
    44
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Exemple Appel Fonction requête SQL</title>
    </head>
     
    <body>
    <?php 
    /* appel de la fonction EXTRACTION DES DONNEES */
    $Identifiant = "1143" 
    $ligne = extraireinfos("1143");  		
    /* RECUPERATION DES DONNEES */
    /* Exemple de Lecture des lignes avec Extract */
    /* $ligne = mysqli_fetch_assoc($resultat); */
    extract($ligne);
    if ($Identifiant == "1143")
      {
       echo 'Identifiant: $Identifiant';
       echo 'Nom: $nom';
       echo 'Prénomom: $nom';
     
       }
    else 
       echo 'pas trouvé';
     
    ?>
    </body>
    </html>
    <?php 
    function extraireinfos($Identifiant)  
    {
    $hote = "localhost";
    $utilisateur = "root";
    $mPasse = "";
    $nombase = "Anciens élèves";
    $connexion = mysqli_connect($hote, $utilisateur, $mPasse, $nombase) or die ("Connexion au serveur impossible.");
    /* Attention le nom de la table doit être mis entre ` `  ce ne sont pas des quotes' '.
     Voir si on peut le changer dans le serveur SQL */
    $requete = "SELECT nom,prénom,entrée_berthelot,sortie_berthelot FROM `cotisants 2009` WHERE Identifiant='$Identifiant'";
    $resultat = mysqli_query($connexion, $requete) or die ("Execution requête SQL impossible");
    return mysqli_fetch_assoc($resultat);
    }
    ?>
    Ai erreur:

    Parse error: parse error in C:\wamp\www\TESTPHP\Fonction Exploitation Requete SQL.php on line 12

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Pour essayer d'avancer j'ai simplifié le code car je me suis aperçu que le champ identifiant n'est pas accessible, c'est une primary key avec auto-incrément.
    Je ne sais pas pourquoi on ne peut pas la mettre dans le select ni dans echo.
    Donc voici mon nouveau code qui fonctionne avec cependant un echo très rudimentaire:
    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
    41
    42
    43
    44
    45
    46
    47
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Exemple Appel Fonction requête SQL</title>
    </head>
     
    <body>
    <?php 
    /* appel de la fonction EXTRACTION DES DONNEES */
    /* $Identifiant = "1143" */
    $ligne = extraireinfos("1143");  		
    /* RECUPERATION DES DONNEES */
    /* Exemple de Lecture des lignes avec Extract */
    /* $ligne = mysqli_fetch_assoc($resultat); */
    extract($ligne);
    /* if ($Identifiant == "1143")
      {
    */  
       echo  $Identifiant;
       echo  $nom;
       echo  $prénom;
     
    /*
       }
    else 
       echo 'pas trouvé';
    */
    ?>
    </body>
    </html>
    <?php 
    function extraireinfos($Identifiant)  
    {
    $hote = "localhost";
    $utilisateur = "root";
    $mPasse = "";
    $nombase = "Anciens élèves";
    $connexion = mysqli_connect($hote, $utilisateur, $mPasse, $nombase) or die ("Connexion au serveur impossible.");
    /* Attention le nom de la table doit être mis entre ` `  ce ne sont pas des quotes' '.
     Voir si on peut le changer dans le serveur SQL */
    $requete = "SELECT nom,prénom,entrée_berthelot,sortie_berthelot FROM `cotisants 2009` WHERE Identifiant='$Identifiant'";
    $resultat = mysqli_query($connexion, $requete) or die ("Execution requête SQL impossible");
    return mysqli_fetch_assoc($resultat);
    }
    ?>
    Et voici le résultat:

    Notice: Undefined variable: Identifiant in C:\wamp\www\TESTPHP\Fonction Exploitation Requete SQL.php on line 20
    SOULEJacques

    Merci de me dire ce que vous en pensez.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut que "identifiant" soit dans les champs de ton SELECT.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    OK
    J'ai une erreur lorsque je veux l'afficher avec echo $Identifiant, " ";

    Résultat:
    Notice: Undefined variable: Identifiant in C:\wamp\www\TESTPHP\Fonction Exploitation Requete SQL.php on line 21
    SOULE Jacques

    Code
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Exemple Appel Fonction requête SQL</title>
    </head>
     
    <body>
    <?php 
    /* appel de la fonction EXTRACTION DES DONNEES */
    /* $Identifiant = "1143" */
    $ligne = extraireinfos("1143");  		
    /* RECUPERATION DES DONNEES */
    /* Exemple de Lecture des lignes avec Extract */
    /* $ligne = mysqli_fetch_assoc($resultat); */
    extract($ligne);
    /* if ($Identifiant == "1143")
      {
    */  
    /* Il semble qu'on ne peut pas accéder au champ Identifiant */
       echo  $Identifiant, "   ";
     
       echo  $nom, "    ";
     
       echo  $prénom;
     
    /*
       }
    else 
       echo 'pas trouvé';
    */
    ?>
    </body>
    </html>
    <?php 
    function extraireinfos($Identifiant)  
    {
    $hote = "localhost";
    $utilisateur = "root";
    $mPasse = "";
    $nombase = "Anciens élèves";
    $connexion = mysqli_connect($hote, $utilisateur, $mPasse, $nombase) or die ("Connexion au serveur impossible.");
    /* Attention le nom de la table doit être mis entre ` `  ce ne sont pas des quotes' '.
     Voir si on peut le changer dans le serveur SQL */
    $requete = "SELECT identifiant,nom,prénom,entrée_berthelot,sortie_berthelot FROM `cotisants 2009` WHERE Identifiant='$Identifiant'";
    $resultat = mysqli_query($connexion, $requete) or die ("Execution requête SQL impossible");
    return mysqli_fetch_assoc($resultat);
    }
    ?>

  8. #8
    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
    attention aux majuscules, minuscules.
    eventuellement fais un
    pour controler.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Voici le résultat;
    Notice: Undefined variable: Identifiant in C:\wamp\www\TESTPHP\Fonction Exploitation Requete SQL.php on line 21
    SOULE JacquesArray ( [identifiant] => 1143 [nom] => SOULE [prénom] => Jacques [entrée_berthelot] => 1953 [sortie_berthelot] => 1960 )

  10. #10
    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
    attention aux majuscules, minuscules.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut Conflit entre nom de varibles et champs dans la base
    Bonjour,
    Après une nuit de sommeil la lumière revient....
    J'ai pensé qu'il pouvait y avoir un conflit entre le nom des variables passés en paramètre à l'appel de la fonction et le nom de champ de la BDD.
    En fait j'ai changé $identifiant en $Id et ça semble correct maintenant.

    J'ai également fait des essais en respectant majuscule et minuscules.
    Rien ne change, pas sensible à la casse.

    Vous pouvez me confirmer qu'il y avait bien un conflit de nom de variable, curieux non?

    voici le nouveau code:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Exemple Appel Fonction requête SQL</title>
    </head>
     
    <body>
    <?php 
    /* appel de la fonction EXTRACTION DES DONNEES */
    /* $Identifiant = "1143" */
    $ligne = extraireinfos("1143");  		
    /* RECUPERATION DES DONNEES */
    /* Exemple de Lecture des lignes avec Extract */
    /* $ligne = mysqli_fetch_assoc($resultat); */
    extract($ligne);
    /* if ($Identifiant == "1143")
      {
    */  
    /* Il semble qu'on ne peut pas accéder au champ Identifiant */
       echo  $identifiant, "   ";
     
       echo  $nom, "    ";
     
       echo  $prénom, "   ";
     print_r($ligne);    
    /*
       }
    else 
       echo 'pas trouvé';
    */
    ?>
    </body>
    </html>
    <?php 
    function extraireinfos($Id)  
    {
    $hote = "localhost";
    $utilisateur = "root";
    $mPasse = "";
    $nombase = "Anciens élèves";
    $connexion = mysqli_connect($hote, $utilisateur, $mPasse, $nombase) or die ("Connexion au serveur impossible.");
    /* Attention le nom de la table doit être mis entre ` `  ce ne sont pas des quotes' '.
     Voir si on peut le changer dans le serveur SQL */
    $requete = "SELECT identifiant,nom,prénom,entrée_berthelot,sortie_berthelot FROM `cotisants 2009` WHERE Identifiant='$Id'";
    $resultat = mysqli_query($connexion, $requete) or die ("Execution requête SQL impossible");
    return mysqli_fetch_assoc($resultat);
    }
    ?>
    et le résultat:
    1143 SOULE Jacques Array ( [identifiant] => 1143 [nom] => SOULE [prénom] => Jacques [entrée_berthelot] => 1953 [sortie_berthelot] => 1960 )

  12. #12
    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
    Non ce n'est pas curieux, ta requête renvoit "identifiant" et toi tu essayais d'utiliser $Identifiant.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Ok mais je suis débutant comme tu le sais et j'y suis allé par tâtonnement et plus par intuition que de manière cartésienne.
    Je n'ai remarqué aucune part dans mes lectures qu'on n'a pas le droit d'utiliser les mêmes noms de variables que ceux utilisés dans une requête ou dans le nom des champs de la base de données. Au contraire j'avais compris que le référencement se faisait automatiquement en utilisant le même nom comme par exemple dans le cas e récupération des données d'un formulaire.
    J'avoue ne pas bien comprendre pourquoi le nom donné à la variable passée à la fonction doit avoir un autre nom dès l'instant où ce nom est déjà utilisé par ailleurs (requête SQL, affichage,récupération de la donnée, etc).
    Je pensais que ce nom restait fictif et ne servait que comme un pointeur d'adresse ou quelque chose comme cela pour se passer l'information entre le code appelant et la fonction indépendamment du reste.
    Je suppose qu'il en va de même pour les noms de variable pour le retour ($resultat par exemple)?
    Mais bon c'est clair qu'il faudra que je fasse attention à cela.
    Merci à toi si tu pouvais m'expliquer ce que je n'ai pas encore bien intégré.

  14. #14
    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
    on n'a pas le droit d'utiliser les mêmes noms de variables que ceux utilisés dans une requête ou dans le nom des champs de la base de données
    Non il n'y a rien de tel.
    tu es peut etre perturbé par extract();

    J'avoue ne pas bien comprendre pourquoi le nom donné à la variable passée à la fonction doit avoir un autre nom
    Ce n'est pas le cas non plus.
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function incremente($a) {
    $a += 1;
    return $a;
    }
    $a = 5;
    echo incremente($a); // 6;
    echo $a; // 5
    Le $a dans la fonction et le $a en dehors ne sont pas les mêmes.
    quand je fais incremente($a), je fournis juste la valeur de $a à la fonction.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Merci Sabotage.
    Clair.
    Je continue me exercices.

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

Discussions similaires

  1. Quelques mises aux points avec wxNotebook
    Par TheDrev dans le forum wxWidgets
    Réponses: 2
    Dernier message: 05/02/2008, 17h12
  2. [XHTML] problème de mise en page avec table
    Par irnbru dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 24/05/2007, 00h02
  3. Problème de mise en page avec feuille de style css
    Par leroivert dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 15/11/2005, 09h36
  4. Petite mise au point avec gluUnProject.
    Par fatpat94 dans le forum OpenGL
    Réponses: 1
    Dernier message: 27/07/2005, 15h40

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