Php - Vérification de champs
Résolu/Fermé
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
-
8 avril 2022 à 17:18
Astolpho Messages postés 73 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 12 juin 2024 - 11 avril 2022 à 15:51
Astolpho Messages postés 73 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 12 juin 2024 - 11 avril 2022 à 15:51
A voir également:
- Php - Vérification de champs
- Easy php - Télécharger - Divers Web & Internet
- Vérification lien - Guide
- Vérification d'état du pc - Guide
- Retour a la ligne php ✓ - Forum PHP
- Code de vérification reçu sans l'avoir demandé ✓ - Forum Mail
8 réponses
jordane45
Messages postés
38266
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
9 avril 2022 à 18:57
9 avril 2022 à 18:57
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); } } ?>
jordane45
Messages postés
38266
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
8 avril 2022 à 17:22
8 avril 2022 à 17:22
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.
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
Modifié le 8 avril 2022 à 17:29
Modifié le 8 avril 2022 à 17:29
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; } }
jordane45
Messages postés
38266
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
8 avril 2022 à 18:57
8 avril 2022 à 18:57
Donc.. c'est bon ? ( si oui, marque le sujet en RESOLU ).
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
Modifié le 8 avril 2022 à 20:06
Modifié le 8 avril 2022 à 20:06
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
jordane45
Messages postés
38266
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
8 avril 2022 à 20:24
8 avril 2022 à 20:24
Il faudrait nous montrer le code complet ( en un seul morceau ) ... pas juste des petits bouts ...
Sinon on ne peut pas savoir comment tu as structuré ton code...
Sinon on ne peut pas savoir comment tu as structuré ton code...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
Modifié le 8 avril 2022 à 20:36
Modifié le 8 avril 2022 à 20:36
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); } } ?>
jordane45
Messages postés
38266
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
8 avril 2022 à 21:08
8 avril 2022 à 21:08
Tant que le champs lastname reste vide, je ne peux remplir aucun autre champs
C'est normal ... vu que tu fais
if(empty($_POST['lastname']) || ($lastname == $_POST['lastname'])) { return true;
Là .. si le champ est vide .. tu sors de ta fonction...
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
Modifié le 9 avril 2022 à 17:22
Modifié le 9 avril 2022 à 17:22
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"; }
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
9 avril 2022 à 19:09
9 avril 2022 à 19:09
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.
jordane45
Messages postés
38266
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
>
DoctorHow
Modifié le 10 avril 2022 à 07:47
Modifié le 10 avril 2022 à 07:47
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...
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
11 avril 2022 à 15:51
11 avril 2022 à 15:51
Je compte utiliser les patterns input, la vérification PHP, c'est au cas ou.