11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'essaie de valider avant envoi un formulaire simple.

J'ai un souci concernent la validation de l'existence dans ma base du mail indiqué.

Je l'ai déjà fait sans problème dans d'autres cas mais là il y a quelque chose qui cloche que je n'arrive pas à déceler;

Mon formulaire :


<form class="form-horizontal" method="post" name="forget_form" id="forget_form">
            <div class="form-group">
                <!--<label for="mail" class="col-sm-4 col-form-label">Merci de saisir votre mail pour continuer</label>-->
                <input class="col-sm-4 " type="text" name="forget_mail" id="forget_mail" placeholder="Merci de saisir votre mail pour continuer">
            </div>
            <button class="btn btn-primary" name="sendmail" id="sendmail">Envoyer</button>
        </form>    


Mon JS :


<script>

$("#forget_form").validate({
        rules:
            {
            forget_mail:
                {
                required: true,
                email: true,
                remote: 
                    {
                    url: "/fr/BO/Users/checkMail",
                    type: "post",
                    data:
                        {
                        reference: function()
                            {
                            return $("#forget_mail").val();
                            }
                        }
                    }//FIN remote
                }//FIN Mail 
            },//FIN RULES
                    
    // Specify validation error messages
    messages:
            {
            forget_mail:
                {
                required: "Merci de renseigner votre mail",
                email : "Ce n'est pas un format valide",
                remote: "Aucun compte ne correspond à cet email"
                }
            }//FIN MESSAGES

        });//FIN SCRIPT    
</script>



Ma fonction checkMail dans le controller


public function checkMail(){

        if(!empty($_POST))
            {    
            $searchVal = $_POST['forget_mail'];
                           
            $searchRes = $this->User->checkUniq($searchVal);

            if($searchRes)
                {
                echo "false";   
                }
                else
                {
                echo "true";    
                }    
            }  
    } 


Et enfin mon model :


public function checkUniq($data){
    return $this->sql("
      SELECT *
      FROM users
      WHERE mail = ? 
      ", [$data]);
      
    }   


Merci en avance pour votre aide
Bonjour,

Elle vient d’où cette fonction validate ? Tu as une librairie ?
Si oui laquelle, sinon : ca peut pas fonctionner il me semble.

Et en PHP : tu utilise que framework ?
Modifié par Shnoulle (12 Jan 2023 - 16:47)
Merci Shnoulle pour ta réponse

Désolé je l'avais mis en commentaire au début mais comme j'ai mis seulement un extrait

C'est la librairie :

jQuery Validation Plugin

Je n'utilise pas de framework

Bonne journée
Modérateur
Salut Dudu22,

Ça fait un bon moment que je n'utilise plus validate. Mais pourquoi pour 1 champ tu utilises $.validate ? Ton formulaire est envoyé en ajax par la suite (pour le moment, je ne vois pas d'intérêt du JS ==> requête serveur) ? Comment ton php gère le formulaire (filtres tu les données entrantes via le PHP) ?
Modifié par niuxe (13 Jan 2023 - 16:38)
Merci pour ta réponse.

Je souhaite avant d'envoyer une requête au serveur de voir si ce mail existe (d'où Ajax)

Ensuite en dernier je valide avec PHP
Modérateur
donc, tu fais 2 requêtes.... Ce qui est contre productif.
La marche à suivre est :
1. avec le JS, tu fais une vérification relativement sommaire des données à envoyer. S'il y a des erreurs, tu bloques l'envoie des données vers le serveurs et tu invites l'utilisateur à corriger sa saisie
2. Le PHP vérifie que les données soient bonnes. Si c'est le cas, tu continues le processus initial. Sinon, tu renvoies les messages erreurs afin que l'utilisateur corrige sa saisie.

En faisant simple, au lieu de spécifier text dans ton input, email me parait plus pertinent. Aussi, jquery + jquery.validate pour ça, ça me parait un peu lourd :

...
<input class="col-sm-4 " type="email" required name="forget_mail" id="forget_mail" placeholder="Merci de saisir votre mail pour continuer">
....


De nos jours, jquery n'a plus vraiment raison d'être. En VanillaJS, il est simple de valider et d'afficher des messages erreurs ou de succès.
Modifié par niuxe (14 Jan 2023 - 03:25)
C'est bien ce que j'ai fait

Oui mais je cherche à valider avec validate si le mail existe dans ma base d'où l'ajax

Mais cela ne fonctionne pas

En plus je n'arrive pas à savoir si je déclenche bien la fonction de recherche via mon contrôleur car le var_dump ne marche pas ,je suppose parce qu'il n'y a pas d'appel serveur.
Le var_dump fonctionne, mais pas avec Ajax Smiley cligne où alors faut console.log la response
Modifié par JENCAL (17 Jan 2023 - 14:59)
J'avais une erreur php qui était contenue dans la réponse à la requête c'est pourquoi cela ne fonctionnait pas