Problème avec mes conditions en php

Résolu/Fermé
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - Modifié le 3 août 2022 à 09:32
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 - 6 août 2022 à 20:48

Bonjour a tous

cela fait deux jours que je me bat avec mes conditions en php dans mon bon de commande

l'utilisateur peux choisir entre plusieurs modes de livraison pour chaque pays 

par exemple pour la Belgique

(POSTE-COLIS-BELGIQUE_point)5.50 euro(s)

(POSTE-ENVELLOPPE-belgique)1 euro(s)')
(POSTE-COLIS-BELGIQUE)6.50 euro(s)

(MONDIAL-RELAY-BELGIQUE)3 euro(s)

et ensuite il doit entrer ses coordonnées complètes et notamment son pays

Je souhaite afficher un message d'erreur lorsqu'il choisit par exemple un mode de livraison en belgique et que le pays de son adresse n'est pas belgique 

j'applique donc cette condition qui fonctionne

//message alertes si on choisit livraison poste belgique et que le pays n'est pas belgique 
else if ((($_POST["livraison"]=='(POSTE-COLIS-BELGIQUE_point)5.50 euro(s)') 
or ($_POST["livraison"]=='(POSTE-ENVELLOPPE-belgique)1 euro(s)')
or ($_POST["livraison"]=='(POSTE-COLIS-BELGIQUE)6.50 euro(s)'))
&&($_POST["pays"]<>"Belgique")  )
{echo "0-18"; }

ensuite je veux vérifier que si il choisit mondial relay

que le pays de mondial relay ou le pays de son adresse  est bien Belgique 

donc j'applique cette condition 

//traitement envois mondial relay on controle le pays de poste et de mondial relay par au choix du mode de livraison 
//si on choisit mondial relay belgique et que le pays de mondial relay ou le pays postal pas de belgique
else if (($_POST["livraison"]=='(MONDIAL-RELAY-BELGIQUE)3 euro(s)') 
&&($_POST["pays"]<>"Belgique") 
or($_POST["cb_PAYS"]<>"BE") )
{echo "0-17"; }

Lorsque je mets ces deux conditions la première ne fonctionne plus mais la deuxième oui

c'est a dire pour la première condition 

si je choisi un mode de livraison par poste et que le pays n'est pas Belgique cela me retourne l'erreur echo 0-18 pour la première condition ce qui est bon 

par contre si la condition est vraie cela me retourne l'erreur 17

toujours pour la condition 1

j'en perds mon latin 

25 réponses

flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
5 août 2022 à 22:59

tiens tiens bizarre il me dit que mes variables ne sont pas définies

je mets le massage mais je regarde a cela demain plus en détail 

Notice: Undefined variable: livraison in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: message in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: prix_total in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: frais_fixe in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: remise in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: nouveau_prix in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: prix_depart in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: cb_ID in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: cb_Nom in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: cb_Adresse in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200

Notice: Undefined variable: cb_VILLE in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 200
Erreur ! SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'adressepoint' cannot be null Les datas : Array ( [0] => aa [1] => aa [2] => aaaaa4 [3] => 4444 [4] => dddd [5] => Belgique [6] => aaa@ze.com [7] => [8] => [9] => [10] => [11] => [12] => [{"nom":2007,"prix":0.55,"quantite":"1","url":"https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2007.JPG"}] [13] => [14] => [15] => [16] => [17] => 1 [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => 2022/08/05 )
Notice: Undefined variable: message in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 224

Notice: Undefined variable: cb_ID in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 228

Notice: Undefined variable: cb_Nom in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 229

Notice: Undefined variable: cb_Adresse in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 230

Notice: Undefined variable: cb_VILLE in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 232

Notice: Undefined variable: prix_depart in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 235

Notice: Undefined variable: remise in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 236

Notice: Undefined variable: nouveau_prix in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 237

Notice: Undefined variable: frais_fixe in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 238

Notice: Undefined variable: livraison in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 239

Notice: Undefined variable: prix_total in /home/u434600775/domains/pecheperle.be/public_html/phil/panier/mail.php on line 240
1

voici mon code en entier 

<?php

error_reporting(E_ALL);
// Passez la valeur ci-dessous de 0 à 1 pour afficher les erreurs
ini_set("display_errors", 1);

// Saisissez ici l'adresse mail du destinataire
$destinataire = "s2@gmail.com";

//on récupère PROPREMENT les variables AVANT de les utiliser
$nom = !empty($_POST["nom"]) ? trim($_POST["nom"]) : NULL;
$prenom = !empty($_POST["prenom"]) ? trim($_POST["prenom"]) : NULL;
$adresse = !empty($_POST["adresse"]) ? trim($_POST["adresse"]) : NULL;
$cp = !empty($_POST["cp"]) ? trim($_POST["cp"]) : NULL;
$ville = !empty($_POST["ville"]) ? trim($_POST["ville"]) : NULL;
$pays = !empty($_POST["pays"]) ? trim($_POST["pays"]) : NULL;
$email = !empty($_POST["email"]) ? trim($_POST["email"]) : NULL;
$cb_CP = !empty($_POST["cb_CP"]) ? trim($_POST["cb_CP"]) : NULL;
$cb_PAYS = !empty($_POST["cb_PAYS"]) ? trim($_POST["cb_PAYS"]) : NULL;
$adressepoint = !empty($_POST["adressepoint"]) ? trim($_POST["adressepoint"]) : NULL;
$cppoint = !empty($_POST["cppoint"]) ? trim($_POST["cppoint"]) : NULL;
$villepoint = !empty($_POST["villepoint"]) ? trim($_POST["villepoint"]) : NULL;

$detail_livraison = !empty($_POST["detail_livraison"]) ? trim($_POST["detail_livraison"]) : NULL;
$total_qte_bas = isset($_POST["total_qte_bas"]) ? trim($_POST["total_qte_bas"]) : 0;
$commande = isset($_POST["commande"]) ? trim($_POST["commande"]) : NULL;

$error=null; //on inialise à null la variable error

//on initialise quelques variables pour tester
$date = date('Y/m/d');
$b = $cp;
$c = $cb_CP;
$country = $pays;


//debut des messages d'alertes
//si quanditee est egal a 0
if ($total_qte_bas == '0') {
  $error = "0-18";
} else if ($detail_livraison == '() euro(s)') {
  //si le choix du mode de livraison est le champ cache on affiche une alerte
  $error = "0-15";
}else if (empty($nom)) {
  $error = "0-1";
} else if (empty($prenom)) {
  $error = "0-2";
} else if (empty($adresse)) {
  $error = "0-3";
} else if (empty($cp)) {
  $error = "0-4";
} else if (empty($ville)) {
  $error = "0-5";
} else if (empty($pays)) {
  $error = "0-6";
} else if (empty($email)) {
  $error = "0-7";
} else if (!filter_var(($email), FILTER_VALIDATE_EMAIL)) {
  $error = "0-10";
}else if ($b != filter_var($b, FILTER_VALIDATE_INT)) {
  //on teste afin de savoir si c'est bien un code postal dans le champs adresse de chaque pays
  $error = "0-11";
}elseif (!preg_match('#[\d ]#', ($adresse))) {
  //test de l'adresse il doit y avoir un numero pour tout les pays chaque pays
  $error = "0-13";
}else if ( $country != "Belgique"  && $country != "Luxembourg"  &&  $country != "France"  &&  $country != "Pays-bas" ) {
  //message erreur du choix du pays on doit absolument entrer un des pays autorises
  $error = "0-16";
}


/**
 * GESTION DE LA LIVRAISON
 */


switch($detail_livraison ){
  case '(MONDIAL-RELAY-BELGIQUE)3 euro(s)':
    if(!filter_var($c, FILTER_VALIDATE_INT)){
      $error = "0-8";
    }
    if($pays !== "Belgique" || $cb_PAYS != "BE"){
        $error = "0-17";
    }
    break;
  case '(mondial relay-FRANCE)4 euro(s)':
    if(!filter_var($c, FILTER_VALIDATE_INT)){
      $error = "0-8";
    }
    break;
  case '(mondial relay-LUXEMBOURG)3 euro(s)':
    if(!filter_var($c, FILTER_VALIDATE_INT)){
      $error = "0-8";
    }
    break;
  case '(MONDIAL-RELAY-PAYS-BAS)5 euro(s)':
    if(!filter_var($c, FILTER_VALIDATE_INT)){
      $error = "0-8";
    }
    if($pays != "Pays-bas" || $cb_PAYS != "NL") {
      $error = "0-17";
    }
    break;
  case '(POSTE-ENVELLOPPE-PAYS-BAS)2 euro(s)':
    if( $pays != "Pays-bas") {
      $error = "0-17";
    }
    break;

  case '(POSTE-COLIS-BELGIQUE_point)5.50 euro(s)':
    if($pays != "Belgique") {
      $error = "0-17";
    }
    if( !$adressepoint || !$cppoint || !$villepoint) {
      $error = "0-9";
    }
    break;
  case '(POSTE-ENVELLOPPE-belgique)1 euro(s)':  
  case '(POSTE-COLIS-BELGIQUE)6.50 euro(s)':
    if($pays != "Belgique") {
      $error = "0-17";
    }
    break;
  case '(POSTE-ENVELLOPPE-LUXEMBOURG)1.50 euro(s)':
    if($pays != "Luxembourg") {
      $error = "0-17";
    }
    break;
  case '(mondial relay-LUXEMBOURG)3 euro(s)':
    if($pays != "Luxembourg" || $cb_PAYS != "LU") {
      $error = "0-17";
    }
    break;
  case '(POSTE-ENVELLOPPE-FRANCE)2 euro(s)':
    if($pays != "France") {
      $error = "0-17";
    }
    break;
  case '(POSTE-ENVELLOPPE-FRANCE)4 euro(s)':
    if($pays != "France" ||  $cb_PAYS != "FR") {
      $error = "0-17";
    }
    break;
  //default:
    //aucune erreur detectée
    //$error = "Aucune erreur detectée "; //tu pourras retirer ce $error = quand tout marchera bien
}

// AUTRE ERREUR
//message alertes si autre probleme
if (!$commande) {
  $error = "0-21";
}  // code d'erreur si c'est pas bon pour la commande



//une fois tous les tests terminés..
// tu peux faire le echo de ton erreur si il y en a une... ou faire le reste de ton code

if(!empty($error)){
  echo $error;
}else{
    
  //ici ton insert en bdd et ton envoi de mail
  
// je commence a decompresser commande pour recuperer les champs   
$data = $commande;
$decoded = json_decode($data);
$mailData = "";
foreach ($decoded as $curr_element) {
    $fieldName = $curr_element->nom;
    $fieldQty = $curr_element->quantite;
    $fieldPrice = $curr_element->prix;
    $fieldimg = $curr_element->url;
    if ( $fieldQty != 0 ) {
        if ($fieldPrice != 0) {
           $input =  '<div style ="border:solid;"> 
           <div style ="float: left;width: 50%;"> Numéro</div >
           <div style =""> ' . $fieldName . '</div>
            <div style ="float: left;width: 50%;"> qanditée</div >
           <div style =""> ' . $fieldQty . '</div >
           <div style ="float: left;width: 50%;"> Prix unitaire</div >
           <div style ="">  ' . $fieldPrice . 'euros</div>
           <div style ="float: left;width: 50%;"> Image</div >
          <div style =""> <img src=""' . $fieldimg . '" alt="HTML tutorial" style="width:150px;height:150px;"></div>
          <div style ="float: left;width:50%"> Prix total pour le numéro de perle ' . $fieldName . '</div >
          
           <div style ="">  ' . ($fieldPrice * $fieldQty) . 'euros </div></div><br><br><br>';
            $mailData .= $input;
            }
    } 
}

//debut insertion base de donnee
include('base.php');

//préparation de la requête et des variables
 $sql = "INSERT INTO commander (nom, prenom,adresse, cp,ville,pays,email,adressepoint,cppoint,villepoint,livraison,message,commande,prix_total,frais_fixe,remise ,nouveau_prix,total_qte_bas,prix_depart,cb_ID,cb_Nom,cb_Adresse,cb_CP,cb_VILLE,cb_PAYS,date ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

 $datas = array($nom , $prenom ,$adresse, $cp, $ville,$pays,$email,$adressepoint,$cppoint,$villepoint,$livraison, $message, $commande ,$prix_total,$frais_fixe,$remise,$nouveau_prix,$total_qte_bas,$prix_depart,$cb_ID,$cb_Nom,$cb_Adresse,$cb_CP,$cb_VILLE,$cb_PAYS,$date);

//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}
$multiplicateur=3;
$total_perle=$total_qte_bas*$multiplicateur;

$sujet = 'Commande reçue';
$messagez = "
Nom:<span style='color:red;font-weight: bold;'> ".$nom."</span><br>
Prénom: <span style='color:red;font-weight: bold;'> ".$prenom."</span><br>
Code postal: <span style='color:red;font-weight: bold;'> ".$cp."</span><br>
adresse:<span style='color:red;font-weight: bold;'> ".$adresse."</span><br>
Ville: <span style='color:red;font-weight: bold;'> ".$ville."</span><br>
pays: <span style='color:red;font-weight: bold;'> ".$pays."</span><br>
Adresse e-Mail:<span style='color:red;font-weight: bold;'> ".$email."</span><br>
Message:<span style='color:red;font-weight: bold;'> ".$message."</span><br>
adressepoint:<span style='color:red;font-weight: bold;'> ".$adressepoint."</span><br>
cppoint:<span style='color:red;font-weight: bold;'> ".$cppoint."</span><br>
villepoint::<span style='color:red;font-weight: bold;'> ".$villepoint."</span><br>
ID de mondial_relay:<span style='color:red;font-weight: bold;'> ".$cb_ID."</span><br>
nom de mondial_relay:<span style='color:red;font-weight: bold;'> ".$cb_Nom."</span><br>
adresse de mondial_relay::<span style='color:red;font-weight: bold;'> ".$cb_Adresse."</span><br>
code postal de mondial_relay:<span style='color:red;font-weight: bold;'> ".$cb_CP."</span><br>
ville de mondial_relay:<span style='color:red;font-weight: bold;'> ".$cb_VILLE."</span><br>
pays de mondial_relay:<span style='color:red;font-weight: bold;'> ".$cb_PAYS."</span><br>
Total absolu de sachets :<span style='color:red;font-weight: bold;'> ".$total_qte_bas."</span><br>
prix depart :<span style='color:red;font-weight: bold;'> ".$prix_depart."</span>euros<br>
Remise :<span style='color:red;font-weight: bold;'> ".$remise ."</span>euros<br>
nouveau prix :<span style='color:red;font-weight: bold;'> ".$nouveau_prix."</span>euros<br>
frais fixe:<span style='color:red;font-weight: bold;'> ".$frais_fixe."</span>euros<br>
Mode de livraison: <span style='color:red;font-weight: bold;'> ".$livraison."</span>euros<br>
Le prix Total :<span style='color:red;font-weight: bold;'> ".$prix_total."</span>euros";

$headers = "From: \"Commande\"<".$destinataire.">\n";
$headers .= "Reply-To: ".$destinataire."\n";
$headers .= "Content-Type: text/html; charset=\"utf-8\"";

 if(mail($destinataire,$sujet,$messagez,$headers))
  {
    echo "1";
   }
  else
  {
    echo "0"; // dernière erreur possible, la fonction mail a échoué
  }
}

?>
0
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
5 août 2022 à 23:16

ah ok je viens de comprendre ce qui provoque les erreurs je corrige demain 

0
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
5 août 2022 à 23:37

il ne me reste plus que cette erreur  

pourtant j'ai tout vérifier , mais je tombe de sommeil 

je revérifie demain  

Erreur ! SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'adressepoint' cannot be null Les datas : Array ( [0] => dd [1] => dd [2] => ddd1 [3] => 444 [4] => dd [5] => Belgique [6] => ddd@ze.com [7] => [8] => [9] => [10] => (POSTE-ENVELLOPPE-belgique)1 euro(s) [11] => [12] => [{"nom":2007,"prix":0.55,"quantite":"1","url":"https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2007.JPG"}] [13] => 1.55 [14] => [15] => [16] => [17] => 1 [18] => 0.55 [19] => [20] => [21] => [22] => [23] => [24] => [25] => 2022/08/05 ) 1
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
6 août 2022 à 09:07

Pourquoi as-tu configuré cette contrainte?

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024
6 août 2022 à 11:58

ah si je le savais ...j'essaye de comprendre ce message d'erreur

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
6 août 2022 à 13:21

Que ne comprends-tu pas dans:

Integrity constraint violation: 1048 Column 'adressepoint' cannot be null

https://www.deepl.com/translator#en/fr/Integrity%20constraint%20violation%3A%201048%20Column%20'adressepoint'%20cannot%20be%20null

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024
6 août 2022 à 13:26

Merci pour la réponse pourtant elle n'est pas nul

Voici une copie d'écran de ma base

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
6 août 2022 à 13:55

Que comprends-tu du message d'erreur?

Eh bien si, elle est nulle: quelle valeur y introduis-tu?

0
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
6 août 2022 à 12:29

je n'avais pas fait attention mais rien ne rentre dans ma base de donnée depuis que j'effectue ces modifications 

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
6 août 2022 à 13:25

Tu n'as non plus fait attention au message de Jordane le 4 août 2022 à 12:19.

Pas très respectueux de poser des questions et d'ignorer les réponses.

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024
Modifié le 6 août 2022 à 13:54

ah oui juste j'avais zapper cette requête avec les autres soucis 

Donc cela proviendrait de ma requête 

une belle erreur ..pourtant tout me semble correct ...

Je viens d'essayer avec a version que j'ai garder mais non corriger par jordane qui possède exactement la même requête et tout ce passe bien 

Aucune erreur dans cette ancienne version sauf que conditions pour les pays ne fonctionnent pas 

Donc cela se passe ailleurs que dans la requête 

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
6 août 2022 à 16:33

voila c'est réglé enfin 

bon ben je me doutais bien que était du  fait que je mettais NULL a la récupération des variables 

Et comme elles ne sont pas renseigner dans le bon de commande elles restent donc a NULL au lieu et place de prendre une valeur et cela sql n'aime pas

Alors pourquoi je n'ai pas mis 0 avant , tout simplement que je n'ai pas d'explication 

Apparemment donc a présent tout fonctionne

Je refais des tests et je reviens dire quoi 

Je souhaiterais néanmoins remercier jordane et yg_be pour leurs pédagogie et patience 

En même temps je suis très respectueux de l'aide fournie c'est la raison pour laquelle que même lorsque la solution fonctionne je reviens remercier 

Car j'ai pu remarquer que bien souvent très souvent ou trop souvent les aides apportées restent sans réponses de la part des membres en difficultés 

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
6 août 2022 à 20:48

Tu te trompes quand tu écris "cela sql n'aime pas".

En réalité, c'est toi qui a donné ordre à SQL de refuser une valeur nulle pour ce champ.

La prochaine fois, prend le temps de réfléchir à tes choix.

0