Page 1 sur 1

Rendre au moins une checkbox obligatoire

Posté : 02 déc. 2021, 11:50
par miguel33
Bonjour, j'ai un code qui permet de générer un mot de passe mais j'aimerais que si l'utilisateur ne coche aucune case il ne puissent pas valider/générer son mdp
le code:
<html>
<head>
    <meta charset="utf-8" />
    <title>Générateur MDP</title>
    <link rel="stylesheet" type="text/css" href="css/projet.css">

</head>

<body>  
    <!--Menu de navigation -->
<?php include 'menunavigation.php'; ?>

<form method="post">
    <p>
    <label>Nombre de caractère</label> : <input type="number" name="Nombre" placeholder="Entrez un nombre" required/>
    </p>
    <p>
            Cochez les caractère que vous voulez dans votre mot de passe :<br />
            
            <input type="checkbox" name="minuscules" /> <label for="minuscules">minuscules</label> <br />
            <input type="checkbox" name="majuscules" /> <label for="majuscules">majuscules</label> <br />
            <input type="checkbox" name="caractere_speciaux" /> <label for="caractère spéciaux">caractère spéciaux</label><br />
            <input type="checkbox" name="chiffre" /> <label for="chiffre">chiffre</label>
        </p>
     

    <br>

    <input type="submit" name="formsend" id="formsend" value="Générer votre mot de passe">
    <br>
    
</form>


<?php
$min = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$majuscules = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
$caractere_speciaux = array('²','&','é','#','(','-','è','_','ç','à',')','=','+','°','@','^','[','~','*','$','¤','^','ù','%','!',';',',','.','/',':','§');
$chiffre = array('1','2','3','4','5','6','7','8','9','0');
$jeu_car = array();
if(isset($_POST['minuscules'])){
    $jeu_car = array_merge($jeu_car, $min);
}
if(isset($_POST['majuscules'])){
    $jeu_car = array_merge($jeu_car, $majuscules);
}
if(isset($_POST['caractere_speciaux'])){
    $jeu_car = array_merge($jeu_car, $caractere_speciaux);
}
if(isset($_POST['chiffre'])){
    $jeu_car = array_merge($jeu_car, $chiffre);
}

$Nombre = isset($_POST["Nombre"]) ? $_POST['Nombre'] : NULL;

if(isset($_POST['formsend']))
    echo "Votre mot de passe est : " ;
    for($i = 1; $i <= $Nombre; $i++) {
        echo $jeu_car[array_rand($jeu_car,1)];
}
?>
</body>    

</html>

Re: Rendre au moins une checkbox obligatoire

Posté : 02 déc. 2021, 12:54
par @rthur
Quel est le problème ?
Qu'as-tu essayé et qui ne marche pas ?

Re: Rendre au moins une checkbox obligatoire

Posté : 03 déc. 2021, 00:55
par two3d
Au passage, les label s'utilise avec une correspondance (l'attribut id dans l'input, textarea,...) ton label ne sert actuellement à rien ;)

Je suppose que tu souhaite que le formulaire ne soit pas envoyé si aucune case est cochée, te faudra passer par du javascript.

Le preventDefault() t'aidera dans ta recherche.

Re: Rendre au moins une checkbox obligatoire

Posté : 03 déc. 2021, 13:50
par miguel33
J'aimerais le réalisé sans utilisé du java si possible est ce possible avec une boucle php?

Re: Rendre au moins une checkbox obligatoire

Posté : 03 déc. 2021, 14:28
par two3d
java != javascript
Oui, par contre PHP c'est un traitement serveur, pas client, donc obligé de recharger la page (de cliquer sur le bouton et de voir les résultats).

Pour vérifier si un checkbox est coché en PHP tu peux soit faire comme tu as fait: isset() puis voir si le contenu du checkbox == "on" (c'est quand il est "coché")

Re: Rendre au moins une checkbox obligatoire

Posté : 03 déc. 2021, 15:38
par miguel33
java != javascript
Oui, par contre PHP c'est un traitement serveur, pas client, donc obligé de recharger la page (de cliquer sur le bouton et de voir les résultats).

Pour vérifier si un checkbox est coché en PHP tu peux soit faire comme tu as fait: isset() puis voir si le contenu du checkbox == "on" (c'est quand il est "coché")
Sans utiliser du javascript alors!
En effet je souhaite utilise que du Php, j'avais pensé a utilisé une bouche if aucune case est coché renvoyé le formulaire un truc du style mais est ce faisable?
et comment s'y prendre j'ai eu du mal a utilisé le ISSET déjà

Re: Rendre au moins une checkbox obligatoire

Posté : 03 déc. 2021, 16:22
par two3d
Une boucle non, simplement une condition "si les trois sont vides" => tu ne valide pas

Avec if(empty($_POST['checkbox1']) && empty($_POST['checkbox2'] && etc)) { alors non} { sinon oui }

Re: Rendre au moins une checkbox obligatoire

Posté : 09 déc. 2021, 09:15
par miguel33
Une boucle non, simplement une condition "si les trois sont vides" => tu ne valide pas

Avec if(empty($_POST['checkbox1']) && empty($_POST['checkbox2'] && etc)) { alors non} { sinon oui }
Comment je peux faire pour le alors non ne valide pas le formulaire ? De le faire revenir au début?

Re: Rendre au moins une checkbox obligatoire

Posté : 09 déc. 2021, 10:22
par miguel33
if(!empty($_POST['formsend'])) // SI FORMULAIRE ENVOYE
{
    if (empty($_POST['minuscules'])) // SI AUCUNE CASE COCHE
    {
        if (empty($_POST['majuscules'])) 
            {
            if (empty($_POST['caractere_speciaux'])) 
                {
                 if (empty($_POST['chiffre'])) 
                    {
                        echo 'Veuillez cocher au moins une activité';
                        }
                    }
                }
            }
        }
    else
        echo "Votre mot de passe est : " ;
        for($i = 1; $i <= $Nombre; $i++) {
            echo $jeu_car[array_rand($jeu_car,1)];
        }
j'ai ça mais maintenant le problème est que j'ai ce message d'erreur :
Warning: array_rand(): Second argument has to be between 1 and the number of elements in the array in D:\...generateur.php on line 76

Notice: Undefined index: in D:\...generateur.php on line 76
et cet erreur ce repete autant de fois que la valeur $nombre

Re: Rendre au moins une checkbox obligatoire

Posté : 09 déc. 2021, 10:37
par miguel33
J'ai trouvé comment faire
if(isset($_POST['formsend']))
    if(!empty($jeu_car)){
        echo "Votre mot de passe est : " ;
        for($i = 1; $i <= $Nombre; $i++) {
            echo $jeu_car[array_rand($jeu_car,1)];
        }
    }
    else
        echo "Veuillez cocher au moins une case ! " ;
J'utilise !empty