Astolpho
Messages postés72Date d'inscriptionvendredi 8 avril 2022StatutMembreDernière intervention 5 mars 2024
-
Modifié le 15 juil. 2022 à 14:36
yg_be
Messages postés22754Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention 4 mai 2024
-
15 juil. 2022 à 16:07
Bonjour,
Sur une page de fonction qui crée, met à jour et supprime un contact, j'ai la fonction de vérification d'email qui me bloque la création ou la suppression du contact. ça fonctionne uniquement sur le update.
J'ai toujours le message d'erreur, "votre email n'et pas valide" alors que lors de la création d'un contact je ne met que le nom et prénom, l'email n'est pas concerné.
<?php
if(session_status() == PHP_SESSION_NONE){
session_start();
}
//---------------------------------------------------------------//
//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 insérer un customer ( je te le donne en exemple...)
*/
function creaCustomer($showin, $id){
$db = getDB();
$sql = "INSERT INTO customers ( showin, id)
VALUES (:showin, :id)";
try{
// Prepare statement
$stmt = $db->prepare($sql);
$stmt->bindParam(':showin', $showin);
$showin = ucwords($showin);
$stmt->bindParam(':id', $id);
// 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 mettre à jour
*/
function updCustomers($id_customers, $showin, $email, $mobile=""){
$db = getDB();
$sql = "UPDATE customers
SET
showin=:showin
,email=:email
,mobile=:mobile
WHERE id_customers=:id_customers AND ".$_SESSION['auth']->id." =customers.id";
try{
// Prepare statement
$stmt = $db->prepare($sql);
$showin = ucwords($showin);
$stmt->bindParam(':showin', $showin);
$email = strtolower ($email);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':mobile', $mobile);
$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 mettre à jour le clients (pour le désactiver)
*/
function delCustomer($id_customers, $state){
$db = getDB();
try {
$sql = "UPDATE customers SET
state='2'
WHERE id_customers='$id_customers'";
// Prepare statement
$stmt = $db->prepare($sql);
$stmt->bindParam(':id_customers', $id_customers);
$stmt->bindParam(':state', $state);
// execute query
$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 "firstname"
*/
function getCustomerByfirstName($firstname){
$db = getDB();
$sql = 'SELECT id_customers FROM customers WHERE firstname = ?';
try{
$stmt = $db->prepare ($sql);
$stmt->execute(array($firstname));
$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 "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 = !empty($_POST["id"]) ? $_POST["id"] : NULL;
$createCustomer = isset($_POST["createCustomer"]) ? $_POST["createCustomer"] : NULL;
$id_customers = !empty($_POST["id_customers"]) ? $_POST["id_customers"] : NULL;
$showin = !empty($_POST["showin"]) ? $_POST["showin"] : NULL;
$email = !empty($_POST["email"]) ? $_POST["email"] : NULL;
$mobile = !empty($_POST["mobile"]) ? $_POST["mobile"] : NULL;
$updateCustomers = isset($_POST["updateCustomers"]) ? $_POST["updateCustomers"] : NULL;
$state = isset($_POST["state"]) ? $_POST["state"] : NULL;
$deleteCustomer = isset($_POST["deleteCustomer"]) ? $_POST["deleteCustomer"] : NULL;
//---------------------------------------------------//
// Traitement du formulaire
//---------------------------------------------------//
if(!empty($_POST)) {
$errors =array();
if(!empty($showin)) {
if(!preg_match("#^[A-Za-z]#", $_POST['showin'] )) {
$errors['showin'] = "Vous ne pouvez pas mettre de caractères numériques dans le nom";
}
}
if(!empty($mobile)) {
if(!preg_match("#^[0-9]#", $_POST['mobile'] )) {
$errors ['mobile'] = "Le tel n'est pas valide";
// return false;
}
}
// 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";
// }
}
// Si il n'y a pas d'erreurs ...
if(empty($errors)) {
// var_dump( $errors );
if(isset($createCustomer)) {
//On met à jour le customer si toutes les conditions sont réunies
creaCustomer($showin, $id);
echo "<script type='text/javascript'>document.location.replace('../array/customers.php');</script>";
exit; //toujours mettre un exit après une redirection
}
if(isset($updateCustomers)) {
//On met à jour le customer si toutes les conditions sont réunies
updCustomers($id_customers, $showin, $email, $mobile );
echo "<script type='text/javascript'>document.location.replace('../form/customersProfile.php?id_customers=$id_customers');</script>";
exit; //toujours mettre un exit après une redirection
}
if(isset($deleteCustomer)) {
//On met à jour le customer si toutes les conditions sont réunies
delCustomer($id_customers, $state);
echo "<script type='text/javascript'>document.location.replace('../array/customers.php');</script>";
exit; //toujours mettre un exit après une redirection
}
// debug ($errors);
} else{
//on affiche les erreurs.. par exemple :
print_r($errors);
}
}
Quand je retire la condition sur l'email, tout fonctionne correctement.