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

Résolu

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.

3 réponses

  1. Modérateur

    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
    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
  2. Contributeur

    bonjour,

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

    Cela peut se faire en utilisant var_dump().

    0
    1. 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
    2. Contributeur
      @Hmd3D2Y

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

      0
    3. @yg_be

      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
    4. Contributeur
      @Hmd3D2Y

      Commence alors par supprimer ce javascript.

      0
    5. @yg_be

      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
  3. Modérateur
    0
    1. 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
    2. Modérateur
      @Hmd3D2Y

      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
    3. @jordane45

      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