Bonjour,

j'ai écrit le code ci dessous:

index.php :

<?php
require_once 'class/Message.php';
$errors = null;
if (isset($_POST['username'], $_POST['message'])) {
    $message = new Message($_POST['username'], $_POST['message']);
    if ($message->isValid()) {

    } else {
        $errors = $message->getErrors();
    }
}
$title = "Livre d'or";
require "elements/header.php";
?>

    <div class="container">
        <h1>Livre d'or</h1>
        <form action="" method="post">
            <?php if (!empty($errors)): ?>
            <div class="alert alert-danger">
                Formulaire invalide
            </div>
            <?php endif ?>

            <form action="" method="post" ></form>
            <div class="form-group">
                <input type="text" name="username" placeholder="Votre pseudo" class="form-control <?= isset($errors['username']) ? 'is-invalid' : ''  ?>">
                <?php if(isset($errors['username'])): ?>
                    <div class="invalid-feedback">
                        <?= $errors['username'] ?>
                    </div>
                <?php endif ?>
            </div>
            <div class="form-group">
                <textarea name="message" placeholder="Votre pseudo" class="form-control <?= isset($errors['message']) ? 'is-invalid' : ''  ?>"></textarea>
                <?php if(isset($errors['message'])): ?>
                    <div class="invalid-feedback">
                        <?= $errors['username'] ?>
                    </div>
                <?php endif ?>
            </div>
            <button class="btn btn-primary">Envoyer</button>
        </form>    
    </div>

<?php require "elements/footer.php"; ?>

mon header.php:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><?= $title ?? 'Mon site' ?></title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body>

mon footer.php:

</body>
</html>

mon Message.php:

<?php
class Message {

    const LIMIT_USERNAME = 3;
    const LIMIT_MESSAGE = 10;
    private $username;
    private $message;

    public function __construct(string $username, string $message, DateTime $date = null)
    {
        $this->username = $username;
        $this->message = $message;
    }

    public function isValid (): bool
    {
        return empty($this->getErrors());
    }

    public function getErrors(): array
    {
        $errors = [];
        if (strlen($this->username) < self::LIMIT_USERNAME) {
            $errors['username'] = 'Votre pseudo est trop court';    
        }
        if (strlen($this->message) < self::LIMIT_MESSAGE) {
            $errors['message'] = 'Votre message est trop court';
        }
        return $errors;
    }

}

quand je vais ensuite sur http://localhost:8000/ je rentre un pseudo et un message puis j'appuie sur le bouton Envoyer mais rien ne se passe.
Si quelqun a la solution :)

9 réponses


Konix
Auteur
Réponse acceptée

Bon ducoup j'ai lu mon code une cinquantaine de fois et j'ai trouver l'erreur.
apres mon <form action="" method="post" > il y avais un </form> ducoup le bouton n'était pas pris en compte.

bonjour

essayer d'ajouter type="submit" a votre bouton
il y a aussi un autre <form> dans votre formulaire principal peut etre un oubli

Konix
Auteur

j'ai essayé <button type="submit" class="btn btn-primary">Envoyer</button> et j'ai enlevé le <form>qu'il y avais en trop (merci de l'avoir signalé) mais rien ne change, mon bouton ne fonctionne toujours pas

J'ai tester ton code et de mon coté tout fonctionne correctement j'ai bien le formulaire qui est soumis et la validation se fais bien. Je ne saurais t'aider plus

Bonsoir.
C'est normal, tu as deux formulaires l'un dans l'autre.
Supprimes le second et ça devrait mieux fonctionner.
Par contre, même si ce n'est que pour tester, met quelque chose dans la condition ou le formulaire est valide, de manière à avoir un retour.
Sinon penses à remplacer $errors['username'] par $errors['message'] en bas.
Montres nous ensuite ton code corrigé de manière à ce que nous ayons un code propre si ton soucis n'est toujours pas réglé.
Tu m'expliquera au passage l'intérêt du 3ème argument du constructeur de la classe Message si tu ne l'utilises même pas dans ta classe, même si tu ne prévois pas de l'utiliser pour l'instant, crée un propriété dans la classe et définis là dans le constructeur et tu utilisera la propriété lorsque tu en aura besoin.

Konix
Auteur

Sabrus,
sur quel éditeur as-tu tester mon code, et avec quel serveur web ?

Lartak,
je pense que le problème de viens pas de la car Sabrus arrive a tester mon code sans problème

Lartak,
je pense que le problème de viens pas de la car Sabrus arrive a tester mon code sans problème

Tu vois que c'était bien le double formulaire qui posait problème.

Konix
Auteur

Je pense qu'il a modifié le code sans s'en souvenir

Il a en effet du machinalement supprimé le second formulaire et ne pas t'en parler par la suite étant donné que tu avais dit dans ta réponse précédente que tu l'avais supprimé mais que ça n'avais rien changé, il devait penser que ton problème venait d'ailleurs.
C'est pour ça que nous vous demandons souvent de nous montrer la partie du code que vous corrigez par la suite de nos indications, car ça prouve bien que tu n'avais pas correctement supprimé le second formulaire et nous aurions pu le voir si tu avais montré ton correctif.