[RESOLU] Contrôle de saisie à l'aide de la fct empty

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Contrôle de saisie à l'aide de la fct empty

Re: Contrôle de saisie à l'aide de la fct empty

par Dsynx » 14 juin 2022, 14:03

ok alors j'ai rien dit ;)

Re: Contrôle de saisie à l'aide de la fct empty

par davlongin » 14 juin 2022, 13:20

empty($var) retourne true si $var est vide

donc ta condition devrais plutot être if(empty($_POST[$value]) || $_POST[$value] != '0'){

return n'a aucun sens si tu n'est pas à l'interieur d'une fonction
on peut utilisé "exotiquement" le return comme dans son code mais ce n'est pas convenable et conventionnel ni conseiller.
se caractère "exotique" est dans le cadre ou l'on include du code avec un return php prend en compte que c'est comme une function
voir l'exemple dans le manuel :
<?php
echo "b";
return;
?>
https://www.php.net/manual/fr/function.return.php

mais je le dé-conseil fortement PHP mute, autant avant dans les début de php on pouvait faire des truc chelou autant maintenant il y a un cadrage et des conventions à respecter c'est un langage qui veut tendre de toutes ces forces vers un langage normalisé qui parle comme ces petit copain C../java/etc. donc le return comme ici on oubli faudra faire différemment comme le dit Spols on utilise le "return" que dans une fonction.

même si on a le droit de le faire, l'idée c'est pas de faire ce qui est possible mais de produire ce qui va se comprendre et pouvoir se maintenir intuitivement ou en transparence avec le nécessaire de commentaire.
donc si à un moment inattendu tu balance du return :) au milieu de ton code oui :mrgreen: ça va choqué et même voir il est fort possible tu perds en performance, en lisibilité et tu risque fortement de faire par la suite un bricolage pour allé avec se bricolage et au final tu vas avoir une usine à gaz que personne voudra lire et comprendre. sans oublier que tu as se code perdu dans les méandres de balise style BB j'ai remarquer un [ HTML ] mais là en terme de lisibilité c'est foutu :tir2: .
si tu sent la moindre sensation bizarre dans la lecture d'un code je sais une difficulté à comprendre; ou c'est une approche que tu ne comprend pas comme le fonctionnel mais bon bonne nouvel avec des cours , quelque test et le manuel tu fini par comprendre. ou c'est du code dégueulasse perdu dans un autre language ou plusieurs, genre HTML, Css, Js quand tout cela ce mélange
c'est une vrai bouse indescriptible et bien il y a un problème. j'appel cela les files qui se touche normale enfin moi
jamais tu vas voir dans mon code php du HTML , du CSS ou du JS et jamais touts réuni dans la même page. sauf! si c'est une page générer par un module mais cette page générer jamais je vais travailler dans ce code elle est générer pour être envoyer en cache, lu par l'utilisateur qui l'appel ou détruire par une page qui va la remplacer. voila mes conseils.


:D
Justement, c'était une consigne de traiter tout sur la même page.
Sinon j'aurai séparer les deux (PHP, HTML) en deux pages ne t'inquiètes pas.

Re: Contrôle de saisie à l'aide de la fct empty

par davlongin » 14 juin 2022, 13:20

empty($var) retourne true si $var est vide

donc ta condition devrais plutot être if(empty($_POST[$value]) || $_POST[$value] != '0'){

return n'a aucun sens si tu n'est pas à l'interieur d'une fonction
on peut utilisé "exotiquement" le return comme dans son code mais ce n'est pas convenable et conventionnel ni conseiller.
se caractère "exotique" est dans le cadre ou l'on include du code avec un return php prend en compte que c'est comme une function
voir l'exemple dans le manuel :
<?php
echo "b";
return;
?>
https://www.php.net/manual/fr/function.return.php

mais je le dé-conseil fortement PHP mute, autant avant dans les début de php on pouvait faire des truc chelou autant maintenant il y a un cadrage et des conventions à respecter c'est un langage qui veut tendre de toutes ces forces vers un langage normalisé qui parle comme ces petit copain C../java/etc. donc le return comme ici on oubli faudra faire différemment comme le dit Spols on utilise le "return" que dans une fonction.

même si on a le droit de le faire, l'idée c'est pas de faire ce qui est possible mais de produire ce qui va se comprendre et pouvoir se maintenir intuitivement ou en transparence avec le nécessaire de commentaire.
donc si à un moment inattendu tu balance du return :) au milieu de ton code oui :mrgreen: ça va choqué et même voir il est fort possible tu perds en performance, en lisibilité et tu risque fortement de faire par la suite un bricolage pour allé avec se bricolage et au final tu vas avoir une usine à gaz que personne voudra lire et comprendre. sans oublier que tu as se code perdu dans les méandres de balise style BB j'ai remarquer un [ HTML ] mais là en terme de lisibilité c'est foutu :tir2: .
si tu sent la moindre sensation bizarre dans la lecture d'un code je sais une difficulté à comprendre; ou c'est une approche que tu ne comprend pas comme le fonctionnel mais bon bonne nouvel avec des cours , quelque test et le manuel tu fini par comprendre. ou c'est du code dégueulasse perdu dans un autre language ou plusieurs, genre HTML, Css, Js quand tout cela ce mélange
c'est une vrai bouse indescriptible et bien il y a un problème. j'appel cela les files qui se touche normale enfin moi
jamais tu vas voir dans mon code php du HTML , du CSS ou du JS et jamais touts réuni dans la même page. sauf! si c'est une page générer par un module mais cette page générer jamais je vais travailler dans ce code elle est générer pour être envoyer en cache, lu par l'utilisateur qui l'appel ou détruire par une page qui va la remplacer. voila mes conseils.


:D
Justement, c'était une consigne de traiter tout sur la même page.
Sinon j'aurai séparer les deux (PHP, HTML) en deux pages ne t'inquiètes pas.

Re: Contrôle de saisie à l'aide de la fct empty

par davlongin » 14 juin 2022, 13:16

D'accord.

Encore merci pour vos conseils et vos aides.

J'ai pu réussir ce que je voulais faire.

Bonne journée !

Re: Contrôle de saisie à l'aide de la fct empty

par Dsynx » 14 juin 2022, 10:32

On m'affiche cette erreur :
Warning: Array to string conversion in C:\xampp\htdocs\stage\villeReconduire.php on line 80.

Il y a un rapport que je ne puisse pas afficher le tableau d'erreurs juste avec un "echo" ? Pourtant c'est juste une var que l'on peut afficher normalement.
<?php
$formValues = array('anneeDefault','idVilles');
        $erreurs = array();
        foreach($formValues as $value){
            if(empty($_POST[$value]) || $_POST[$value] != '0'){ // si la valeur de $_POST est vide alors on l'ajoute aux erreurs
                $erreurs[] = $value;
            }
        }
        if(count($erreurs)){ //si le tableau d'erreur n'est pas vide on retourne les erreurs sinon "FALSE"
L.80 ->    echo $erreurs;
        }else{
            echo "false";
        }
?>
oui c'est un Array et quand tu fais echo tu lui dit affiche moi tu texte mais tu lui présente un tableau donc il connait pas. mais tu as le choix ou tu choisir un endroit du tableau une erreur à afficher genre à la case 0.
echo $erreurs[0];
soit tu veux tout afficher dans erreur et là tu doit prendre toute les valeurs et dire je les transforme en texte et je les accoles les une aux autre ou concatène et là il existe une fonction : implode mais je les concatène entre eux comment avec un espace, sans expace avec un point virgure , ou un point ? à toi de choisir le caractère pour les séparer voir le manuel
https://www.php.net/manual/fr/function.implode.php
moi j'ai choisi le point virgule
echo implode(';' , $erreurs);
évidement il y a une fonction opposé explode ou là c'est le contraire tu as du texte séparer par des points virgule et tu veux envoyer les valeurs dans un tableau ;)

test:
<?php
$erreur = ['erreur1','erreur2','erreur3'];
echo implode(';', $erreur);
ça donne :

Code : Tout sélectionner

erreur1;erreur2;erreur3

Re: Contrôle de saisie à l'aide de la fct empty

par davlongin » 14 juin 2022, 10:18

On m'affiche cette erreur :
Warning: Array to string conversion in C:\xampp\htdocs\stage\villeReconduire.php on line 80.

Il y a un rapport que je ne puisse pas afficher le tableau d'erreurs juste avec un "echo" ? Pourtant c'est juste une var que l'on peut afficher normalement.
<?php
$formValues = array('anneeDefault','idVilles');
        $erreurs = array();
        foreach($formValues as $value){
            if(empty($_POST[$value]) || $_POST[$value] != '0'){ // si la valeur de $_POST est vide alors on l'ajoute aux erreurs
                $erreurs[] = $value;
            }
        }
        if(count($erreurs)){ //si le tableau d'erreur n'est pas vide on retourne les erreurs sinon "FALSE"
L.80 ->    echo $erreurs;
        }else{
            echo "false";
        }
?>

Re: Contrôle de saisie à l'aide de la fct empty

par Dsynx » 14 juin 2022, 10:14

empty($var) retourne true si $var est vide

donc ta condition devrais plutot être if(empty($_POST[$value]) || $_POST[$value] != '0'){

return n'a aucun sens si tu n'est pas à l'interieur d'une fonction
on peut utilisé "exotiquement" le return comme dans son code mais ce n'est pas convenable et conventionnel ni conseiller.
se caractère "exotique" est dans le cadre ou l'on include du code avec un return php prend en compte que c'est comme une function
voir l'exemple dans le manuel :
<?php
echo "b";
return;
?>
https://www.php.net/manual/fr/function.return.php

mais je le dé-conseil fortement PHP mute, autant avant dans les début de php on pouvait faire des truc chelou autant maintenant il y a un cadrage et des conventions à respecter c'est un langage qui veut tendre de toutes ces forces vers un langage normalisé qui parle comme ces petit copain C../java/etc. donc le return comme ici on oubli faudra faire différemment comme le dit Spols on utilise le "return" que dans une fonction.

même si on a le droit de le faire, l'idée c'est pas de faire ce qui est possible mais de produire ce qui va se comprendre et pouvoir se maintenir intuitivement ou en transparence avec le nécessaire de commentaire.
donc si à un moment inattendu tu balance du return :) au milieu de ton code oui :mrgreen: ça va choqué et même voir il est fort possible tu perds en performance, en lisibilité et tu risque fortement de faire par la suite un bricolage pour allé avec se bricolage et au final tu vas avoir une usine à gaz que personne voudra lire et comprendre. sans oublier que tu as se code perdu dans les méandres de balise style BB j'ai remarquer un [ HTML ] mais là en terme de lisibilité c'est foutu :tir2: .
si tu sent la moindre sensation bizarre dans la lecture d'un code je sais une difficulté à comprendre; ou c'est une approche que tu ne comprend pas comme le fonctionnel mais bon bonne nouvel avec des cours , quelque test et le manuel tu fini par comprendre. ou c'est du code dégueulasse perdu dans un autre language ou plusieurs, genre HTML, Css, Js quand tout cela ce mélange
c'est une vrai bouse indescriptible et bien il y a un problème. j'appel cela les files qui se touche normale enfin moi
jamais tu vas voir dans mon code php du HTML , du CSS ou du JS et jamais touts réuni dans la même page. sauf! si c'est une page générer par un module mais cette page générer jamais je vais travailler dans ce code elle est générer pour être envoyer en cache, lu par l'utilisateur qui l'appel ou détruire par une page qui va la remplacer. voila mes conseils.


:D

Re: Contrôle de saisie à l'aide de la fct empty

par Spols » 14 juin 2022, 09:11

empty($var) retourne true si $var est vide

donc ta condition devrais plutot être if(empty($_POST[$value]) || $_POST[$value] != '0'){

return n'a aucun sens si tu n'est pas à l'interieur d'une fonction

Re: Contrôle de saisie à l'aide de la fct empty

par davlongin » 14 juin 2022, 00:59

Je voies pas tellement où tu veux en venir.
Si tu veux bien m'expliquer stp

Re: Contrôle de saisie à l'aide de la fct empty

par or 1 » 14 juin 2022, 00:24

retourner à qui ?

Re: Contrôle de saisie à l'aide de la fct empty

par davlongin » 14 juin 2022, 00:14

Le retourn est censé retourné les erreurs dans le tableau ($erreurs).

Re: Contrôle de saisie à l'aide de la fct empty

par or 1 » 14 juin 2022, 00:05

que fait l'instruction return ?

Re: Contrôle de saisie à l'aide de la fct empty

par davlongin » 13 juin 2022, 23:52

Voici ce que j'ai fait auparavant :
<?php
        // display_var_dump($_POST);
        $formValues = array('anneeDefault','idVilles');
        $erreurs = array();
        foreach($formValues as $value){
            if(!empty($_POST[$value]) && $_POST[$value] != '0'){ // si la valeur de $_POST est vide alors on l'ajoute aux erreurs
                $erreurs[] = $value;
            }
        }
        if(count($erreurs)){ //si le tableau d'erreur n'est pas vide on retourne les erreurs sinon "FALSE"
            return $erreurs;
        }else{
            return false;
        }
        // display_var_dump($formValues);
        // foreach ($formValues as $value)
        //  {
        //      if(empty($value))
        //      {
        //          $erreur[$value] = 'Ce champ doit être rempli ou coché';
        //      }
        //  }
        
        var_dump($_POST);
        echo "<br>";
        // Mise à jour de la date du début de l'année en fonction de la date choisie
        $req_basic = "UPDATE ville SET anneeDebutAS = '".$_POST['anneeDefault']."'  WHERE idVille IN ".arrayToSqlList($_POST['idVilles']);
        echo "<br>".$req_basic;
        $resultat1 = mysqli_query($conn, $req_basic);
        // display_var_dump($erreurs);
    ?>

Re: Contrôle de saisie à l'aide de la fct empty

par or 1 » 13 juin 2022, 23:05

J'ai essayé par divers moyens
lesquels ?
car il n'y a aucun test dans le code, pas de fonction empty().

Contrôle de saisie à l'aide de la fct empty

par davlongin » 13 juin 2022, 22:55

Bonjour,

Je voudrais que lorsque l'utilisateur laisse les champs vides, la requête ne s'exécute pas.

J'ai essayé par divers moyens mais le résultat n'a pas au rendez vous.

Je vous remercie d'avance pour votre aide.
<?php
        $servername = 'localhost';
        $username = 'root';
        $password = '';
        $anneedefault = 2022;
        // connexion à la base de données
        $conn =  mysqli_connect($servername, $username, $password,"remplacement");
        
        // vérification de la connexion
        if($conn->connect_error){
            die('Erreur :' .$conn->connect_error);
        }
        // echo "Connexion réussie";
        

        // afficher toutes les données de la table ville 
        // Trier par année décroissante & nomville croissante
        $requete = "SELECT * FROM ville ORDER BY anneeDebutAS DESC, nomVille ASC";
        $resultat = mysqli_query($conn, $requete);
    
    ?>
[html]
    <!-- création du tableau / formulaire -->
    <form action='' method='post'>
        <div>
            <p>Année de début de l'année scolaire<br/>
            (ex : "2022" pour l'année scolaire "2022-2023") * :&nbsp</p>
            <input type="number" min="2021" max="2100" step="1" name="anneeDefault" value="<?php echo ANNEE_SCOLAIRE +1; ?>">
        </div>
        <table border="1" cellpadding="5" cellspacing="10" width="40%">
            <!-- Haut du tableau -->
            <thead>
                <tr>
                    <th>Code Postal</th>
                    <th>Nom</th>
                    <th>Année Scolaire</th>
                    <th>Sélectionner</th>
                </tr>
            </thead>
            <!-- Le bas du tableau -->
            <tfoot>
                <tr>
                    <td colspan="4"><input type="submit" name="submit" value="Reconduire les villes selectionnées"></td>
                </tr>
            </tfoot>
[/html]
    <?php
        // récupère les lignes du résultat dans un tableau associatif
        while ($enreg=mysqli_fetch_array($resultat)) 
        {
    ?>
[html]
            <!-- Le milieu du tableau -->
            <tbody>
                <tr>
                    <!-- affichage des données de la BDD dans les colonnes du tableau -->
                    <td><?php echo $enreg["cpVille"];?></td>
                    <td><?php echo $enreg["nomVille"];?></td>
                    <td><?php echo $enreg["anneeDebutAS"];?></td>
                    <td><input type="checkbox" name="idVilles[]" value=<?php echo $enreg['idVille'];?>></td>
                </tr>
            </tbody>
[/html]
    <?php } ?>
        <!-- Fermeture de la condition "while" -->
        </table>
    <?php
        var_dump($_POST);
        echo "<br>";
        // Mise à jour de la date du début de l'année en fonction de la date choisie
        $req_basic = "UPDATE ville SET anneeDebutAS = '".$_POST['anneeDefault']."'  WHERE idVille IN ".arrayToSqlList($_POST['idVilles']);
        echo "<br>".$req_basic;
        $resultat1 = mysqli_query($conn, $req_basic);
        // display_var_dump($erreurs);
    ?>
    </form>