Php - (UPDATE) enregistrement des données qui ne se fait pas
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 jordan45
J'ai toujours le message :
Cet utilisateur existe déjà
cet email existe déjà
à chaque fois que je fait un update.
Le update ne se fait pas, rien n'est modifié dans la base de données avec le code ci-dessous :
Je n'ai pas de message d'erreur, j'ai activé les erreurs PDO comme conseillé sur le lien.
J'ai toujours le message :
Cet utilisateur existe déjà
cet email existe déjà
à chaque fois que je fait un update.
Le update ne se fait pas, rien n'est modifié dans la base de données avec le code ci-dessous :
<?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); } } ?>
Je n'ai pas de message d'erreur, j'ai activé les erreurs PDO comme conseillé sur le lien.
A voir également:
- Php - (UPDATE) enregistrement des données qui ne se fait pas
- Fuite données maif - Guide
- Windows update bloqué - Guide
- Trier des données excel - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
8 réponses
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.
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
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)
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
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
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); } } ?>
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);