Php - (UPDATE) enregistrement des données qui ne se fait pas
Résolu/Fermé
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
-
Modifié le 11 avril 2022 à 15:19
Astolpho Messages postés 73 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 12 juin 2024 - 20 juin 2022 à 14:36
Astolpho Messages postés 73 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 12 juin 2024 - 20 juin 2022 à 14:36
A voir également:
- Php - (UPDATE) enregistrement des données qui ne se fait pas
- Windows update 0x80070643 - Accueil - Windows
- Windows update bloqué - Guide
- Easy php - Télécharger - Divers Web & Internet
- Asus live update - Télécharger - Utilitaires
- Excel validation des données liste - Guide
8 réponses
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
11 avril 2022 à 16:43
11 avril 2022 à 16:43
Bonjour,
Fais des var_dump de tes variables pour voir ce qu'elles contiennent.
par exemple, juste après
fais un
fais la même chose pour le mail .. et montres nous ce que ça donne.
Bien entendu, regarde bien dans ta bdd avant si le nom ou le mail n'y sont pas déjà présent ... et dans ce cas ça signifierait que le code fait bien son travail.
Fais des var_dump de tes variables pour voir ce qu'elles contiennent.
par exemple, juste après
$db_lastName = getCustomerByLastName($lastname);
fais un
var_dump( $db_lastName );
fais la même chose pour le mail .. et montres nous ce que ça donne.
Bien entendu, regarde bien dans ta bdd avant si le nom ou le mail n'y sont pas déjà présent ... et dans ce cas ça signifierait que le code fait bien son travail.
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
Modifié le 11 avril 2022 à 18:12
Modifié le 11 avril 2022 à 18:12
J'ai l'affichage ci-dessous :
C:\wamp64\www\invoice\app\process\functions.php:177:string '13' (length=2)
Array ( [email] => cet email existe déjà )
quand je fait un
Sur le
Quand le champs est vide : pas de message
Quand je rentre un nom j'ai le message : C:\wamp64\www\invoice\app\process\functions.php:154:boolean false
C:\wamp64\www\invoice\app\process\functions.php:177:string '13' (length=2)
Array ( [email] => cet email existe déjà )
quand je fait un
$db_email = getCustomerByEmail($email); var_dump( $db_email );
Sur le
var_dump( $db_lastName );
Quand le champs est vide : pas de message
Quand je rentre un nom j'ai le message : C:\wamp64\www\invoice\app\process\functions.php:154:boolean false
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
Modifié le 11 avril 2022 à 19:03
Modifié le 11 avril 2022 à 19:03
Au final avec les 2 j'ai ça :
C:\wamp64\www\invoice\app\process\functions.php:154:string '17' (length=2)
C:\wamp64\www\invoice\app\process\functions.php:177:string '17' (length=2)
var_dump( $db_lastName );
C:\wamp64\www\invoice\app\process\functions.php:154:string '17' (length=2)
var_dump( $db_email );
C:\wamp64\www\invoice\app\process\functions.php:177:string '17' (length=2)
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
11 avril 2022 à 20:31
11 avril 2022 à 20:31
Il faudrait nous montrer le code complet de ta page contenant tes var_dump
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
11 avril 2022 à 22:00
11 avril 2022 à 22:00
Visiblement il trouve un utilisateur ayant pour id le 17.
C'est pour ça qu'il te répond que l'utilisateur existe déjà.
C'est pour ça qu'il te répond que l'utilisateur existe déjà.
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
11 avril 2022 à 21:42
11 avril 2022 à 21:42
Voici le code,
<?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 AND ".$_SESSION['auth']->id." = customers.id" ; 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); var_dump( $db_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); var_dump( $db_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); } } ?>
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
12 avril 2022 à 13:53
12 avril 2022 à 13:53
Le update ne se fait pas, même quand toutes les conditions sot réunies.
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
Modifié le 12 avril 2022 à 17:21
Modifié le 12 avril 2022 à 17:21
Quand je fais un var_dump dans les variables lastname, tout au long de la page, j'ai bien le nom que je tape qui s'affiche.
C:\wamp64\www\invoice\app\process\functions.php:93:string 'Arthur' (length=6).
Quand je fais le var_dump sous la ligne ci-dessous :
C:\wamp64\www\1678\app\process\functions.php:161:boolean false
C:\wamp64\www\invoice\app\process\functions.php:93:string 'Arthur' (length=6).
Quand je fais le var_dump sous la ligne ci-dessous :
$db_lastName = getCustomerByLastName($lastname);j'ai le message ci-dessous :
C:\wamp64\www\1678\app\process\functions.php:161:boolean false
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
Modifié le 19 avril 2022 à 17:18
Modifié le 19 avril 2022 à 17:18
Bonjour,
J'ai réduit le code au minimum pour faire des essais avec le lastname. L'enregistrement se fait seulement si je retire le point d'exclamation devant le empty de la ligne 79.
L'enregistrement se fait, mais j'ai le message d'erreur ci-dessous :
( ! ) Notice: Only variables should be passed by reference in C:\wamp64\www\1678\app\process\functions.php on line 31
J'ai mis des var_dump sous les variables lastname, il m'affiche bien le nom que je tape sauf à un enroit j'ai booleen false
J'ai réduit le code au minimum pour faire des essais avec le lastname. L'enregistrement se fait seulement si je retire le point d'exclamation devant le empty de la ligne 79.
$updateCustomers = !empty($_POST["updateCustomers"]) ? $_POST["updateCustomers"] : NULL;
L'enregistrement se fait, mais j'ai le message d'erreur ci-dessous :
( ! ) Notice: Only variables should be passed by reference in C:\wamp64\www\1678\app\process\functions.php on line 31
J'ai mis des var_dump sous les variables lastname, il m'affiche bien le nom que je tape sauf à un enroit j'ai booleen false
C:\wamp64\www\invoice\app\process\functions.php:94:boolean false
<?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, $lastname ){ $db = getDB(); $sql = "UPDATE customers SET lastname=:lastname WHERE id_customers=:id_customers"; try{ // Prepare statement $stmt = $db->prepare($sql); $stmt->bindParam(':lastname', strtolower(ucwords($lastname))); $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 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; } } //---------------------------------------------------// // 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; $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); var_dump( $db_lastName ); //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"; // } //} // Si il n'y a pas d'erreurs ... if(empty($errors)) { var_dump( $errors ); if(isset($updateCustomers)) { //On met à jour le customer updCustomers($id_customers, $lastname ); //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
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
19 avril 2022 à 17:25
19 avril 2022 à 17:25
Déjà, tu peux changer le !empty par un isset
ensuite, oui, il faut séparer le code..
A changer par
$updateCustomers = isset($_POST["updateCustomers"]) ? $_POST["updateCustomers"] : NULL;
ensuite, oui, il faut séparer le code..
$stmt->bindParam(':lastname', strtolower(ucwords($lastname)));
A changer par
$lstname = strtolower(ucwords($lastname)); $stmt->bindParam(':lastname', $lstname);
Astolpho
Messages postés
73
Date d'inscription
vendredi 8 avril 2022
Statut
Membre
Dernière intervention
12 juin 2024
20 juin 2022 à 14:36
20 juin 2022 à 14:36
Désolé du retard. J'avais plus le temps de bosser dessus. Je vais m'y remettre. Merci ça fonctionne.