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 :

Interaction site -> base de données mysql


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut Interaction site -> base de données mysql
    Bonjour à toutes et à tous !

    J'ai depuis maintenant quelques mois un site web hébergé par 1&1. Comme vous le savez peut-être, 1&1 permet d'avoir une base de données MySQL intégrée au site sans avoir à téléchargé MySQL ce qui tombe plutôt car je ne parvient pas à l'installer (erreur lors de l'installation de MySQL Server 5.5). Du coup, 1&1 fournit une adresse d'hôte, un nom d'utilisateur etc...
    Voici donc ci-dessous le code me permettant de me connecter à la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $hostname = "blablabla";
       $database = "blablabla";
       $username = "blablabla";
       $password = "mon mot de passe à moi tout seul";
     
       $link = mysqli_connect($hostname, $username, $password);
       if(!$link) {
          die('Connection failed : ' . mysqli_error());
       } else {
          echo "Connexion établie avec succès !";
       }
    Finalement, ça m'affiche que je suis bel et bien connecté à ma base de données.
    Bon jusque là tout va bien, mais voilà où est le problème. Lorsque je fais le code ci-dessous, je reçois le message d'erreur suivant :

    Fatal error: Uncaught Error: Call to a member function fetch() on null in /homepages/26/d680829806/htdocs/Site projet/inscription.php:19 Stack trace: #0 {main} thrown in /homepages/26/d680829806/htdocs/Site projet/inscription.php on line 19
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT idJoueur FROM "Joueur"';
       $requete = mysqli_query($sql);
       while ($donnees = $reponse->fetch()) {
          echo $donnees;
       }
    Voilà en gros j'ai essayé plusieurs requêtes aucune ne fonctionne. Du coup une aide précieuse et aimable me serait de grand secours.
    Merci à toute personne ayant essayé de m'aider !

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


    ce serait bien de consulter la documentation concernant les fonctions mysqli_ :




    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_query($link, $sql)
    Ensuite, d'où sort le $reponse de :
    ?


  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Tout d'abord, merci de votre aide. J'ai donc jeté un oeil à la documentation php, et j'ai donc fait le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       $sql = 'SELECT idJoueur FROM Joueur';
     
       if($stmt = mysqli_prepare($link, $sql)) {
          echo 'cool';
       }
    Malheureusement, le "cool" ne s'affiche pas et je ne parvient pas à comprendre pourquoi... (au passage, je débute complètement en php, base de données c'est pour ça que je suis pas mal perdu).

    Merci.

  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
    Pourquoi tu ne recopies pas déjà simplement l'exemple de la doc pour apprendre ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pourquoi tu ne recopies pas déjà simplement l'exemple de la doc pour apprendre ?
    Et bien c'est déjà ce que j'ai fais, mais vu que ça ne marchait pas j'ai essayé autre chose. En fait il y a aucun résultat

  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
    Montre nous ton code adapté de l'exemple et qui ne fonctionne pas alors.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Bonjour,

    J'ai donc adapté l'exemple donné par la documentation ci-contre : http://php.net/manual/fr/mysqli-stmt.fetch.php et je n'ai donc toujours aucun résultat. Sur ma page j'ai seulement "Connexion établie" qui s'affiche. Voici mon code 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
    $link = mysqli_connect($hostname, $username, $password);
       if(!$link) {
          die('Connection failed : ' . mysqli_error());
       } else {
          echo "Connexion établie avec succès !";
       }
     
       $sql = 'SELECT idJoueur FROM Joueur';
     
       if($stmt = $link->prepare($sql)) {
          $stmt->execute(); //execution de la requête
          $stmt->bind_result($idJoueur); //assoc' des variables de résultat
          while($stmt->fetch()) {
             printf("%s (%s)\n", $idJoueur);
          }
          $stmt->close();
       }
    Au passage, ma base de données se compose d'une table Joueur avec 4 colonnes :

    Nom : Screenshot_2.png
Affichages : 266
Taille : 8,4 Ko

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             printf("%s (%s)\n", $idJoueur);
    les %s remplacent UNE variable.


    Or, tu n'en a qu'une, pas 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             printf("%s\n", $idJoueur);
    Sinon, un simple echo suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             echo $idJoueur.'<br />';

    Je t'invite à ACTIVER l'affichage des erreurs PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php error_reporting(E_ALL); 	// en TEST !! ?>
    Dernière modification par Invité ; 12/10/2017 à 11h59.

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Merci, j'ai fais les changements que vous m'avez indiqué, et il n'y a aucun changement. En fait, j'ai compris d'où vient le problème, mais étant un débutant en php je ne sais pas comment le résoudre. Ce qu'il se passe c'est que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $link = mysqli_connect($hostname, $username, $password);
       if(!$link) {
          die('Connection failed : ' . mysqli_error());
       } else {
          echo "Connexion établie avec succès !";
       }
     
       $sql = 'SELECT idJoueur FROM Joueur';
    => Ce code s'exécute bel et bien et j'ai bien "Connexion établie" en haut de ma page web.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if($stmt = $link->prepare($sql)) {
          $stmt->execute(); //execution de la requête
          $stmt->bind_result($idJoueur); //assoc' des variables de résultat
          while($stmt->fetch()) {
             echo $idJoueur.'<br />';
          }
          $stmt->close();
       } else {
          echo "ça ne marche pas !";
       }
    => J'ai donc rajouté un else pour voir si le problème venait bel et bien de la non-vérification de la condition if ($stmt = $link->prepare($sql)) et il s'avère que c'est le cas, "ça ne marche pas" s'écrit sur ma page.

    En tout cas, merci pour vos aides déjà fournies

  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
    Par défaut
    Plutôt que "ne marche pas".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Ok merci beaucoup à tous ça fonctionne maintenant
    Peut-être à plus tard si je suis sur une autre galère !

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Me revoilà déjà

    Bon plus sérieusement, tout d'abord bonjour,

    J'ai depuis le précédent problème pas mal avancé, certes, mais me voilà confronter à nouveau problème qui est une erreur de type : Cannot add or update a child row: a foreign key constraint fails (`db702592277`.`Joueur`, CONSTRAINT `Joueur jouant a LoL` FOREIGN KEY (`idLOL`) REFERENCES `lol` (`idLOL`) ON UPDATE CASCADE)

    Tables :
    • Joueur(idJoueur, idLOL#, pnomJoueur, nomJoueur, emailJoueur)
    • lol(idLOL, pseudo, rankS6, rankS7)

    Donc ce que je souhaite faire, c'est faire en sorte qu'à chaque fois qu'un joueur créer un compte, il ait ses informations "personnelles" dans la table Joueur et que ses informations relative à LoL aille dans la table lol via l'idLOL.

    Voici mon code PHP, même si je sais qu'il doit être bien faux :
    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
    if(isset($_POST['validation'])) {
          $prenom = $_POST['pnom'];
          $nom = $_POST['nom'];
          $email = $_POST['email'];
          $pseudo = $_POST['pseudoLol'];
     
          $sql = "INSERT INTO Joueur(pnomJoueur, nomJoueur, emailJoueur) VALUES('$prenom', '$nom', '$email');";
     
          $sqlLol = "INSERT INTO lol(pseudo) VALUES('$pseudo');";
     
          if(mysqli_query($link, $sqlLol)) {
             echo "<br/>" . "Données Lol ajoutées avec succès !";
          } else {
             echo "<br/>" . "Erreur SQL : " . $link->error;
          }
          if(mysqli_query($link, $sql)) {
             echo "<br/>" . "Données ajoutées avec succès !";
          } else {
             echo "<br/>" . "Erreur lors de l'ajout des données : " . $link->error;
          }
    Voilà donc le pseudo s'ajoute bien, mais j'ai l'erreur pour la partie concernant la table Joueur.

    Encore merci aux futures personnes m'ayant fournit de l'aide

  13. #13
    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
    Il faut "idLol" pour faire l'insertion dans la table "joueur" et donc faire l'insertion dans la table "lol" en premier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    si on veut être un peu malin, on fera le contraire : on met idJoueur dans la table lol.
    Comme tu l'as dit toi-même très justement :
    à chaque fois qu'un joueur créer un compte, il ait ses informations "personnelles" dans la table Joueur et que ses informations relative à LoL aille dans la table lol via l'idLOL
    • idLOL n'est pas une informations "personnelles" du joueur
    • Par contre, idJoueur est bien une informations relative à LoL


    Donc :
    • Joueur (idJoueur, pnomJoueur, nomJoueur, emailJoueur) -> UNIQUEMENT les infos relatives au JOUEUR
    • lol (idLOL, idJoueur, pseudo, rankS6, rankS7) -> UNIQUEMENT les infos relatives au JEU LoL

    C'est plus judicieux et logique *.

    Alors :
    1/ INSERT dans la table Joueur
    2/ récupération de idJoueur (last_insert_id)
    3/ INSERT dans la table lol


    * Exemple : on peut supposer que tu proposes un 2ème jeu : WoW
    On aura alors une table :
    • wow (idWoW, idJoueur, pseudo, ....., ....) -> UNIQUEMENT les infos relatives au JEU WoW

    La table Joueur ne change pas.

  15. #15
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Ok, voilà en j'en suis :

    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
    if(isset($_POST['validation'])) {
          $prenom = $_POST['pnom'];
          $nom = $_POST['nom'];
          $email = $_POST['email'];
          $pseudo = $_POST['pseudoLol'];
     
    //Création des données personnelles du compte
          $sql = "INSERT INTO Joueur(pnomJoueur, nomJoueur, emailJoueur) VALUES('$prenom', '$nom', '$email');";
     
          if(mysqli_query($link, $sql)) {
             echo "<br/>" . "Données ajoutées avec succès !";
          } else {
             echo "<br/>" . "Erreur lors de l'ajout des données : " . $link->error;
          }
     
    //Récupération de la valeur d'idJoueur relative au compte
          $idJoueur = "SELECT last_insert_id()";
     
          if(mysqli_query($link, $idJoueur)) {
             echo "<br/>" . "idJoueur créé avec succès !";
          } else {
             echo "<br/>" . "Erreur SQL (idJoueur) : " . $link->error;
          }
     
    //Création des données LoL relative à l'idJoueur
          $sqlLol = "INSERT INTO lol(idJoueur, pseudo) VALUES('$idJoueur', '$pseudo');";
     
          if(mysqli_query($link, $sqlLol)) {
             echo "<br/>" . "Données Lol ajoutées avec succès !";
          } else {
             echo "<br/>" . "Erreur SQL : " . $link->error;
          }
    Avec ce code, le compte se créé correctement, l'idJoueur se créé étant donné que j'ai le message de succès, mais toujours la même erreur pour la partie clé étrangère :
    Erreur SQL : Cannot add or update a child row: a foreign key constraint fails (`db702592277`.`lol`, CONSTRAINT `Recup idJoueur` FOREIGN KEY (`idJoueur`) REFERENCES `Joueur` (`idJoueur`) ON DELETE CASCADE ON UPDATE CASCADE)
    Au passage, j'ai aussi fait le changement pour que mon MLD soit comme suivant :
    • Joueur(idJoueur, pnomJoueur, nomJoueur, emailJoueur)
    • lol(idLOL, idJoueur#, pseudo, rankS6, rankS7)

  16. #16
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          $idJoueur = "SELECT last_insert_id()";
    Où as-tu été pêcher cette syntaxe ??

    Ce serait bien de CONSULTER la documentation :



    L'informatique supporte assez mal l'à-peu-près...
    Si tu n'es pas plus rigoureux, tu ne t'en sortiras pas.

  17. #17
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Oui je sais bien mais malheureusement des fois je trouve que la documentation n'est pas très claire, et étant donné que je débute complètement là-dedans j'ai beaucoup de mal à comprendre quelques trucs. Bref, j'ai donc fait pas mal de recherches jusqu'à trouver un code sur un forum, ayant résolu un problème similaire au mien :

    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
    if(isset($_POST['validation'])) {
          $prenom = $_POST['pnom'];
          $nom = $_POST['nom'];
          $email = $_POST['email'];
          $pseudo = $_POST['pseudoLol'];
     
    //Création des données personnelles du compte
          $sql = "INSERT INTO Joueur (pnomJoueur, nomJoueur, emailJoueur) VALUES ('$prenom', '$nom', '$email');
                   SET @idJoueur = LAST_INSERT_ID();
                   INSERT INTO lol (idJoueur, pseudo) VALUES (@idJoueur, '$pseudo');";
     
          if(mysqli_query($link, $sql)) {
             echo "<br/>" . "Données ajoutées avec succès !";
          } else {
             echo "<br/>" . "Erreur lors de l'ajout des données : " . $link->error;
          }
    Et me voilà avec une nouvelle erreur :
    Erreur lors de l'ajout des données : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @idJoueur = LAST_INSERT_ID(); INSERT INTO lol (idJoueur, pse' at line 2
    Mais c'est à dire que j'ai comparé caractère par caractère mon code et celui sur le forum, et il n'y a aucune différence au niveau de la syntaxe

  18. #18
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas en recopiant les erreurs des autres que tu progresseras.

  19. #19
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Ce n'est pas en recopiant les erreurs des autres que tu progresseras.
    Ah ça c'est clair et net, mais étant donné que c'est le poste ayant permis à la personne de résoudre son problème et celui d'une centaine d'autres personnes, ça me paraissait plutôt honnête

Discussions similaires

  1. [MySQL] Données d'autres sites sur une base de données MySQL
    Par frohike dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 22/02/2013, 14h51
  2. Réponses: 3
    Dernier message: 17/01/2013, 19h46
  3. Interaction avec une base de données MySQL via python
    Par ismaeldndaw dans le forum Général Python
    Réponses: 2
    Dernier message: 01/09/2012, 15h45
  4. [MySQL] Connexion impossible à la base de données mysql dans le serveur hébergeur du site
    Par aefmaaradji dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2010, 21h56
  5. [MySQL] Mise en ligne site chez FREE et base de donnée Mysql
    Par sjcbboy dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 21/07/2008, 20h50

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