Php - Vérification de champs
Résolu
Astolpho
Messages postés
73
Date d'inscription
Statut
Membre
Dernière intervention
-
Astolpho Messages postés 73 Date d'inscription Statut Membre Dernière intervention -
Astolpho Messages postés 73 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous,
Je souhaiterais vérifier un champ "lastname" avant insertion de données, si le champs est vide ça laisse passer, s'il est déjà renseigner ça laisse passer, s'il est renseigné mais qu'il fait moins de 3 caractères, ça met un message.
En gros, j'aimerais avoir la possibilité de laisser le champs vide, ou s'il est déjà enregistrer il ne fait rien et s'il fait moins de 3 caractères il met le message.
Quand je laisse le champs vide, il me met le message de la vérification de moins de 3 caractères, il me laisse pas la possibilité de mettre un champ vide
Je cherche une astuce pour faire fonctionner toutes ses combinaisons si c'est possible.
Je souhaiterais vérifier un champ "lastname" avant insertion de données, si le champs est vide ça laisse passer, s'il est déjà renseigner ça laisse passer, s'il est renseigné mais qu'il fait moins de 3 caractères, ça met un message.
En gros, j'aimerais avoir la possibilité de laisser le champs vide, ou s'il est déjà enregistrer il ne fait rien et s'il fait moins de 3 caractères il met le message.
Quand je laisse le champs vide, il me met le message de la vérification de moins de 3 caractères, il me laisse pas la possibilité de mettre un champ vide
// Check nombre de caractère $lastnamelength = (strlen( $_POST['lastname'])); if($lastnamelength <=2) { $errors ['lastname']= "le nom ne peut pas faire moins de 3 caracteres"; } else { // Check s'il existe dejà, il ne fait rien (au cas ou on enregistre d'autre champs, il ne le réenregistre pas if($lastnamelength == $_POST['lastname']){ return true; } else { // Check si le champs est vide, il le laisse vide if(empty($_POST['lastname'])){ return true; }
Je cherche une astuce pour faire fonctionner toutes ses combinaisons si c'est possible.
A voir également:
- Php - Vérification de champs
- Easy php - Télécharger - Divers Web & Internet
- Verification lien internet - Guide
- Verification windows 11 - Guide
- Dl protect link verification en cours - Forum Téléchargement
- Verification de l'identité du serveur impossible - Forum WiFi
8 réponses
Oh mon dieu... ce nombre d'erreurs dans ton code.... aie !!
Bon,
En gros ..
Histoire d'avoir un code propre
Bon,
En gros ..
Histoire d'avoir un code propre
<?php //---------------------------------------------------------------// //connexion à la bdd // A lire et à appliquer avant de poursuivre : // http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs //---------------------------------------------------------------// require_once('../inc/connexion.php'); //---------------------------------------------------------------// // On va découper ton code en "fonctions" // ça le rendra plus lisible et plus facile // à maintenir ou à faire évoluer //---------------------------------------------------------------// /** Fonction pour mettre à jour */ function updCustomers($id_customers, $showin,$firstname,$lastname,$zipcode="",$city="",$phone="",$mobile="" ){ $db = getDB(); $sql = "UPDATE customers SET showin=:showin ,firstname=:firstname ,lastname=:lastname ,address=:address ,zipcode=:zipcode ,city=:city ,email=:email ,phone=:phone ,mobile=:mobile WHERE id_customers=:id_customers"; try{ // Prepare statement $stmt = $db->prepare($sql); $stmt->bindParam(':showin', $showin); $stmt->bindParam(':firstname', strtolower(ucwords($firstname)); $stmt->bindParam(':lastname', strtolower(ucwords($lastname)); $stmt->bindParam(':address', strtolower($address)); $stmt->bindParam(':email', strtolower($email)); $stmt->bindParam(':zipcode', $zipcode); $stmt->bindParam(':city', strtolower(ucwords($city)); $stmt->bindParam(':id_customers', $id_customers); // execute query return $stmt->execute(); }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } } /** * Fonction pour insérer un customer ( je te le donne en exemple...) */ function createCustomer($showin,$firstname,$lastname,$zipcode="",$city="",$phone="",$mobile=""){ $db = getDB(); $sql = "INSERT INTO customers ( showin,firstname,lastname,address,zipcode,city,email,phone,mobil) VALUES (:showin,:firstname,:lastname,:address,:zipcode,:city,:email,:phone,:mobil)"; try{ // Prepare statement $stmt = $db->prepare($sql); $stmt->bindParam(':showin', $showin); $stmt->bindParam(':firstname', strtolower(ucwords($firstname)); $stmt->bindParam(':lastname', strtolower(ucwords($lastname)); $stmt->bindParam(':address', strtolower($address)); $stmt->bindParam(':email', strtolower($email)); $stmt->bindParam(':zipcode', $zipcode); $stmt->bindParam(':city', strtolower(ucwords($city)); // execute query $stmt->execute(); // on récupère l'id du customer créé : https://www.php.net/manual/fr/pdo.lastinsertid.php $id = $db->lastInsertId(); return $id; }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } } /** Fonction pour récupérer l'id d'un customer via son "lastname" */ function getCustomerByLastName($lastname){ $db = getDB(); $sql = 'SELECT id_customers FROM customers WHERE lastname = ?'; try{ $stmt = $db->prepare ($sql); $stmt->execute(array($lastname)); $resultat = $stmt->fetchColumn(); // https://www.php.net/manual/fr/pdostatement.fetchcolumn.php return $resultat; }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } } /** Fonction pour récupérer l'id d'un customer via son "email" */ function getCustomerByEmail($email){ $db = getDB(); $sql = 'SELECT id_customers FROM customers WHERE email = ?'; try{ $stmt = $db->prepare ($sql); $stmt->execute(array($email)); $resultat = $stmt->fetchColumn(); // https://www.php.net/manual/fr/pdostatement.fetchcolumn.php return $resultat; }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } } //---------------------------------------------------// // On récupère proprement les variables envoyées // en $_POST AVANT de les utiliser // pour cela, j'utilise l'écriture ternaire : https://blog.smarchal.com/operateur-ternaire-php#:~:text=L'op%C3%A9rateur%20ternaire%20est%20un,%5BTHEN%5D%20%3A%20%5BELSE%5D%3B //---------------------------------------------------// $id_customers = !empty($_POST["id_customers"]) ? $_POST["id_customers"] : NULL; $showin = !empty($_POST["showin"]) ? $_POST["showin"] : NULL; $firstname = !empty($_POST["firstname"]) ? $_POST["firstname"] : NULL; $lastname = !empty($_POST["lastname"]) ? $_POST["lastname"] : NULL; $address = !empty($_POST["address"]) ? $_POST["address"] : NULL; $zipcode = !empty($_POST["zipcode"]) ? $_POST["zipcode"] : NULL; $city = !empty($_POST["city"]) ? $_POST["city"] : NULL; $phone = !empty($_POST["phone"]) ? $_POST["phone"] : NULL; $mobile = !empty($_POST["mobile"]) ? $_POST["mobile"] : NULL; $email = !empty($_POST["email"]) ? $_POST["email"] : NULL; $updateCustomers = !empty($_POST["updateCustomers"]) ? $_POST["updateCustomers"] : NULL; //---------------------------------------------------// // Traitement du formulaire //---------------------------------------------------// if(!empty($_POST)) { $errors =array(); // si le lastname n'est pas vide if(!empty($lastname)) { $db_lastName = getCustomerByLastName($lastname); if(!empty($db_lastName)){ $errors['lastname'] = "Cet utilisateur existe déjà"; }else{ //on vérifie si la bonne taille $lastnamelength = (strlen( $lastname)); if($lastnamelength <=2) { $errors ['lastname']= "le nom ne peut pas faire moins de 3 caracteres"; } if(!preg_match("#^[A-Za-z]+(?:[\s-][a-zA-Z]+)*$#", $lastname)) { $errors['lastname'] = "On ne peut peux pas rentrer de caractères numérique dans le champs du nom"; } } } // pour le mail : https://www.php.net/manual/fr/filter.filters.validate.php // https://www.php.net/manual/fr/filter.examples.validation.php if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors['email'] = "Votre email n'est pas valide"; } else{ // on vérifie si il n'existe pas déjà en bdd $db_email = getCustomerByEmail($email); if(!empty($db_email)){ $errors ['email'] = "cet email existe deja"; } } if(!empty($city)) { if(!preg_match("#^[A-Za-z]+(?:[\s-][a-zA-Z]+)*$#", $city )) { $errors ['city'] = "La ville n'est pas valide"; } } if(!empty($zipcode)) { if(!preg_match("#^[0-9]{5}$#", $zipcode )) { $errors['zipcode'] = "Le code postal n'est pas valide"; } } // Si il n'y a pas d'erreurs ... if(empty($errors)) { if(isset($updateCustomers)) { //On met à jour le customer updCustomers($id_customers, $showin,$firstname,$lastname,$zipcode,$city,$phone,$mobile ); //header('Location: ../form/customersProfile.php?id_customers='.$_GET["id_customers"].''); exit; //toujours mettre un exit après une redirection } // debug ($errors); } else{ //on affiche les erreurs.. par exemple : print_r($errors); } } ?>
Bonjour
Ton if ligne 16 et à déplacer en premier.
Celui qui se trouve actuellement à la ligne 10 ne correspond pas du tout à ce que tu cherches à faire.... Tu as légèrement oublié de faire une requête SQL pour aller vérifier en base si le nom est déjà utilisé ou non.
Ton if ligne 16 et à déplacer en premier.
Celui qui se trouve actuellement à la ligne 10 ne correspond pas du tout à ce que tu cherches à faire.... Tu as légèrement oublié de faire une requête SQL pour aller vérifier en base si le nom est déjà utilisé ou non.
Pour la requête je m'en suis rendu compte en mettant le message du coup c'est plus comme ça :
//Vérifie que le champs est vide if(empty($_POST['lastname'])){ return true; } else { // Vérifie que le nom ne fasse pas moins de 3 caractères $lastnamelength = (strlen( $_POST['lastname'])); if($lastnamelength <=2) { $errors ['lastname']= "le nom ne peut pas faire moins de 3 caracteres"; } else { // Check s'il existe dejà, il ne fait rien (au cas ou on enregistre d'autre champs, il ne le réenregistre pas $db = getDB(); $req = $db->prepare ('SELECT id_customers FROM customers WHERE lastname = ?'); $req->execute(array($_POST['lastname'])); $lastname =$req->fetch(); if($lastname == $_POST['lastname']) { return true; } }
Comme ça, ça fonctionne
Par contre si je laisse le champs du lastname vide, il ne rempli pas ou ne modifie pas l'email , c'est a cause de la condition des moins de 3 caractères ,(j' ai pas de message d'erreur quand je le laisse vide). Par contre si je rentre un lastname je peux modifier l'email en même temps.
Il sont dépendant les uns des autres ?
il faut faire un script unique avec tout les champs que j'ai besoin de contrôler ?
Le champs lastname n'est pas obligé d'être renseigné, celui obligatoire c'est la raison sociale qui peut être un nom d'entreprise ou un prénom et un nom. Le champs lastname c'est pour le nom du contact de la raison sociale si ont veut le remplir, c'est pas obligé.
par exemple si la raison sociale est le nom et le prénom pas besoin de remplir le champs prénom et nom puisque c'est les même.
Tant que le champs lastname reste vide, je ne peux remplir aucun autre champs
$db = getDB(); $req = $db->prepare ('SELECT id_customers FROM customers WHERE lastname = ?'); $req->execute(array($_POST['lastname'])); $lastname =$req->fetch(); if(empty($_POST['lastname']) || ($lastname == $_POST['lastname'])) { return true; } { $lastnamelength = (strlen( $_POST['lastname'])); if($lastnamelength <=2) { $errors ['lastname']= "le nom ne peut pas faire moins de 3 caracteres"; } if(!preg_match("#^[A-Za-z]+(?:[\s-][a-zA-Z]+)*$#", $_POST['lastname'] )) { $errors ['lastname'] = "On ne peut peux pas rentrer de caractères numérique dans le champs du nom"; } }
Par contre si je laisse le champs du lastname vide, il ne rempli pas ou ne modifie pas l'email , c'est a cause de la condition des moins de 3 caractères ,(j' ai pas de message d'erreur quand je le laisse vide). Par contre si je rentre un lastname je peux modifier l'email en même temps.
// Vérifie que l'email est conforme et que cet email n'existe pas if(empty($_POST['email']) || !preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#', $_POST['email'])) { $errors ['email'] = "Votre email n'est pas valide"; } else { $db = getDB(); $req = $db->prepare ('SELECT id_customers FROM customers WHERE email = ?'); $req->execute(array($_POST['email'])); $email =$req->fetch(); if($email == $_POST['email']) { return true; } }
Il sont dépendant les uns des autres ?
il faut faire un script unique avec tout les champs que j'ai besoin de contrôler ?
Le champs lastname n'est pas obligé d'être renseigné, celui obligatoire c'est la raison sociale qui peut être un nom d'entreprise ou un prénom et un nom. Le champs lastname c'est pour le nom du contact de la raison sociale si ont veut le remplir, c'est pas obligé.
par exemple si la raison sociale est le nom et le prénom pas besoin de remplir le champs prénom et nom puisque c'est les même.
Tant que le champs lastname reste vide, je ne peux remplir aucun autre champs
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici le code :
<?php require_once('../inc/connexion.php'); if(!empty($_POST)) { $errors =array(); // $lastname = $_POST['lastname']; $db = getDB(); $req = $db->prepare ('SELECT id_customers FROM customers WHERE lastname = ?'); $req->execute(array($_POST['lastname'])); $lastname =$req->fetch(); if(empty($_POST['lastname']) || ($lastname == $_POST['lastname'])) { return true; } $lastnamelength = (strlen( $_POST['lastname'])); if($lastnamelength <=2) { $errors ['lastname']= "le nom ne peut pas faire moins de 3 caracteres"; } if(!preg_match("#^[A-Za-z]+(?:[\s-][a-zA-Z]+)*$#", $_POST['lastname'] )) { $errors ['lastname'] = "On ne peut peux pas rentrer de caractères numérique dans le champs du nom"; } if(empty($_POST['email']) || !preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#', $_POST['email'])) { $errors ['email'] = "Votre email n'est pas valide"; } else { $db = getDB(); $req = $db->prepare ('SELECT id_customers FROM customers WHERE email = ?'); $req->execute(array($_POST['email'])); $email =$req->fetch(); if($email) { $errors ['email'] = "cet email existe deja"; } } if($_POST['city'] =="") { return true; } if(!preg_match("#^[A-Za-z]+(?:[\s-][a-zA-Z]+)*$#", $_POST['city'] )) { $errors ['city'] = "La ville n'est pas valide"; return false; } if($_POST['zipcode'] =="") { return true; } if(!preg_match("#^[0-9]{5}$#", $_POST['zipcode'] )) { $errors ['zipcode'] = "Le code postal n'est pas valide"; return false; } if(empty($errors)) { if(isset($_POST['updateCustomers'])) { $id_customers = $_POST["id_customers"]; $showin = addslashes (ucwords($_POST['showin'])); $firstname = addslashes (ucwords($_POST['firstname'])); $lastname = addslashes (ucwords($_POST['lastname'])); $address = addslashes (ucwords($_POST['address'])); $zipcode = ($_POST['zipcode']); $city = addslashes (ucwords($_POST['city'])); $email = strtolower($_POST['email']); $phone = strtolower($_POST['phone']); $mobile = strtolower($_POST['mobile']); $resultat = "UPDATE customers SET showin='$showin' ,firstname='$firstname' ,lastname='$lastname' ,address='$address' ,zipcode='$zipcode' ,city='$city' ,email='$email' ,phone='$phone' ,mobile='$mobile' WHERE id_customers='$id_customers'"; // Prepare statement $stmt = $db->prepare($resultat); $stmt->bindParam(':showin', $_POST['showin']); $stmt->bindParam(':firstname', $_POST['firstname']); $stmt->bindParam(':lastname', $_POST['lastname']); $stmt->bindParam(':address', $_POST['address']); $stmt->bindParam(':email', $_POST['email']); $stmt->bindParam(':zipcode', $_POST['zipcode']); $stmt->bindParam(':city', $_POST['city']); // execute query $stmt->execute(); //header('Location: ../form/customersProfile.php?id_customers='.$_GET["id_customers"].''); } // debug ($errors); } } ?>
je l'ai mis comme ça, je ne peux pas entrer de lastname vide , j'ai le message des 3 caractères. C'est peut-être contradictoire d'autoriser un champs vide et de mettre une condition d'un nom de 3 caractères. Un champs vide fait forcément moins de 3 caractères
if(is_null($_POST['lastname']) || ($lastname == $_POST['lastname'])) { } //return true; $lastnamelength = (strlen( $_POST['lastname'])); if ($lastnamelength <=2) { $errors ['lastname']= "le nom ne peut pas faire moins de 3 caracteres"; }
C'est beaucoup plus cohérent comme ça, c'est plus propre. Je vais regarder tout ça à tête reposé.
Merci beaucoup
Merci beaucoup
Salut, complétement inutile de faire ça côté serveur donc après envoi des données...
Il faut le faire en JavaScript ce genre de validation: avant que les données du formulaire soient envoyées et si c'est pas bon pas d'envoi au PHP = pas de temps de latence+rechargement de la page et de travail du serveur sur des données qui ne peuvent pas servir.
Vous évitez de faire 2 requêtes serveur et leur traitement : une fois lors de la réception des données envoyées, une fois pour envoyer un message d'avertissement sur la page qui indique l'erreur ou manque des champs à remplir.
Il reste toutefois à vérifier les champs en PHP mais là c'est pour une question de sécurité mais si le formulaire n'envoie les données que quand celles ci sont correctement remplies vous y gagnez déjà beaucoup.
Il faut le faire en JavaScript ce genre de validation: avant que les données du formulaire soient envoyées et si c'est pas bon pas d'envoi au PHP = pas de temps de latence+rechargement de la page et de travail du serveur sur des données qui ne peuvent pas servir.
Vous évitez de faire 2 requêtes serveur et leur traitement : une fois lors de la réception des données envoyées, une fois pour envoyer un message d'avertissement sur la page qui indique l'erreur ou manque des champs à remplir.
Il reste toutefois à vérifier les champs en PHP mais là c'est pour une question de sécurité mais si le formulaire n'envoie les données que quand celles ci sont correctement remplies vous y gagnez déjà beaucoup.
Inutile ??
Sachant que le js est accessible par l'utilisateur...il peut envoyer ce qu'il veut...
Il faut Toujours vérifier côté serveur !
Et qui te dit qu'il n'a pas déjà mis en place la vérification côté client en js ?
Sans oublier les patterns dans les input pour le format des champ qui est possible également...
Sachant que le js est accessible par l'utilisateur...il peut envoyer ce qu'il veut...
Il faut Toujours vérifier côté serveur !
Et qui te dit qu'il n'a pas déjà mis en place la vérification côté client en js ?
Sans oublier les patterns dans les input pour le format des champ qui est possible également...