Vérification avant insertion php - Mysql

Résolu

Bonjour,

j'ai le code ci-dessous qui me pemet de créer une quittance pour un locataire.

        <?php

        if(session_status() == PHP_SESSION_NONE){
            session_start();
        }
        

        /*Avant l'insertion de la quittance, vérifier si la quittance n'est pas déjà ouverte pour ce 
          locataire pour le mois courant.
        */

        //---------------------------------------------------------------//
        //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');

            /**
            * Fonction pour créer une quittance
            */

        
            function creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice ){
            $db = getDB();
            $id = $_SESSION['auth']->id; 
            $stmt = $db->query("  SELECT next_new_invoice  FROM users WHERE   ".$_SESSION['auth']->id." = id", PDO::PARAM_STR);
            $stmt->bindValue("id", $id, PDO::PARAM_INT);
            $donnees = $stmt->fetch();

            //echo $donnees['next_new_invoice'];
            $id_invoice = $donnees['next_new_invoice'];
            //$id_invoice++;
   

            //echo $id_invoice;
            $id_invoice++; echo '<br>';  
            echo $id_invoice;

            $receipt=$id_invoice;
            $stmt = $db->prepare("INSERT INTO receipt (receipt, id_customers,  room_number)  VALUES(:receipt, :id_customers,  :room_number)");
            $stmt->bindParam("id_customers", $id_customers,PDO::PARAM_INT);
            $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
            $stmt->bindParam("room_number", $room_number,PDO::PARAM_INT);
           // $stmt->execute();

            $receipt=$id_invoice;
            $stmt = $db->prepare("INSERT INTO state (id_state, receipt, creation_date, month, year) VALUES(:id_state,  :receipt , :creation_date, :month, :year )");
            $stmt->bindParam("id_state", $id_state,PDO::PARAM_INT);
            $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
            $stmt->bindParam(':creation_date', $creation_date,PDO::PARAM_STR);
            $stmt->bindParam(':month', $month,PDO::PARAM_STR);
            $stmt->bindParam(':year', $year,PDO::PARAM_STR);
          //  $stmt->execute();


            //mise à jour du prochain numéro de quittance
            $next_new_invoice=$id_invoice;
            //echo  $next_new_invoice;
            $stmt = $db->prepare("UPDATE users SET  next_new_invoice='$next_new_invoice'  WHERE ".$_SESSION['auth']->id." = id" );
            $stmt->bindParam('next_new_invoice', $_GET['next_new_invoice'], PDO::PARAM_INT);
            $stmt->bindValue("id", $id, PDO::PARAM_INT);
           // $stmt->execute();

            }

         

          //---------------------------------------------------//
        // 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
        //---------------------------------------------------//

        $receipt = !empty($_POST["receipt"]) ? $_POST["receipt"] : NULL;
        $id_customers = !empty($_POST["id_customers"]) ? $_POST["id_customers"] : NULL;
        $room_number = !empty($_POST["room_number"]) ? $_POST["room_number"] : NULL;
        $id_state = !empty($_POST["id_state"]) ? $_POST["id_state"] : NULL;
        $creation_date = !empty($_POST["creation_date"]) ? $_POST["creation_date"] : NULL;
        $month = !empty($_POST["month"]) ? $_POST["month"] : NULL;
        $year = !empty($_POST["year"]) ? $_POST["year"] : NULL;

        $next_new_invoice = !empty($_POST["next_new_invoice"]) ? $_POST["next_new_invoice"] : NULL;

        $createReceipt = isset($_POST["createReceipt"]) ? $_POST["createReceipt"] : NULL;






        //---------------------------------------------------//
        // Traitement du formulaire
        //---------------------------------------------------//
        if(!empty($_POST)) {

        $errors =array();



           // Si il n'y a pas d'erreurs ...
         if(empty($errors)) {


         if(isset($createReceipt)){ 
             //On crée la quittance si toutes les conditions sont réunies
            creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice );  
           // header('Location: ../array/receipts.php');
         //  echo "<script type='text/javascript'>document.location.replace('../array/receipts.php');</script>";
             exit; //toujours mettre un exit après une redirection
        } 


}
}

Je voudrais vérifier si une quittance est déja ouverte pour ce locataire, pour le mois en cours, je sais pas comment m'y prendre.

Pour ça il me faut déjà les informations mois, id_customers et numéro de chambre ?

J'ai la requête ci-dessous qui m'affiche toutes les informations que j'ai besoin quand la quittance est créer. Sauf que la requête ci-dessous m'affiche les informations par rapport au numéro de la quittance, comme elle est pas encore créer ça ne fonctionne pas pour ce que je veux. 

 $receipt = $_GET['receipt'];
 $db = getDB();
 $stmt = $db->query("  SELECT * from receipt 

  LEFT JOIN customers ON (receipt.id_customers=customers.id_customers)
  LEFT JOIN rooms ON (receipt.room_number=rooms.room_number)         
  LEFT JOIN state ON (receipt.receipt=state.receipt)         

  WHERE receipt.receipt=$receipt ");

 $donnees = $stmt->fetch();

J'ai bricoler pas mal de chose, mais je sais pas comment m'y prendre.
Windows / Chrome 107.0.0.0

6 réponses

  1. J'ai les  messages d'erreur ci-dessous :

    ( ! ) Notice: Undefined variable: roomNumber in C:\wamp64\www\24\app\process\receipts.php on line 110
    
     Notice: Undefined variable: mois in C:\wamp64\www\24\app\process\receipts.php on line 110
    ( ! ) Notice: Undefined variable: roomNumber in C:\wamp64\www\24\app\process\receipts.php on line 115
    
    Notice: Undefined variable: mois in C:\wamp64\www\24\app\process\receipts.php on line 116
            <?php
    
            if(session_status() == PHP_SESSION_NONE){
                session_start();
            }
            
    
            /*Avant l'insertion de la quittance, vérifier si la quittance n'est pas déjà ouverte pour ce 
              locataire pour le mois courant.
            */
    
            //---------------------------------------------------------------//
            //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');
    
                /**
                * Fonction pour créer une quittance
                */
    
            
                function creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice ){
                $db = getDB();
                $id = $_SESSION['auth']->id; 
                $stmt = $db->query("  SELECT next_new_invoice  FROM users WHERE   ".$_SESSION['auth']->id." = id", PDO::PARAM_STR);
                $stmt->bindValue("id", $id, PDO::PARAM_INT);
                $donnees = $stmt->fetch();
    
                //echo $donnees['next_new_invoice'];
                $id_invoice = $donnees['next_new_invoice'];
                //$id_invoice++;
       
    
                //echo $id_invoice;
                $id_invoice++; echo '<br>';  
               // echo $id_invoice;
    
                $receipt=$id_invoice;
                $stmt = $db->prepare("INSERT INTO receipt (receipt, id_customers,  room_number)  VALUES(:receipt, :id_customers,  :room_number)");
                $stmt->bindParam("id_customers", $id_customers,PDO::PARAM_INT);
                $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
                $stmt->bindParam("room_number", $room_number,PDO::PARAM_INT);
                $stmt->execute();
    
                $receipt=$id_invoice;
                $stmt = $db->prepare("INSERT INTO state (id_state, receipt, creation_date, month, year) VALUES(:id_state,  :receipt , :creation_date, :month, :year )");
                $stmt->bindParam("id_state", $id_state,PDO::PARAM_INT);
                $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
                $stmt->bindParam(':creation_date', $creation_date,PDO::PARAM_STR);
                $stmt->bindParam(':month', $month,PDO::PARAM_STR);
                $stmt->bindParam(':year', $year,PDO::PARAM_STR);
                $stmt->execute();
    
    
                //mise à jour du prochain numéro de quittance
                $next_new_invoice=$id_invoice;
                //echo  $next_new_invoice;
                $stmt = $db->prepare("UPDATE users SET  next_new_invoice='$next_new_invoice'  WHERE ".$_SESSION['auth']->id." = id" );
                $stmt->bindParam('next_new_invoice', $_GET['next_new_invoice'], PDO::PARAM_INT);
                $stmt->bindValue("id", $id, PDO::PARAM_INT);
                $stmt->execute();
    
                }
    
             
    
              //---------------------------------------------------//
            // 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
            //---------------------------------------------------//
    
            $receipt = !empty($_POST["receipt"]) ? $_POST["receipt"] : NULL;
            $id_customers = !empty($_POST["id_customers"]) ? $_POST["id_customers"] : NULL;
            $room_number = !empty($_POST["room_number"]) ? $_POST["room_number"] : NULL;
            $id_state = !empty($_POST["id_state"]) ? $_POST["id_state"] : NULL;
            $creation_date = !empty($_POST["creation_date"]) ? $_POST["creation_date"] : NULL;
            $month = !empty($_POST["month"]) ? $_POST["month"] : NULL;
            $year = !empty($_POST["year"]) ? $_POST["year"] : NULL;
    
            $next_new_invoice = !empty($_POST["next_new_invoice"]) ? $_POST["next_new_invoice"] : NULL;
    
            $createReceipt = isset($_POST["createReceipt"]) ? $_POST["createReceipt"] : NULL;
    
    
    
    
    
    
            //---------------------------------------------------//
            // Traitement du formulaire
            //---------------------------------------------------//
            if(!empty($_POST)) {
    
            $errors =array();
    
    
    
          
    
    
    
    
    
    
              $db = getDB();
              $stmt = $db->query("SELECT * FROM  `state` S LEFT JOIN receipt R ON R.receipt  = S.receipt WHERE id_customers = '$id_customers'
              AND  room_number  = '$roomNumber' AND S.month = '$mois' ");
              $donnees = $stmt->fetch();
    
    
               echo  $id_customers ; echo '<br';
               echo  $roomNumber ;  echo '<br';
               echo $mois ;
    
    
                  
    
      
    
               // Si il n'y a pas d'erreurs ...
             if(empty($errors)) {
    
    
             if(isset($createReceipt)){ 
                 //On crée la quittance si toutes les conditions sont réunies
                creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice );  
               // header('Location: ../array/receipts.php');
             //  echo "<script type='text/javascript'>document.location.replace('../array/receipts.php');</script>";
                 exit; //toujours mettre un exit après une redirection
            } 
    
    
    }
    }
    1. Modérateur
      <?php
      
      
        if(session_status() == PHP_SESSION_NONE){
            session_start();
        }
        
      
        /*Avant l'insertion de la quittance, vérifier si la quittance n'est pas déjà ouverte pour ce 
          locataire pour le mois courant.
        */
      
        //---------------------------------------------------------------//
        //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');
      
            /**
            * Fonction pour créer une quittance
            */
      
      
            function creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice ){
      
      
                $db = getDB();
                
                $sql = " SELECT receipt.id_customers, showin, month 
                          FROM receipt 
                          LEFT JOIN customers ON (receipt.id_customers=customers.id_customers)
                          WHERE receipt.id_customers = '$id_customers' AND month='$month'";
                $stmt = $db->query($sql);
      
                $donnees = $stmt->fetch();
      
               if (!empty($donnees)) {    
      
                 echo   ' 
                    <section >
                    <div class="alert alert-danger">
                           <ul> 
                           la quittance pour <b>'.$donnees['showin'].' </b> est deja ouverte pour ce mois-ci.
                          </ul>
                          </div>
                      </section>
                          ';
                  return false;
      
               } else {
      
      
                   $id = $_SESSION['auth']->id; 
                   $stmt = $db->query("  SELECT next_new_invoice  FROM users WHERE   ".$_SESSION['auth']->id." = id", PDO::PARAM_STR);
                   $stmt->bindValue("id", $id, PDO::PARAM_INT);
                   $donnees = $stmt->fetch();
      
                   //echo $donnees['next_new_invoice'];
                   $id_invoice = $donnees['next_new_invoice'];
                  //$id_invoice++;
      
      
                   //echo $id_invoice;
                   $id_invoice++; echo '<br>';  
                   // echo $id_invoice;
      
                   $receipt=$id_invoice;
                   $stmt = $db->prepare("INSERT INTO receipt (receipt, id_customers,  room_number, month, year)  VALUES(:receipt, :id_customers,  :room_number , :month, :year)");
                   $stmt->bindParam("id_customers", $id_customers,PDO::PARAM_INT);
                   $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
                   $stmt->bindParam("room_number", $room_number,PDO::PARAM_INT);
                   $stmt->bindParam(':month', $month,PDO::PARAM_STR);
                   $stmt->bindParam(':year', $year,PDO::PARAM_STR);
                   $stmt->execute();
                   
                   $receipt=$id_invoice;
                   $stmt = $db->prepare("INSERT INTO state (id_state, receipt, creation_date) VALUES(:id_state,  :receipt , :creation_date )");
                   $stmt->bindParam("id_state", $id_state,PDO::PARAM_INT);
                   $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
                   $stmt->bindParam(':creation_date', $creation_date,PDO::PARAM_STR);
                   $stmt->execute();
                   
                  //mise à jour du prochain numéro de quittance
                   $next_new_invoice=$id_invoice;
                  //echo  $next_new_invoice;
                   $stmt = $db->prepare("UPDATE users SET  next_new_invoice='$next_new_invoice'  WHERE ".$_SESSION['auth']->id." = id" );
                   $stmt->bindParam('next_new_invoice', $_GET['next_new_invoice'], PDO::PARAM_INT);
                   $stmt->bindValue("id", $id, PDO::PARAM_INT);
                   $stmt->execute();
                  
                   return true;
               }
      
      
           }
      
      
      
      
      
      
          //---------------------------------------------------//
        // 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
        //---------------------------------------------------//
      
           $receipt = !empty($_POST["receipt"]) ? $_POST["receipt"] : NULL;
           $id_customers = !empty($_POST["id_customers"]) ? $_POST["id_customers"] : NULL;
           $room_number = !empty($_POST["room_number"]) ? $_POST["room_number"] : NULL;
           $id_state = !empty($_POST["id_state"]) ? $_POST["id_state"] : NULL;
           $creation_date = !empty($_POST["creation_date"]) ? $_POST["creation_date"] : NULL;
           $month = !empty($_POST["month"]) ? $_POST["month"] : NULL;
           $year = !empty($_POST["year"]) ? $_POST["year"] : NULL;
      
           $next_new_invoice = !empty($_POST["next_new_invoice"]) ? $_POST["next_new_invoice"] : NULL;
      
           $createReceipt = isset($_POST["createReceipt"]) ? $_POST["createReceipt"] : NULL;
      
      
        //---------------------------------------------------//
        // Traitement du formulaire
        //---------------------------------------------------//
           if(!empty($_POST)) {
      
            $errors =array();
      
      
           // Si il n'y a pas d'erreurs ...
           if(empty($errors)) {
      
      
             if(isset($createReceipt)){ 
             //On crée la quittance si toutes les conditions sont réunies
                $result = creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice );  
             if( $result == true ){ 
                // header('Location: ../array/receipts.php');
                echo "<script type='text/javascript'>document.location.replace('../array/receipts.php');</script>";
                exit; //toujours mettre un exit après une redirection
             }
         } 
      
      
      }
      }
  2. Merci Jorane, je vais essayer ça.

    Je met des copies d'écran des tables avec des données dedans.

    Table state

    table receipt (quittance)

    Table rooms

    Table customers

    1. Modérateur

      Tu n'as pas donné d'exemple de données... donc je ne peux qu'imaginer le fonctionnement

      Donc..

      Avec une requête de ce genre, tu pourras vérifier si une quittance existe en fonction des paramètres voulus (mois, id_customers et numéro de chambre )

      SELECT *
      FROM  `state` S
      LEFT JOIN receipt R ON R.receipt  = S.receipt 
      WHERE id_customers = '$id_customers'
       AND  room_number  = '$roomNumber'
       AND S.month = '$mois'
       

      1.  J'ai les  messages d'erreur ci-dessous :

        ( ! ) Notice: Undefined variable: roomNumber in C:\wamp64\www\24\app\process\receipts.php on line 110
        
         Notice: Undefined variable: mois in C:\wamp64\www\24\app\process\receipts.php on line 110
        ( ! ) Notice: Undefined variable: roomNumber in C:\wamp64\www\24\app\process\receipts.php on line 115
        
        Notice: Undefined variable: mois in C:\wamp64\www\24\app\process\receipts.php on line 116
                <?php
        
                if(session_status() == PHP_SESSION_NONE){
                    session_start();
                }
                
        
                /*Avant l'insertion de la quittance, vérifier si la quittance n'est pas déjà ouverte pour ce 
                  locataire pour le mois courant.
                */
        
                //---------------------------------------------------------------//
                //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');
        
                    /**
                    * Fonction pour créer une quittance
                    */
        
                
                    function creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice ){
                    $db = getDB();
                    $id = $_SESSION['auth']->id; 
                    $stmt = $db->query("  SELECT next_new_invoice  FROM users WHERE   ".$_SESSION['auth']->id." = id", PDO::PARAM_STR);
                    $stmt->bindValue("id", $id, PDO::PARAM_INT);
                    $donnees = $stmt->fetch();
        
                    //echo $donnees['next_new_invoice'];
                    $id_invoice = $donnees['next_new_invoice'];
                    //$id_invoice++;
           
        
                    //echo $id_invoice;
                    $id_invoice++; echo '<br>';  
                   // echo $id_invoice;
        
                    $receipt=$id_invoice;
                    $stmt = $db->prepare("INSERT INTO receipt (receipt, id_customers,  room_number)  VALUES(:receipt, :id_customers,  :room_number)");
                    $stmt->bindParam("id_customers", $id_customers,PDO::PARAM_INT);
                    $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
                    $stmt->bindParam("room_number", $room_number,PDO::PARAM_INT);
                    $stmt->execute();
        
                    $receipt=$id_invoice;
                    $stmt = $db->prepare("INSERT INTO state (id_state, receipt, creation_date, month, year) VALUES(:id_state,  :receipt , :creation_date, :month, :year )");
                    $stmt->bindParam("id_state", $id_state,PDO::PARAM_INT);
                    $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
                    $stmt->bindParam(':creation_date', $creation_date,PDO::PARAM_STR);
                    $stmt->bindParam(':month', $month,PDO::PARAM_STR);
                    $stmt->bindParam(':year', $year,PDO::PARAM_STR);
                    $stmt->execute();
        
        
                    //mise à jour du prochain numéro de quittance
                    $next_new_invoice=$id_invoice;
                    //echo  $next_new_invoice;
                    $stmt = $db->prepare("UPDATE users SET  next_new_invoice='$next_new_invoice'  WHERE ".$_SESSION['auth']->id." = id" );
                    $stmt->bindParam('next_new_invoice', $_GET['next_new_invoice'], PDO::PARAM_INT);
                    $stmt->bindValue("id", $id, PDO::PARAM_INT);
                    $stmt->execute();
        
                    }
        
                 
        
                  //---------------------------------------------------//
                // 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
                //---------------------------------------------------//
        
                $receipt = !empty($_POST["receipt"]) ? $_POST["receipt"] : NULL;
                $id_customers = !empty($_POST["id_customers"]) ? $_POST["id_customers"] : NULL;
                $room_number = !empty($_POST["room_number"]) ? $_POST["room_number"] : NULL;
                $id_state = !empty($_POST["id_state"]) ? $_POST["id_state"] : NULL;
                $creation_date = !empty($_POST["creation_date"]) ? $_POST["creation_date"] : NULL;
                $month = !empty($_POST["month"]) ? $_POST["month"] : NULL;
                $year = !empty($_POST["year"]) ? $_POST["year"] : NULL;
        
                $next_new_invoice = !empty($_POST["next_new_invoice"]) ? $_POST["next_new_invoice"] : NULL;
        
                $createReceipt = isset($_POST["createReceipt"]) ? $_POST["createReceipt"] : NULL;
        
        
        
        
        
        
                //---------------------------------------------------//
                // Traitement du formulaire
                //---------------------------------------------------//
                if(!empty($_POST)) {
        
                $errors =array();
        
        
        
              
        
        
        
        
        
        
                  $db = getDB();
                  $stmt = $db->query("SELECT * FROM  `state` S LEFT JOIN receipt R ON R.receipt  = S.receipt WHERE id_customers = '$id_customers'
                  AND  room_number  = '$roomNumber' AND S.month = '$mois' ");
                  $donnees = $stmt->fetch();
        
        
                   echo  $id_customers ; echo '<br';
                   echo  $roomNumber ;  echo '<br';
                   echo $mois ;
        
        
                      
        
          
        
                   // Si il n'y a pas d'erreurs ...
                 if(empty($errors)) {
        
        
                 if(isset($createReceipt)){ 
                     //On crée la quittance si toutes les conditions sont réunies
                    creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice );  
                   // header('Location: ../array/receipts.php');
                 //  echo "<script type='text/javascript'>document.location.replace('../array/receipts.php');</script>";
                     exit; //toujours mettre un exit après une redirection
                } 
        
        
        }
        }
      2. J'ai bricoler ce code j'ai ajouter le code de la ligne 28 à 54, ça fonctionne, sauf que 'ai pas le message qui dit que la quiitance pour ce loctaire pour ce mois-ci est déja ouverte. (je l'ai seulement quand je désactive la redirection), avec la redirection il ne la crée pas mais il n'y à pas de message d'erreur.

                <?php
        
                if(session_status() == PHP_SESSION_NONE){
                    session_start();
                }
                
        
                /*Avant l'insertion de la quittance, vérifier si la quittance n'est pas déjà ouverte pour ce 
                  locataire pour le mois courant.
                */
        
                //---------------------------------------------------------------//
                //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');
        
                    /**
                    * Fonction pour créer une quittance
                    */
        
        
                    function creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice ){
        
        
                        $db = getDB();
                        $stmt = $db->query("  SELECT receipt.id_customers, showin, month from receipt LEFT JOIN customers ON (receipt.id_customers=customers.id_customers)
        
                        WHERE receipt.id_customers = '$id_customers' AND month=$month");
        
                        $donnees = $stmt->fetch();
        
                        $today = date("m");  
        
                        echo $today; echo '<br>';
        
        
        
                          if (isset($donnees['id_customers']) == $id_customers  &&  $month == $today OR ($donnees['month']) == $month) {    
        
                       echo   ' 
                          <section >
                          <div class="alert alert-danger">
                                 <ul> 
                                 la quittance pour <b>'.$donnees['showin'].' </b> est deja ouverte pour ce mois-ci.
                                </ul>
                                </div>
                            </section>
                                ';
        
        
                          } else {
        
        
                           $id = $_SESSION['auth']->id; 
                           $stmt = $db->query("  SELECT next_new_invoice  FROM users WHERE   ".$_SESSION['auth']->id." = id", PDO::PARAM_STR);
                           $stmt->bindValue("id", $id, PDO::PARAM_INT);
                           $donnees = $stmt->fetch();
        
                           //echo $donnees['next_new_invoice'];
                           $id_invoice = $donnees['next_new_invoice'];
                          //$id_invoice++;
        
        
                           //echo $id_invoice;
                           $id_invoice++; echo '<br>';  
                           // echo $id_invoice;
        
                           $receipt=$id_invoice;
                           $stmt = $db->prepare("INSERT INTO receipt (receipt, id_customers,  room_number, month, year)  VALUES(:receipt, :id_customers,  :room_number , :month, :year)");
                           $stmt->bindParam("id_customers", $id_customers,PDO::PARAM_INT);
                           $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
                           $stmt->bindParam("room_number", $room_number,PDO::PARAM_INT);
                           $stmt->bindParam(':month', $month,PDO::PARAM_STR);
                           $stmt->bindParam(':year', $year,PDO::PARAM_STR);
                           $stmt->execute();
        
                           $receipt=$id_invoice;
                           $stmt = $db->prepare("INSERT INTO state (id_state, receipt, creation_date) VALUES(:id_state,  :receipt , :creation_date )");
                           $stmt->bindParam("id_state", $id_state,PDO::PARAM_INT);
                           $stmt->bindParam("receipt", $receipt,PDO::PARAM_INT);
                           $stmt->bindParam(':creation_date', $creation_date,PDO::PARAM_STR);
        
                           $stmt->execute();
        
        
                    //mise à jour du prochain numéro de quittance
                           $next_new_invoice=$id_invoice;
                    //echo  $next_new_invoice;
                           $stmt = $db->prepare("UPDATE users SET  next_new_invoice='$next_new_invoice'  WHERE ".$_SESSION['auth']->id." = id" );
                           $stmt->bindParam('next_new_invoice', $_GET['next_new_invoice'], PDO::PARAM_INT);
                           $stmt->bindValue("id", $id, PDO::PARAM_INT);
                           $stmt->execute();
        
                       }
        
        
                   }
        
        
        
        
        
        
                  //---------------------------------------------------//
                // 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
                //---------------------------------------------------//
        
                   $receipt = !empty($_POST["receipt"]) ? $_POST["receipt"] : NULL;
                   $id_customers = !empty($_POST["id_customers"]) ? $_POST["id_customers"] : NULL;
                   $room_number = !empty($_POST["room_number"]) ? $_POST["room_number"] : NULL;
                   $id_state = !empty($_POST["id_state"]) ? $_POST["id_state"] : NULL;
                   $creation_date = !empty($_POST["creation_date"]) ? $_POST["creation_date"] : NULL;
                   $month = !empty($_POST["month"]) ? $_POST["month"] : NULL;
                   $year = !empty($_POST["year"]) ? $_POST["year"] : NULL;
        
                   $next_new_invoice = !empty($_POST["next_new_invoice"]) ? $_POST["next_new_invoice"] : NULL;
        
                   $createReceipt = isset($_POST["createReceipt"]) ? $_POST["createReceipt"] : NULL;
        
        
        
        
        
        
                //---------------------------------------------------//
                // Traitement du formulaire
                //---------------------------------------------------//
                   if(!empty($_POST)) {
        
                    $errors =array();
        
        
                   // Si il n'y a pas d'erreurs ...
                   if(empty($errors)) {
        
        
                     if(isset($createReceipt)){ 
                     //On crée la quittance si toutes les conditions sont réunies
                        creaReceipt($receipt, $id_customers, $room_number, $id_state, $creation_date, $month, $year, $next_new_invoice );  
                   // header('Location: ../array/receipts.php');
                     echo "<script type='text/javascript'>document.location.replace('../array/receipts.php');</script>";
                     exit; //toujours mettre un exit après une redirection
                 } 
        
        
             }
         }
    2. La table state :

      id_state 

      receipt (num de quittance)

      state    (1 ou 2) quand la quittance est à '0' le statut se change, et la quittance va sur la page des quittance acquittées

      month  (mois en cours)

      year    

      La table receipt :

      id_receipt

      receipt  (num de quittance)

      id_customers (id qui provient de la table customers)

      room_number (id qui provient de la table rooms)

      La table customers :

      id_customers

      prenom (+ infos du client)

      La table rooms :

      id_rooms

      id_customers

      room_number (+ infos de la chambre, surface, prix etc...)

      1. Modérateur

        Bonjour

        Ta question concerne davantage les requêtes SQL...

        Et pour pouvoir te répondre il faudrait un minima nous montrer la structure de tes tables voire même nous fournir quelques exemples de données qui s'y trouvent.