Php - condition qui bloque un enregistrement

Fermé
Astolpho Messages postés 72 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 5 mars 2024 - Modifié le 15 juil. 2022 à 14:36
yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Derniè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é.

Page de suppression :

<?php

if(session_status() == PHP_SESSION_NONE){
session_start();
}
require('../inc/connexion.php');
include('../process/customers.php');


$db = getDB();

$id_customers = $_GET['id_customers'];


$reponse = $db->query("SELECT * FROM customers WHERE `id_customers`='$id_customers'");
($donnees = $reponse->fetch());

?>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Using Bootstrap modal</title>

<!-- Bootstrap Core CSS
	<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">>
-->

<body>

	<form method="POST" action="">
		<div class="modal-header">
			<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only"></span></button>
		</div>
		<div class="modal-body">
			<h4><i class="icon fa fa-ban"></i> Êtes vous sûrs? de vouloir supprimer le locataire : <b><?php echo $donnees['showin'];?></b></h4>
			<input type="text" class="form-control"  name="id" value="<?= $_SESSION['auth']->id; ?>" readonly="true">
			<input type="hidden" class="form-control"  name="id_customers" value="<?php echo $donnees['id_customers'];?>" readonly="true">

		</div>
			<div class="modal-footer">
			<input type="submit" class="btn btn-outline pull-left" name="deleteCustomer" value="Supprimer" />
		</div>
	</form>

Fonction : 

    <?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. 

A voir également:

1 réponse

yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 1 479
15 juil. 2022 à 16:07

bonjour,

peut-être devrais-tu ne vérifier que l'email est valide que si il est spécifié.

0