11528 sujets

JavaScript, DOM et API Web HTML5

bonjour a tous
dans un but pédagogique , mais également dans un but pour améliorer mon panier je souhaiterais comprendre la gestion des erreurs du formulaire d'envois
afin de pouvoir signifier un message diffèrent par champs oublié
pour l'instant si on oublie un nom , prenom, cp,ville,pays, email
il y a une modal qui s'ouvre et signifie une erreur générale en cas d'oubli d'un champ

d'après ce que je peux comprendre au niveau du code que j'ai trouvé
cela est testé dans cette partie
il envois les données vers mail.php
et au niveau de mail.php
on vérifie si les champs sont vides ou pas ...
donc ces champs devraient être vérifier avant l'envois vers mail.php ?

						function commander(nom,prenom,cp,email,commande,prix_total,message,ville,detail_livraison,nom_mondial, adresse_mondial,cp_mondial,ville_mondial,pays_mondial){
	$.ajax({
		url : 'mail.php',
		type : 'POST', 
		data : 'nom=' + nom + '&prenom=' + prenom + '&cp=' + cp + '&email=' + email + '&commande=' + commande + '&prix_total=' + prix_total + '&message=' + message + '&ville=' + ville + '&livraison=' + detail_livraison + '&nom_mondial=' + nom_mondial + '&adresse_mondial=' + adresse_mondial + '&cp_mondial=' + cp_mondial + '&ville_mondial=' + ville_mondial + '&pays_mondial=' + pays_mondial,
		dataType : 'html',
		success : function(reponse){
			if (reponse == "1"){
				MonPanier.clearpanier();
				afficherpanier();	
				document.body.scrollTop = 0;
				document.documentElement.scrollTop = 0;
				$('#mymodal').modal('show');	
			}
			if (reponse == "0"){
				$('#mymodal_erreur').modal('show');
			}
		}
	});
}


partie de mail.php
if ((isset($_POST["nom"]) && ($_POST["nom"] != "")) 
&& (isset($_POST["prenom"]) && ($_POST["prenom"] != ""))
&& (isset($_POST["cp"]) && ($_POST["cp"] != ""))
&& (isset($_POST["ville"]) && ($_POST["ville"] != ""))
&& (isset($_POST["pays"]) && ($_POST["pays"] != ""))
&& (isset($_POST["email"]) && ($_POST["email"] != ""))
&& (isset($_POST["livraison"]) && ($_POST["livraison"] != ""))
&& (isset($_POST["commande"]) && ($_POST["commande"] != ""))
)
Modérateur
Bonjour,

Dans mail.php, il doit actuellement y avoir des echo "1" et des echo "0" selon qu'il y a une erreur ou pas. Tu peux très bien remplacer les echo "0" par des echo "0-1", echo "0-2", etc. (ou tout autre chaine de caractère d'ailleurs) selon l'erreur commise. Par exemple :
if (!isset($_POST["nom"]) || ($_POST["nom"]=="")) echo "0-1";
else if (!isset($_POST["prenom"]) || ($_POST["prenom"]=="")) echo "0-2";
else if (!isset($_POST["cp"]) || ($_POST["cp"])=="")) echo "0-3";
...
else echo "1"; // tout est ok


Et ensuite, dans la fonction javascript "commander(), à l'endroit où tu testes if (reponse == "0"){, tu peux remplacer cette condition par une série de conditions if (reponse == "0-1"){, if (reponse == "0-2"){, etc. et afficher une boite modale appropriée à chaque cas.

Amicalement,
Bonjour
Merci pour la réponse et de l'aide
en effet j'ai bien des echos en bout de code que je n'avais pas vu

<?php 
error_reporting(E_ALL);
// Passez la valeur ci-dessous de 0 à 1 pour afficher les erreurs
ini_set("display_errors", 0);
$date=date('Y/m/d'); 
// Saisissez ici l'adresse mail du destinataire
$destinataire = "tal.be@gmail.com";

if (   (isset($_POST["nom"]) && ($_POST["nom"] != "")) 
&& (isset($_POST["prenom"]) && ($_POST["prenom"] != ""))
&& (isset($_POST["cp"]) && ($_POST["cp"] != ""))
&& (isset($_POST["ville"]) && ($_POST["ville"] != ""))
&& (isset($_POST["email"]) && ($_POST["email"] != ""))
&& (isset($_POST["commande"]) && ($_POST["commande"] != ""))
)
{
$nom = htmlspecialchars($_POST["nom"], ENT_QUOTES);
$prenom = htmlspecialchars($_POST["prenom"], ENT_QUOTES);
$cp = htmlspecialchars($_POST["cp"], ENT_QUOTES);
$ville = htmlspecialchars($_POST["ville"], ENT_QUOTES);
$email = htmlspecialchars($_POST["email"], ENT_QUOTES);
$nom_mondial = htmlspecialchars($_POST["nom_mondial"], ENT_QUOTES);
$adresse_mondial = htmlspecialchars($_POST["adresse_mondial"], ENT_QUOTES);
$cp_mondial = htmlspecialchars($_POST["cp_mondial"], ENT_QUOTES);
$ville_mondial = htmlspecialchars($_POST["ville_mondial"], ENT_QUOTES);
$pays_mondial = htmlspecialchars($_POST["pays_mondial"], ENT_QUOTES);
$message = nl2br(htmlspecialchars($_POST["message"], ENT_QUOTES));
$commande = $_POST["commande"];
$prix_total = htmlspecialchars($_POST["prix_total"], ENT_QUOTES);
$livraison = htmlspecialchars($_POST["livraison"], ENT_QUOTES);
$data = $commande;
$decoded = json_decode($data);
$mailData = "";
foreach ($decoded as $curr_element) {
    $fieldName = $curr_element->nom;
    $fieldQty = $curr_element->quantite;
    $fieldPrice = $curr_element->prix;
    if ( $fieldQty != 0 ) {
        if ($fieldPrice != 0) {
            $input = $fieldName .': <br />
            Qty: ' .$fieldQty. '<br />
            Price: ' . $fieldPrice . '<br />
            Total: ' . ($fieldPrice*$fieldQty) . 
            '<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,  cp,ville,email,livraison,message,commande,prix_total,nom_mondial,adresse_mondial,cp_mondial,ville_mondial,pays_mondial,date ) VALUES(?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?)";

 $datas = array($nom , $prenom , $cp, $ville, $email, $livraison, $message, $commande ,$prix_total,$nom_mondial,$adresse_mondial,$cp_mondial,$ville_mondial,$pays_mondial,$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);
}
$sujet = 'Commande reçue';
$messagez = "Nom: ".$nom."<br>
Prénom: ".$prenom."<br>
Code postal: ".$cp."<br>
Ville: ".$ville."<br>
Adresse e-Mail: ".$email."<br>
Message: ".$message."<br>

mondial_relay: ".$nom_mondial."<br>
mondial_relay: ".$adresse_mondial."<br>
mondial_relay: ".$cp_mondial."<br>
mondial_relay: ".$ville_mondial."<br>
mondial_relay: ".$pays_mondial."<br>
$email_body = $mailData

Mode de livraison: ".$livraison."
mondial_relay: ".$livraison."<br>
Prix Total: ".$prix_total."";

$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";
echo $message;
}
else
{
echo "0";
}
}
else echo "0";

?>;


donc je devrais réorganiser mon code en remplaçant entre autre cette partie

if (   (isset($_POST["nom"]) && ($_POST["nom"] != "")) 
&& (isset($_POST["prenom"]) && ($_POST["prenom"] != ""))
&& (isset($_POST["cp"]) && ($_POST["cp"] != ""))
&& (isset($_POST["ville"]) && ($_POST["ville"] != ""))
&& (isset($_POST["email"]) && ($_POST["email"] != ""))
&& (isset($_POST["commande"]) && ($_POST["commande"] != ""))


Amicalement
voila
j'ai enfin réussi
Mais j'ai juste un problème avec la commande
pourtant tout me semble bon ...
je poste mes codes
sauf les modals que j'ai contrôlé 10 fois ...

voici le code coté modal
		success : function(reponse){
			if (reponse == "1"){
				MonPanier.clearpanier();
				afficherpanier();	
				document.body.scrollTop = 0;
				document.documentElement.scrollTop = 0;
				$('#mymodal').modal('show');	
			}
			if (reponse == "0"){
	    						$('#mymodal_erreur').modal('show');
			}
			if (reponse == "0-1"){
	    						$('#mymodal_erreur_1').modal('show');
			}
				if (reponse == "0-2"){
	    						$('#mymodal_erreur_2').modal('show');
			}
				if (reponse == "0-3"){
	    						$('#mymodal_erreur_3').modal('show');
			}
				if (reponse == "0-4"){
	    						$('#mymodal_erreur_4').modal('show');
			}
				if (reponse == "0-5"){
	    						$('#mymodal_erreur_5').modal('show');
	    	}
	    		if (reponse == "0-6"){
	    						$('#mymodal_erreur_6').modal('show');
			}
		

		}


et côté mail
<?php 
error_reporting(E_ALL);
// Passez la valeur ci-dessous de 0 à 1 pour afficher les erreurs
ini_set("display_errors", 0);
$date=date('Y/m/d'); 
// Saisissez ici l'adresse mail du destinataire
$destinataire = "tal@gmail.com";

if (!isset($_POST["nom"]) || ($_POST["nom"]=="")) 
{ echo "0-1"; } 
else if (!isset($_POST["prenom"]) || ($_POST["prenom"]==""))
{echo "0-2"; } 
else if (!isset($_POST["cp"]) || ($_POST["cp"]=="")) 
{echo "0-3"; } 
else if (!isset($_POST["ville"]) || ($_POST["ville"]==""))
{echo "0-4"; } 
else if (!isset($_POST["pays"]) || ($_POST["pays"]==""))
{echo "0-5"; } 
else if (!isset($_POST["email"]) || ($_POST["email"]=="")) 
{echo "0-6"; } 
else if (!isset($_POST["commande"]) || ($_POST["commande"]=="")) 
   { 
$nom = htmlspecialchars($_POST["nom"], ENT_QUOTES);
$prenom = htmlspecialchars($_POST["prenom"], ENT_QUOTES);
$cp = htmlspecialchars($_POST["cp"], ENT_QUOTES);
$ville = htmlspecialchars($_POST["ville"], ENT_QUOTES);
$pays = htmlspecialchars($_POST["pays"], ENT_QUOTES);
$email = htmlspecialchars($_POST["email"], ENT_QUOTES);
$nom_mondial = htmlspecialchars($_POST["nom_mondial"], ENT_QUOTES);
$adresse_mondial = htmlspecialchars($_POST["adresse_mondial"], ENT_QUOTES);
$cp_mondial = htmlspecialchars($_POST["cp_mondial"], ENT_QUOTES);
$ville_mondial = htmlspecialchars($_POST["ville_mondial"], ENT_QUOTES);
$pays_mondial = htmlspecialchars($_POST["pays_mondial"], ENT_QUOTES);
$message = htmlspecialchars($_POST["message"], ENT_QUOTES);
$commande = $_POST["commande"];
$prix_total = htmlspecialchars($_POST["prix_total"], ENT_QUOTES);
$livraison = htmlspecialchars($_POST["livraison"], ENT_QUOTES);

$sujet = 'Commande reçue';
$messagez = "Nom: ".$nom."<br>
Prénom: ".$prenom."<br>
Code postal: ".$cp."<br>
Ville: ".$ville."<br>
pays: ".$pays."<br>
Adresse e-Mail: ".$email."<br>
Message: ".$message."<br>

Mode de livraison: ".$livraison."
mondial_relay: ".$livraison."<br>
Prix Total: ".$prix_total."";

$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";
//echo $message;
//console.log($message);
}
else
{
echo "0";
}
echo "0";
}
else echo "0";


?>

Modifié par flexi2202 (30 Jan 2022 - 21:45)
Modérateur
Bonjour,

La logique de l'ensemble ayant changé, il faut me semble-t-il remplacer
else if (!isset($_POST["commande"]) || ($_POST["commande"]=="")) 
   { 
$nom = htmlspecialchars($_POST["nom"], ENT_QUOTES);
par
else if (!isset($_POST["commande"]) || ($_POST["commande"]=="")) 
   {echo "0-7"; }  // code d'erreur si c'est pas bon pour la commande
else { // tout est bon en ce qui concerne le formulaire, on s'oriente vers un succès
$nom = htmlspecialchars($_POST["nom"], ENT_QUOTES);
Et à la fin, tu n'as plus besoin de tous ces echo "0". Il faudrait remplacer:
if(mail($destinataire,$sujet,$messagez,$headers))
{
echo "1";
//echo $message;
//console.log($message);
}
else
{
echo "0";
}
echo "0";
}
else echo "0";
par
  if(mail($destinataire,$sujet,$messagez,$headers))
  {
    echo "1";
    //echo $message;
    //console.log($message);
  }
  else
  {
    echo "0"; // dernière erreur possible, la fonction mail a échoué
  }
}
Ne pas oublier la dernière accolade fermante qui correspond à l'accolade ouvrante précédant $nom = htmlspecialchars($_POST["nom"], ENT_QUOTES);

Amicalement,
Meilleure solution
bonjour
Super un immense merci
c'est super génial cela fonctionne a merveille
c'est le top

Ce panier m'en fait voir ...