Bonjour,

Plusieurs soucis :

  • J'ai un formulaire avec une liste déroulante, mais je n'arrive pas à insérer mon choix dans la BDD.

  • Je souhaite récupérer l'id de la table utilisateurs et le mettre dans la table cours, pour savoir qui a réservé tel cours ( pour ne pas qu'un utilisateur s'inscrive plusieurs fois à un même cours)

Mon code :
https://pastebin.com/PyGYLzRH

Merci d'avance pour vos réponses

9 réponses


Bonsoir, as-tu teamviewer pour que je susi regarder ça de plus prêt.

Bonjour,

Il faut que tu revois comment on crée une liste déroulante en html car l'option n'a pas de "name" mais "value"
Ce qui te permettra de récupérer la valeur sélectionnée de cette liste par un $POST['cours']

Merci de vos réponses.

J'ai modifié mon code :

Mon principal problème est de mettre id de la table utilisateurs dans le champs id_user de la table cours

<?php 
session_start(); ?>

<?php 

if(isset($_POST['inscription'])) 
{
    if(empty($_POST['pseudo'])) {
        $errors ['pseudo'] = 'Veuillez indiquez votre pseudo';
    }
    if(empty($errors)) {
         try
        {
           $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
        }
        catch (Exception $e)
        {
            die('Erreur : ' . $e->getMessage());
        }
        $liste_cours = $_POST['cours'];
        $req = $bdd->prepare('INSERT INTO cours (cours, id_user, date) VALUES(:cours, NOW())');
                            $req->execute(array(
                                'cours' => $liste_cours,
                                'id_user' => ,
                                ));

        echo 'Vous êtes inscrit au cours '; 

    } 
    else foreach($errors as $erreur) {
                 $erreur;
    }
}
?>
 <?php 

    if(empty ($errors))
    {
        $nomclass = "alert alert-dismissible alert-info";
        $message = "Pas d'erreur";
    } 
    else 
    {
        $nomclass = "alert alert-dismissible alert-danger";
        $message = $erreur;
    }

    ?>

<!-- Fin PHP -->

<!DOCTYPE html>
<html>

<head>

    <meta charset="utf-8" />
    <link rel="stylesheet" href="style.css" />

    <title>Inscription aux cours</title>
</head>

<body>

    <?php if(isset($_SESSION['pseudo'])){ ?>
    <h1>Inscription aux cours</h1>

    <form method="post" class="form-horizontal">
        <fieldset>

            <div class="form-group">
                <label class="col-lg-2 control-label">Pseudo</label>
                <div class="col-lg-10">
                    <input type="text" class="form-control" placeholder="Pseudo" name="pseudo" value="<?php  echo $_SESSION['pseudo']; ?>">
                </div>
            </div>

            <div class="form-group">
                <label for="select" class="col-lg-2 control-label">Cours désirés</label>
                <div class="col-lg-10">
                    <select class="form-control" id="select" data-cip-id="cIPJQ342845642" name="cours">
                        <option value="entree">Préparez des entrées succulantes</option>
                        <option value="plat">Préparez des plats de résistances divins</option>
                        <option value="dessert">Préparez des desserts hors du commun</option>
                    </select>
                </div>

                    <div class="form-group">
                        <div class="col-lg-10 col-lg-offset-2">
                            <button type="submit" class="btn btn-primary" name="inscription">S'inscrire</button>
                        </div>
                    </div>

        </fieldset>
    </form>

    <div class="<?php echo $nomclass ?>">
        <?php echo $message ?> </div>

    <?php } else {?>
    <p> Veuillez vous connecter en cliquant <a href='connexion.php'>ici</a>.
        <?php 
}
             ?>
    </body>
</html>

Merci d'avance

Bonjour.
Tu as deux problèmes dans ton code.
Le premier est dans la requête SQL, soit :

$req = $bdd->prepare('INSERT INTO cours (cours, id_user, date) VALUES(:cours, NOW())');

Tu dis qu'il y a trois paramêtres qui seront insérés dans l'enregistrement mais tu ne définis que pour deux des paramêtres, soit, cours et date, mais tu ne définies pas id_user.
Ensuite dans la ligne suivante, soit :

$req->execute(array('cours' => $liste_cours, 'id_user' => ,));

Tu ne définis pas la valeur pour id_user.

Je suis tout à fait d'accord, c'est bien pour ça que je viens vous demadner de l'aide. Je ne sais pas quoi mettre, car je veut mettre l'id de la table utilisateur dans la table cours.

Tu pourrais par exemple nous montrer le code correspondant à la connexion d'utilisateur pour que nous puissions voir comment tu initialises la session de l'utilisateur afin que nous puissions correctement t'aider.
Étant donné que d'après le message d'erreur destiné à l'utilisateur pour le pseudo, il est clair que celui qui remplit le formulaire est lié à l'utilisateur qui sera enregistré dans la table.
Par conséquent, je ne comprends pas pourquoi tu fais un input pour le pseudo dans le formulaire, alors que tu l'as dans la session, via $_SESSION['pseudo'].

Voici mon code de connexion :

<?php session_start(); ?>
<!DOCTYPE html>
<html>

<head>

    <meta charset="utf-8" />
    <link rel="stylesheet" href="style.css" />

    <title>Connexion</title>
</head>

<body>

    <!-- PHP -->
    <?php 
   if(isset($_POST['connexion'])) 
   {
        if(empty($_POST['pseudo'])) 
        {
            $errors ['pseudo']  = "Veuillez remplir le champs pseudo ! ";    
        }
       if (empty($_POST['password']))
       {
           $errors ['password']  = "Veuillez indiquez votre mot de passe ! ";   
       } 
        if(empty($errors)) 
        {
          try
        {
           $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
        }
        catch (Exception $e)
        {
            die('Erreur : ' . $e->getMessage());
        }

          $reponse = $bdd->prepare("SELECT password FROM utilisateurs WHERE pseudo= :pseudo  ");
          $reponse->execute(array('pseudo' => $_POST['pseudo']));
          $donnees = $reponse->fetch();
            if(empty($donnees)){
            $problemes ['pseudo'] = "Le pseudo n'est pas bon ";
              }

            if(password_verify($_POST['password'], $donnees['password'])) 
            {
               $_SESSION['pseudo'] = $_POST['pseudo']; 
                echo 'Vous êtes connecté' ;
                    header ('location: inscriptions_cours.php');
            }
            else 
            {
               $problemes ['password'] = "Le mot de passe n'est pas correct";    
            }
            $reponse->closeCursor();

        }
       else 
        {
           foreach($errors as $erreur)
            {
               $erreur;
            }
        } 
       if (isset($problemes)) {
           foreach ($problemes as $probleme) {
               $probleme;
           }
       }
   }

    ?>

   <?php 

    if(empty ($errors))
    {
        $nomclass = "alert alert-dismissible alert-info";
        $message = "Pas d'erreur";
    } 
    else 
    {
        $nomclass = "alert alert-dismissible alert-danger";
        $message = $erreur;
    }

    ?>
    <!-- Fin PHP  -->
    <h1>Connexion</h1>

    <form method="post" class="form-horizontal">
        <fieldset>

            <div class="form-group">
                <label class="col-lg-2 control-label">Pseudo</label>
                <div class="col-lg-10">
                    <input type="text" class="form-control" placeholder="Pseudo" name="pseudo" value="<?php if(isset($_POST['pseudo'])) { echo $_POST['pseudo'];} ?>" >
                </div>
            </div>

            <div class="form-group">
                <label for="inputPassword" class="col-lg-2 control-label">Mot de passe</label>
                <div class="col-lg-10">
                    <input type="password" class="form-control" id="inputPassword" name="password" placeholder="Mot de passe" data-cip-id="inputPassword">
                </div>
            </div>

            <div class="form-group">
                <div class="col-lg-10 col-lg-offset-2">
                    <button type="submit" class="btn btn-primary" name="connexion">Connexion</button>
                </div>
            </div>

        </fieldset>
    </form>
    <p> Vous pouvez vous déconnecter en cliquant <a href= 'deconnexion.php'><button type="submit" class="btn btn-primary" name="déconnexion">Déconnexion</button></a>

    <div class="<?php echo $nomclass ?>"> <?php echo $message ?> </div>

    <?php if(isset($_SESSION['pseudo'])){ ?>
    <h1> Bienvenu dans votre espace personnel <?php if(isset($_POST['pseudo'])) { echo htmlspecialchars($_POST['pseudo']) ; }?></h1>

    <?php } 

    ?>
</body>

</html>

Lors de la confirmation de la connexion, tu ne définis à aucun moment les données de l'utilisateur dans la session, donc au lieu de ne récupérer que password dans la table utilisateurs, récupéres toutes les données que tu pourrais avoir besoin plus tard, comme par exemple l'id, le pseudo, et son email, ça t'évitera de faires des requêtes SQL par la suite dans cette table, juste pour récupérer ces infos là, donc par exemple :

$reponse = $bdd->prepare("SELECT id, pseudo, email, password FROM utilisateurs WHERE pseudo = :pseudo");
$reponse->execute(array('pseudo' => $_POST['pseudo']));
$user = $reponse->fetch();
// suite du code ...
if (password_verify($_POST['password'], $user['password']))
{
    unset($user['password']);
    $_SESSION['auth'] = $user;
    $_SESSION['flash'] = 'Vous êtes connecté';
    header ('Location: inscriptions_cours.php');
    die();
}
// Suite du code ....

De cette maniière par exemple dans la page qui nous intéresse, tu as simplement à récupérer l'id dans la session, soit :

$req = $bdd->prepare('INSERT INTO cours (cours, id_user, date) VALUES(:cours, :id_user, NOW())');
$req->execute(array('cours' => $liste_cours, 'id_user' => $_SESSION['user']['id']));

Par contre, étant donné que tu ne veux pas que l'utilisateur puisse s'inscrire plusieurs fois à un même cours, tu devrais d'abord vérifier s'il n'existe pas déja un enregistrement pour l'utilisateur et le cours choisi avant de faire l'insertion en base de données.

Bonjour,

Je mets le code avec lequel ça fonctionne à 90 %. J'ai toujours un problème : si un utilisateur s'inscire à un cours, aucun autre utilisateur ne peut s'inscire à ce cours. Évidemment, ce n'est pas ce que je souhaite. Je pense que je dois rajouter une condition lorsque je vérifie si le cours et déjà présent, comme id_user, mais je ne sais pas comment le mettre en place. Si vous avez des idées, je suis preneur. Merci d'avance.

<?php
session_start();
include "database.php";

$database = new Database();
$bdd = $database->getdb();

?>
<?php

if (isset($_POST['inscription'])) {
    if (empty($_POST['pseudo'])) {
        $errors['pseudo'] = 'Veuillez indiquez votre pseudo';

    }

    $reponse = $bdd->query('SELECT id_user, cours FROM cours WHERE  cours = "' . $_POST['cours'] . '" ');

    $cours = $reponse->fetch();

    $reponse -> closeCursor();

    if (strtolower($_POST['cours']) == strtolower($cours['cours']) ) 
    {
        $errors['cours'] = "Vous êtes déjà inscrit à ce cours";
    }

    if (empty($errors)) {

        $reponse = $bdd->prepare("SELECT id FROM utilisateurs WHERE pseudo= :pseudo  ");
        $reponse->execute(array(
            'pseudo' => $_POST['pseudo']
        ));
        $donnees     = $reponse->fetch();
        $id          = $donnees['id'];
        $liste_cours = $_POST['cours'];
        $req         = $bdd->prepare('INSERT INTO cours (id_user, cours, date) VALUES(:id_user, :cours, NOW())');
        $req->execute(array(
            'cours' => $liste_cours,
            'id_user' => $id
        ));

        echo 'Vous êtes inscrit au cours ';

    } else
        foreach ($errors as $erreur) {
            $erreur;
        }

}

else {
    $utilisateur = $bdd->prepare('SELECT *  FROM utilisateurs INNER JOIN cours ON utilisateurs.id=cours.id_user WHERE utilisateurs.id= :id');
    $utilisateur->execute(array(
        'id' => $_SESSION['id_user'] 
    ));
    $donnees = $utilisateur->fetchAll(PDO::FETCH_OBJ);

    foreach ($donnees as $donnee) {
        $listedescours = $donnee->cours;

    }
}

?>
<?php

if (empty($errors)) {
    $nomclass = "alert alert-dismissible alert-info";
    $message  = "Pas d'erreur";
} else {
    $nomclass = "alert alert-dismissible alert-danger";
    $message  = $erreur;
}

?>

<!-- Fin PHP -->

<!DOCTYPE html>
<html>

    <head>

        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />

        <title>Inscription aux cours</title>
    </head>

    <body>

        <?php
        if (isset($_SESSION['pseudo'])) {
        ?>
        <h1>Inscription aux cours</h1>

        <form method="post" class="form-horizontal">
            <fieldset>

                <div class="form-group">
                    <label class="col-lg-2 control-label">Pseudo</label>
                    <div class="col-lg-10">
                        <input type="text" class="form-control" placeholder="Pseudo" name="pseudo" value="<?php
            echo $_SESSION['pseudo'];
                                                                                                          ?>">
                    </div>
                </div>

                <div class="form-group">
                    <label for="select" class="col-lg-2 control-label">Cours désirés</label>
                    <div class="col-lg-10">
                        <select class="form-control" id="select" data-cip-id="cIPJQ342845642" name="cours">
                            <option value="entree">Préparez des entrées succulantes</option>
                            <option value="plat">Préparez des plats de résistances divins</option>
                            <option value="dessert">Préparez des desserts hors du commun</option>
                        </select>
                    </div>

                    <div class="form-group">
                        <div class="col-lg-10 col-lg-offset-2">
                            <button type="submit" class="btn btn-primary" name="inscription">S'inscrire</button>
                        </div>
                    </div>
                </div>
            </fieldset>
        </form>

        <p> Vous pouvez vous déconnecter en cliquant <a href= 'deconnexion.php'><button type="submit" class="btn btn-primary" name="déconnexion">Déconnexion</button></a>

        <div class="<?php echo $nomclass;?>">
            <?php echo $message; ?> </div>

        <?php
            if (isset($donnee)) {
        ?>
        <div class="alert alert-dismissible alert-success">
            <p>Vous êtes inscrit au cours : <?php
                foreach ($donnees as $donnee) {
                    $liste_cours = $donnee->cours;
                    echo "<li>$liste_cours </li>";
                }
                ?></p>
        </div>
        <?php
            } else {?>

        <div class="alert alert-dismissible alert-success">
            <p>Vous n'êtes inscrit à aucun cours. </p>
            <?php    }
            ?>
            <?php
        } else {
            ?>
            <p> Veuillez vous connecter en cliquant <a href='connexion.php'>ici</a>.</p></div>
        <?php
        }
        ?>

    </body>

</html>