Problème de récupération d'identifiant PHP

Résolu/Fermé
Hmd3D2Y - Modifié le 31 déc. 2022 à 03:19
 Hmd3D2Y - 31 déc. 2022 à 17:22

Bonjour,

Je suis actuellement en train de réaliser un site/application qui permet de gérer une équipe de volley (il s'agit d'un projet de cours) mais je viens de rencontrer un problème dont je n'arrive vraiment pas à le cerner. 

Je souhaite pouvoir afficher une liste de matchs prévus et afficher une liste de joueurs potentiels pouvant participer à un match sélectionné. Mais pour ça je dois au préalable afficher seulement les joueurs qui ne sont pas déjà inscrits pour ce match. j'avais donc pensé à récupérer l'identifiant de mon match pour l'utiliser en conséquence mais je n'y arrive pas.

voici mon code : 

<?php
    $server = "localhost";
    $login = "root";
    $mdp = "";
    $db = "projet_php";

    try {
        $bdco = new PDO("mysql:host=$server;dbname=$db",$login,$mdp);
        $bdco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Erreur de connexion : ' . $e->getMessage();
    }

    $repertoire = "projet-photos/";
?>
<form method="POST" action="ajouterJoueursMatch.php" onsubmit="return verifierSelectionJoueurs();">
  <label for="match">Match :</label>
  <select name="match" id="match">
    <?php
      // Récupération de la liste des matchs
      $stmt = $bdco->prepare('SELECT * FROM matchs');
      $stmt->execute();
      while ($row = $stmt->fetch()) {
        echo '<option value="' . $row['id_Match'] . '">' . $row['lieu_match'] . ' - ' . $row['date_match'] . ' - ' . $row['heure_match'] . '</option>';
      }
    ?>
  </select>
  <br>
  <label for="joueurs">Joueurs :</label>
  <ul>
    <?php
      // Récupération de l'identifiant du match sélectionné
      $idMatch = intval($_POST["match"]);
      // Récupération de la liste des joueurs qui ne sont pas déjà assignés au match
      $stmt = $bdco->prepare('SELECT * FROM joueur WHERE numero_de_licence NOT IN (SELECT numero_de_licence FROM participer WHERE id_Match = ?)');
      $stmt->execute([$idMatch]);
      while ($Joueur = $stmt->fetch()) {
        echo '<li>';
        echo '<input type="checkbox" name="joueurs[]" value="' . $Joueur['numero_de_licence'] . '">';
        echo $Joueur['Prenom'] . ' ' . $Joueur['Nom'];
        echo '</li>';
      }
    ?>
  </ul>
  <input type="submit" value="Ajouter">
</form>


<script>
  function verifierSelectionJoueurs() {
    var boutonsCheckBox = document.getElementsByTagName('input');
    var nbJoueursSelectionnes = 0;
    for (var i = 0; i < boutonsCheckBox.length; i++) {
      if (boutonsCheckBox[i].checked && boutonsCheckBox[i].type == 'checkbox') {
        nbJoueursSelectionnes++;
      }
    }
    if (nbJoueursSelectionnes != 5 || nbJoueursSelectionnes2 != 5) {
      // Affichage d'une pop-up d'erreur
      alert('Veuillez vérifiez que vous ayez bien rempli tous les champs et que vous ayez bien sélectionné 5 joueurs');
      return false;
    }
    else {
      return true;
    }
  }
</script>

En soi mon code fonctionne correctement mais je n'arrive pas récupérer l'identifiant d'un match sélectionné et la mettre dans une variable.

De plus l'erreur suivant s'affiche :

Si quelqu'un pouvait m'aider ce serait génial, merci.

A voir également:

3 réponses

jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
31 déc. 2022 à 15:22

En relisant ton code, j'ai l'impression que tu aimerais avoir la liste des joueurs qui ne sont pas déjà inscrits dans un match lors du choix du match en question. (et donc AVANT de SUBMIT ton formulaire)

Pour ça, tu peux utiliser de l'ajax.  (soit en jquery $.ajax , soit via la fonction javascript fetch() )


1

En effet je me suis rendu compte que pour retourner l'identifiant de ma sélection je devais submit et faire une redirection direct sur ma page mais j'ai décidé de faire autrement et ça à l'air de bien fonctionner.

merci d'avoir mis le doigt sur mon problème :)

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
31 déc. 2022 à 08:29

bonjour,

La première chose à faire, c'est d'examiner ce que contient $_POST.

Cela peut se faire en utilisant var_dump().

0

J'ai vérifié le contenus de $_POST et il est marqué empty donc je suppose qu'il n'a pas correctement récupéré l'identifiant.

voilà le résultat :

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > Hmd3D2Y
31 déc. 2022 à 13:17

Le souci est donc sans doute plutôt dans ton HTML ou dans ton javascript.

0
Hmd3D2Y > yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024
31 déc. 2022 à 13:31

je ne pense pas que ce soit liée à mon javascript et quant à mon HTML je ne vois pas, surtout que je me suis pour l'instant contenté d'un HTML basique, j'ai beau faire des modifications mais rien n'y ait fait

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > Hmd3D2Y
31 déc. 2022 à 14:55

Commence alors par supprimer ce javascript.

0
Hmd3D2Y > yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024
31 déc. 2022 à 17:22

Mon problème n'était pas le javascript mais un oublie sur le fonctionnement du POST mais j'ai su résoudre mon problème.

Merci de l'aide :)

0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
31 déc. 2022 à 09:45
0

J'avais déjà réfléchi à cela et avais fait ça :

<?php
      // Récupération de l'identifiant du match sélectionné
      if (isset($_POST["match"])) {
      $idMatch = intval($_POST["match"]);
      } else {
      $idMatch = 1;
      }
      // Récupération de la liste des joueurs qui ne sont pas déjà assignés au match
      $stmt = $bdco->prepare('SELECT * FROM joueur WHERE numero_de_licence NOT IN (SELECT numero_de_licence FROM participer WHERE id_Match = ?)');
      $stmt->execute([$idMatch]);
      while ($Joueur = $stmt->fetch()) {
        echo '<li>';
        echo '<input type="checkbox" name="joueurs[]" value="' . $Joueur['numero_de_licence'] . '">';
        echo $Joueur['Prenom'] . ' ' . $Joueur['Nom'];
        echo '</li>';
      }
    ?>

Mais j'ai constaté que le problème était que le $_POST ne récupérait pas l'identifiant de ma sélection et resté vide 

0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719 > Hmd3D2Y
31 déc. 2022 à 13:59

Tu utilises des chèmeckbox il y a donc fort à parier que tu retournes un heureux contenant 0,1 ou plusieurs valeurs...

Comme te l'a conseillé YG be, 

Fais donc un var_dump de ta variable.... Tu verras alors sa structure...

0
Hmd3D2Y > jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024
Modifié le 31 déc. 2022 à 14:22

Comme dit à YG be, le var_dump me retourne empty, j'en est donc conclu qu'il ne récupère rien lors de la sélection d'un match. 

En soit, j'ai écrit : var_dump($_POST); et var_dump($_POST["match"]); pour tester

le 1er me retourne ça :

et le second : 

0