Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Voilà pour créer un système de commentaire, j'aimerai que les données (pseudo et commentaire) sois enregistrés si certaines conditions sont rempli (je pense que ce sera pus simple pour vous de visualiser avec le code donc je vous retrouve en dessous:

<!doctype html>
<html lang="fr">
 <head>
  <meta charset="utf-8">
  <title>DarkBuild10 - Commentaire</title>
  <link rel="stylesheet" href="style.css">
 </head>

  <body>
    <div class="bloc_page">
     <?php include("menus.php"); ?>
     <?php include("entete.php"); ?>
     <section id="main">
     <section id="contenu_principal">
        <article>
            <h2>Commentaire</h2>
        <h2>Laisser un commentaire</h2>

        <form method="post" action="">
    <p>
        <label for="pseudo">Votre pseudo :</label>
        <input type="text" name="pseudo" id="pseudo" placeholder="Ex : DarkBuild10" size="30" maxlength="30" /><br />
        <br />
        <label for="commentaire">Votre commentaire:</label><br />
       <textarea name="commentaire" id="commentaire" placeholder="Tappez votre commentaire ici" rows="10" cols="50" maxlength="255"></textarea>
       <br /><input type="submit" value="Envoyer" ></code>
    </p>
</form>
<?php 
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=site;charset=utf8', 'root', '');
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}

if(isset($_POST['pseudo']) AND empty($_POST['pseudo']))
{
  echo"<div id='erreur'>veuillez entrer un pseudo</div>";
}

if(isset($_POST['pseudo']) AND $_POST['pseudo']=='DarkBuild10')
{
  echo"<div id='erreur'>vous ne pouvez pas utiliser ce pseudo</div>";
}

if(isset($_POST['commentaire']) AND empty($_POST['commentaire']))
{
  echo"<div id='erreur'>veuillez entrer un commentaire</div>";
}

elseif(isset($_POST['pseudo']) AND !empty($_POST['pseudo']) AND $_POST['pseudo']=!'DarkBuild10' AND isset($_POST['commentaire']) AND !empty($_POST['commentaire']))

{

$req = $bdd->prepare('INSERT INTO comment(pseudo, commentaire) VALUES(:pseudo, :commentaire)');
$req->execute(array(
    'pseudo' => $_POST['pseudo'],
    'commentaire' => $_POST['commentaire'],
    ));
}

?>

     </section><!-- Fin de #contenu_principal-->
     <div id="menu_cote_conteneur">
<?php include("menu_cote.php"); ?>
</section><!-- fin de #main -->
   <?php include("pied_de_page.php"); ?>
    </div><!--Fin de #bloc_page -->
   </body>
 </html> ```

Ce que je veux

comme je l'ai expliquer plus haut, je cherche à ce que les donnés soient enregistré si et SEUELEMNT SI les condition du elseif sont remplie.

Ce que j'obtiens

Malheureusement, les donnés ne s'enregistre pas avec ce que j'ai fait! :(

Je précise que je suis débutant, donc soyez le plus simple possible svp! :p

en espérant avoir de nombreuse réponse,

Merci d'avance et à bientôt.

ps: désolé pour mon orthographe ^^

11 réponses


Gaspard
Réponse acceptée

Hello !

Defy Les AND et les && sont presque identiques, à une différence près que les && passent en priorité sur le AND.

Tiens DarkBuild10, essaie ça.


try
{
    $bdd = new PDO('mysql:host=localhost;dbname=site;charset=utf8', 'root', '');
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}

if(isset($_POST['pseudo']) AND empty($_POST['pseudo'])) {

  echo "<div id='erreur'>veuillez entrer un pseudo</div>";
}
else {

    if($_POST['pseudo'] == 'DarkBuild10') {

        echo "<div id='erreur'>vous ne pouvez pas utiliser ce pseudo</div>";
    }
    else {

        if(isset($_POST['commentaire']) AND empty($_POST['commentaire'])) {

            echo "<div id='erreur'>veuillez entrer un commentaire</div>";
        }
        else {

            $req = $bdd->prepare('INSERT INTO comment(pseudo, commentaire) VALUES(:pseudo, :commentaire)');
            $req->execute(array(
                'pseudo' => $_POST['pseudo'],
                'commentaire' => $_POST['commentaire'],
    ));
        }
    }
}

J'ai essayé de bosser avec ta logique, mais elle est facilement détournable.
Si tu m'autorise, j'aimerais bien revoir le code à ma façon, parce que là, la logique n'y est pas.

Bonne journée,
Gaspard.

Salut,

Démarre ton code PHP avant tout code HTML déjà, ou sur une autre page. Ce sera plus claire pour toi.

Penses à faire un tableau d'erreur:

$errors = []
if(isset($_POST['pseudo']) AND empty($_POST['pseudo']))
{
  $errors[] = "veuillez entrer un pseudo";
}
if(isset($_POST['pseudo']) AND $_POST['pseudo']=='DarkBuild10')
{
  $errors[] = "vous ne pouvez pas utiliser ce pseudo";
}
if(isset($_POST['commentaire']) AND empty($_POST['commentaire']))
{
  $errors[] = "veuillez entrer un commentaire";
}

if(is_empty($errors){
    // là tu fais ton enregistrement ;)
}else{
    foreach($errors as $error)
        echo"<div id='erreur'>$error</div>";
}

Salut,
tu peut aussi ajouter required dans tout t'es champs simple rapide et efficace !
ce qui te donne :

 <form method="post" action="">
    <p>
        <label for="pseudo">Votre pseudo :</label>
        <input required type="text" name="pseudo" id="pseudo" placeholder="Ex : DarkBuild10" size="30" maxlength="30" /><br />
        <br />
        <label for="commentaire">Votre commentaire:</label><br />
       <textarea required name="commentaire" id="commentaire" placeholder="Tappez votre commentaire ici" rows="10" cols="50" maxlength="255"></textarea>
       <br /><input type="submit" value="Envoyer" ></code>
    </p>
</form>

merci beaucoup pour ces réponses mais du coup ça ne règle pas mon problème... :-/

je ne suis pas spé PHP mais essaie de remplacer tes AND par &&

Je débute moi meme dans php et je penses que tes conditions ne sont pas très logiques.

Comme je ne sais pas très bien expliqué j'ai préféré te montré comment j'aurais fais avec des commentaires un peu partout, je n'ai pas testé il est possible qu'il est des erreurs (dure de vérifier sur tablette) mais ça sert d'exemple ;)

<?php 

try {

    $bdd = new PDO('mysql:host=localhost;dbname=site;charset=utf8', 'root', '');

} catch (PDOException $e) {

    exit('Erreur :' . $e->getMessage());

}

// Si le formulaire est envoyé
if (!empty($_POST)) {

    // Si les champs requis ne sont pas vident 
    // Dans ton cas... Les champs pseudo et commentaire 
    if (!empty($_POST['pseudo']) && !empty($_POST['commentaire'])) {

        // On crée le tableau $errors qui contiendra nos erreurs 
        $errors = array();

        // ---- DEBUT TRAITEMENT DES ERREURS ----

        // Si le pseudo fait moins de 3 caractères ou plus de 30 caractères
        if (mb_strlen($_POST['pseudo']) < 3 || mb_strlen($_POST['pseudo']) > 30) {

            $errors[] = "Le pseudo doit contenir entre 3 et 30 caractères.";

        }

        // Si le pseudo saisis est : DarkBuild10
        if ($_POST['pseudo'] == 'DarkBuild10') {

            $errors[] = "Vous ne pouvez pas utiliser ce pseudo.";

        }

        // Si le commentaire fait moins de 3 caractères ou plus de 255 caractères
        if (mb_strlen($_POST['commentaire']) < 3 || mb_strlen($_POST['commentaire']) > 255) {

            $errors[] = "Le commentaire doit contenir entre 3 et 255 caractères.";

        }

        // ---- FIN TRAITEMENT DES ERREURS ----

        // Si le nombre d'erreurs dans le tableau $errors est égale à zéro
        if (count($errors) == 0) {

            // Tout est OK on peut ajouter les infos dans la base de données
            $req = $bdd->prepare('INSERT INTO comment(pseudo, commentaire) VALUES(:pseudo, :commentaire)');
            $req->execute(array(
                ':pseudo' => $_POST['pseudo'], 
                ':commentaire' => $_POST['commentaire']
            ));

            // Ensuite tu peux rediriger l'utilisateur vers une page pour par exemple 
            // empeché le renvoie de formulaire via F5
            header('Location: commentaire.php');
        }

    } else {

        // Le champ pseudo est vide
        if (empty($_POST['pseudo'])) {

            $errors[] = "Le champ pseudo doit être renseigné.";

        }

        // Le champ commentaire est vide 
        if (empty($_POST['commentaire'])) {

            $errors[] = "Le champ commentaire doit être renseigné.";
        }
    }
}
?>
<!DOCTYPE html>
<html lang="fr">    
    <head>
        <meta charset="utf-8">
        <title>DarkBuild10 - Commentaire</title>
        <link rel="stylesheet" href="style.css">
    </head> 
    <body>

        <div class="bloc_page">

            <section id="main">

                <section id="contenu_principal">

                    <article>

                        <h2>Commentaire</h2>

                        <h2>Laisser un commentaire</h2>

                        <!-- Affichage des erreurs trouvées -->
                        <?php if (isset($errors) && count($errors) != 0): ?>
                            <?php foreach ($errors as $error): ?>
                                <div class="erreur">
                                    <?php echo $error; ?>
                                </div>                                                          
                            <?php endforeach; ?>                            
                        <?php endif; ?>

                        <form method="post">

                            <p>
                                <label for="pseudo">Votre pseudo :</label>
                                <input type="text" name="pseudo" id="pseudo" placeholder="Ex: DarkBuild10" size="30" maxlenght="30" required>
                                <br>
                                <label for="commentaire">Votre commentaire:</label> <br>
                                <textarea name="commentaire" id="commentaire" cols="50" rows="10" placeholder="Tappez votre commentaire ici" required></textarea>
                                <br>
                                <button type="submit">Envoyer</button>
                            </p>

                        </form>

                    </article>

                </section>

            </section>

        </div>

    </body>

</html>

Kwik, utilise les elseif ;)

Intelligid, je galères moins comme ça ;)

Merci beaucoup pour vos réponses! je vais de suite toute les essayer ...

et Gaspard bien sûr mais étant donné que je suis débutant et que je ne connais pas grand chose en php, ce serai sympa si tu mettais des commentaires un peu partout l'histoire que je m'y retrouve! ^^
Mais ton code marche exactement comme je le voudrait mais seul problème, des message d'erreur s'affiche sur ma page(là ou li y a le formulaire)mais je les ai "cachées"...
Et pourrais-tu m'indiquer où je peux placer un texte du type:"votre commentaire à bien été enregistré"?