[RESOLU] Rendre au moins une checkbox obligatoire

Petit nouveau ! | 6 Messages

02 déc. 2021, 11:50

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>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 déc. 2021, 12:54

Quel est le problème ?
Qu'as-tu essayé et qui ne marche pas ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1564 Messages

03 déc. 2021, 00:55

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.

Petit nouveau ! | 6 Messages

03 déc. 2021, 13:50

J'aimerais le réalisé sans utilisé du java si possible est ce possible avec une boucle php?

Avatar du membre
Mammouth du PHP | 1564 Messages

03 déc. 2021, 14:28

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

Petit nouveau ! | 6 Messages

03 déc. 2021, 15:38

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à

Avatar du membre
Mammouth du PHP | 1564 Messages

03 déc. 2021, 16:22

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 }

Petit nouveau ! | 6 Messages

09 déc. 2021, 09:15

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?

Petit nouveau ! | 6 Messages

09 déc. 2021, 10:22

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

Petit nouveau ! | 6 Messages

09 déc. 2021, 10:37

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