Enregistrer des données sous certaine condition

Par DarkSnake, il y a 10 ans


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

Υαλεντιν, il y a 10 ans

Salut,

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

intelligid, il y a 10 ans

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>"; }
ThibaultJ, il y a 10 ans

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>
DarkSnake, il y a 10 ans

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

Defy, il y a 10 ans

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

Gaspard, il y a 10 ans

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.

kwik, il y a 10 ans

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>
intelligid, il y a 10 ans

Kwik, utilise les elseif ;)

kwik, il y a 10 ans

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

DarkSnake, il y a 10 ans

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

DarkSnake, il y a 10 ans

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é"?