8791 sujets

Développement web côté serveur, CMS

Bonsoir,



Dans un site statique, j'ai actuellement un formulaire php avec un process de vérification des champs renseignés (javascript) au demeurant simple, qui date un peu certes, mais qui fonctionne.
- Les données récoltées sont envoyées par mail ;
- une fenetre pop-up est générée dans le site pour confirmation au internaute,
- un mail récapitulatif est adressé à l'internaute suite à sa demande.

Or, j'aimerais pouvoir faire évoluer ce formulaire, pour un besoin bien précis :
Proposer à l'internaute une selection simple de produits à commander (par des cases à cocher : une ou plusieurs),
Selon la sélection faite, le montant total commandé est variable. Je voudrais renvoyer ce total dans le mail de confirmation à l'acheteur.

On peut probablement additionner avec php ?
voir le formulaire actuel
Merci beaucoup de vos pistes suggérées ou tutoriels en la matière car faire des boucles if, ne sont pas mon code favori Smiley confused
Bouzette
Salut,

pour commencer un seul élément BODY par page est amplement suffisant... et il est très important de renseigner un doctype.

D'une manière générale il faudrait commencer par corriger les erreurs de validation. Smiley cligne

Par exemple l'attribut action d'un formulaire doit être renseigné (pas # donc) et tu pourrais mettre
<form action='<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>' method='post' id="insc">


D'autre part le lancement de la fonction JavaScript Verif devrait être effectuée sur l'évènement onsubmit du formulaire et pas sur le onclick du bouton Envoyer (lire à ce sujet : Comment bien coder en JavaScript). Au passage cet INPUT devrait être de type submit car en l'état on ne peut pas soumettre le formulaire si JavaScript est désactivé.

Pour répondre à ta question il ne faut pas nommer tes checkboxs checkbox1, checkbox2, ..., checkbox6 mais checkbox[] ce qui permet de récupérer un array checkbox et d'utiliser foreach. Pour ce qui est d'effectuer un calcul ça va être difficile avec des value du type "Selection bruns 10 euros (15 coupons 15x15)" donc voilà une solution :
<?php
$packs_ids = array('pack1', 'pack2', 'pack3');
$packs_libelles = array('<strong>-Pack 1</strong> : Sélection Ecru 10€ 15 coupons 15x15', '<strong>-Pack 2</strong> : Sélection Bleu  11€ 15 coupons 15x15', '<strong>-Pack 3</strong> : Sélection Bruns : 10€ (15 coupons 15x15)');
$packs_montants = array(10, 11, 10);

if($_SERVER['REQUEST_METHOD']=='POST') { // Le formulaire a été soumis
	if(!empty($_POST['checkbox'])) {
		$montant_total = 0;
		foreach($_POST['checkbox'] as $checkbox) {
			echo '<p>Pack choisi : '.$packs_ids[$checkbox].' / montant : '.$packs_montants[$checkbox].'€</p>';
			$montant_total += $packs_montants[$checkbox];
		}
		echo '<p><strong>Montant Total : '.$montant_total.'€</p>';
	}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
<title>insc</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form action='<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>' method='post' id="insc">
	<p>Sélectionner vos Packs</p>
	<?php
	for($compteur = 0; $compteur < count($packs_ids); $compteur++) {
		echo '<p><label for="'.$packs_ids[$compteur].'">'.$packs_libelles[$compteur].'</label> <input type="checkbox" name="checkbox[]" id="'.$packs_ids[$compteur].'" value="'.$compteur.'" /></p>';
	}
	?>
	<p><input type="submit" value='ENVOYER' /></p>
</form>
</body>
</html>

Modifié par Heyoan (13 Nov 2009 - 10:21)
Heyoan
Salut Grand Chef !

Quelle aide et conseils précieux l'on m'apporte, je désespérais !
Je m'en vais de ce pas mettre ce code et ces conseils en pratique, et faire les tests nécessaires.

Je ne ferme pas le post dans l'instant mais une fois après avoir apporté mon résultat au bénéfice des lecteurs de ce forum

Merci
Merci Alsacreations !
Smiley cligne
Salut,
Les erreurs de validation ont été corrigées, et le doctype renseigné.

1/ hum………..je patauge dans la hiérarchiedu code que tu m’a communiqué,
.(déclaration du tableau Array())
. à quel endroit placer le renvoi des valeurs des checkbox,
. le calcul (addition des choix),

Le formulaire a bougé de répertoire , le voir


1-J’ai du supprimé la vérif (javascript) sur les checkbox, ça ne le faisait pas
2-A l’affichage, d'emblée il me donne une erreur :

Fatal error: Call to undefined function: array() in /homez.167/filalapa/www/test/insc.php on line 233

3- Dans la confirmation de commande : il me renvoie seulement :

Pack choisi : '..' montant : '..'euros'
 += 
Montant Total : '..'euros'



Alternative au javascript si ce dernier est désactivé, j’ai mis en place la vérification du formulaire en PHP
mais ça buge sur la verif de l’email, et je ne vois pas où!
voir ce formulaire .


Merci de tes directions, indications.
Une apprentie du Php
Smiley rolleyes
Salut,

voir le formulaire en ligne ne nous aide pas puisque le php est interprété : il faut nous montrer le code. Smiley murf

Sinon : est-ce que déjà tu as fait un test avec le code que je t'ai donné... et as-tu compris son fonctionnement ?

Quant à la vérification JavaScript il faut forcément la modifier puisque le nom des checkboxs a changé. D'autre part il n'y a pas besoin d'une autre version en cas de JavaScript désactivé : il faut que celle-ci fonctionne dans tous les cas (JS non intrusif et vérification doublée en php).
Ben oui, j'ai fait des tests et re-tests.. je ne suis pas sûre de mettre au bon endroit :

- les déclarations de tableau array=(),
- le code de calcul, doit être le processus, mais ds mon formulaire de confirmation de cde, je dois renvoyer les variables $résultat (...)

- je viens de réintégrer la vérif javascript sur les checkboox : et il m'empoisonne car il bloque tout dans le processus.

Ci-joint respectivement les codes javascript (extrait) et php (intégralement)

function Verif()
{
		if (document.insc.nom.value=="")
                {
                alert('Veuillez indiquer votre nom');
                document.insc.nom.focus();
                }
        else if (document.insc.prenom.value=="")
                {
                alert('Veuillez indiquer votre prénom');
                document.insc.prenom.focus();        
                }
		else if(document.insc.tel.value=="")
                {
                alert("Veuillez indiquer votre téléphone");
                document.insc.tel.focus();
                } 
		else if(document.insc.email.value=="")
                {
                alert("Veuillez entrer une adresse email\n");
                document.insc.email.focus();
                }
        else if(((document.insc.email.value!='') && (!isMail(document.insc.email.value))))
                {
                alert("Votre adresse email ne semble pas correctement saisie\n Vérifiez que vous n'avez pas oublié le signe @ par exemple");
                document.insc.email.focus();
                }
else if (document.insc.adresse.value=="")
                {
                alert('Veuillez indiquer votre adresse');
                document.insc.adresse.focus();        
                }
else if (document.insc.ville.value=="")
                {
                alert('Veuillez indiquer votre Code Postal et votre Ville');
                document.insc.ville.focus();        
                }

else if((document.insc.checkbox[].checked)&&(document.insc.checkbox[0].checked))
				{
                alert('Veuillez préciser vos choix de pack(s) "Au Fil des Mois" ')
				}	
   			else
                {
                alert('votre commande va être envoyée - merci d\'attendre la confirmation')       
                document.insc.submit();
                }
}	


ci-dessus le code php :


<?php
$packs_ids = array('pack1','pack2','pack3','pack4','pack5','pack6');
$packs_libelles = array('-Pack 1 Sélection ROUGES 13 coupons 15x55cms','-Pack 2 Sélection ECRUS 11 coupons 15x55 cms','-Pack 3 Sélection BRUNS 7 coupons 15x110cms','-Pack 4 Sélection BLEUS 11 coupons 15x55cms','-Pack 5 Sélection VIOLETS 5 coupons 15x110cms','-Pack 6 Sélection VERTS 11 coupons 15x55 cms');
$packs_montants = array(17, 14, 18, 14, 13, 15);

	
$formulaire=$_POST['formulaire'];
if ($formulaire==""){
print("

<form action='#' method='post' name='insc'>
                   <table width='600' border='0'>
					<tr>
					<td colspan='2' align='center'> <img src='logo_form.jpg' alt='logo'> </td>
                     		</tr>
							<tr>
                       		<td colspan='2'><div class='rubrique'>VOS COORDONNEES :</div></td>
                     		</tr>
                     		<tr>
                       		<td width='290'><div class='form'> NOM * :</div></td>
                       		<td width='300' align='right'><input name='nom' class='inputname'type='text' size='48'maxlength='48' > </td>
                     		</tr>
                    		<tr>
                       		<td width='290'><div class='form'>PRENOM *:</div></td>
      						<td width='300' align='right'><input name='prenom' class='inputname' type='text' size='48'maxlength='48'></td>
                     		</tr>
                     		<tr>
                       		<td width='290'><div class='form'>TEL (mobile/fixe) *: </div> </td>
                       		<td width='300'align='right'> <input name='tel' class='inputname' type='text' size='48' maxlength='48'> </td>
                     		</tr>
                     		<tr>
                       		<td width='290'><div class='form'>E-MAIL *: </div></td>
                       		<td width='300' align='right'> <input name='email' class='inputname' type='text' size='48' maxlength='48'></td>
                     		</tr>
                     		<tr>
                       		<td width='290'> <div class='form'>ADRESSE COMPLETE D'EXPEDITION <b>*</b>:</div></td>
                       		<td width='300' align='right'><input name='adresse' class='inputname' type='text' size='48' maxlength='48'></td>
                     		</tr>
							<tr>
                       		<td width='290'><div class='form'>CP et VILLE <b>*</b>:</div></td>
                       		<td width='300' align='right'><input name='ville' class='inputname'type='text' size='48' maxlength='48'></td>
                     		</tr>
							<tr>
                       		<td colspan='2 align='right'> <div class='champ'>* : informations indispensables</div></td>
                     		</tr>
							<tr>
                       		<td colspan='2'><div class='nota'>Les commandes <u>HORS FRANCE</u> : Svp nous contacter directement par mail : postmaster@filalapat.fr<br></div></td>
                     		</tr>
							<tr>
                       		<td colspan='2'><div class='rubrique'><br>SELECTIONNEZ VOS PACKS :</div></td>
                     		</tr>
							<tr>
							<td colspan='2'>
									
								<table border='0' width='580' bgcolor='#FFEBB6' cellspacing='0' cellpadding='0'>
                           		<tr>
                          		<td width='380' bgcolor='#FFEBB6' align='left'> <div class='form'><b>-PACK 1 Sélection Rouges 17,55 euros </b>(13 coupons 15x55 cms)</div></td>
                             	<td width='200' bgcolor='#FFEBB6' align='right'> <input type='checkbox' name='checkbox[1]' value='1'> </td>
								</tr>
								<tr>
								<td width='380' bgcolor='#FFEBB6' align='left'><div class='form'><b>-PACK 2 Sélection Ecrus  14,85 euros </b>(11 coupons 15x55 cms)</div></td>
                             	<td width='200' bgcolor='#FFEBB6' align='right'><input type='checkbox' name='checkbox[2]' value='2'> </td>
                           		</tr>
								<tr>
								<td width='380' bgcolor='#FFEBB6' align='left'><div class='form'><b>-PACK 3 Sélection Bruns  18,90 euros</b> (7 coupons 15x110 cms)</div></td>
                             	<td width='200' bgcolor='#FFEBB6' align='right'><input type='checkbox' name='checkbox[3]' value='3'> </td>
                           		</tr>
								<tr>
								<td width='380' bgcolor='#FFEBB6' align='left'><div class='form'><b>-PACK 4  Sélection Bleus  14,85 euros </b>(11 coupons 15x55 cms)</div></td>
                             	<td width='200' bgcolor='#FFEBB6' align='right'><input type='checkbox' name='checkbox[4]' value='4'> </td>
                           		</tr>
								<tr>
								<td width='380' bgcolor='#FFEBB6' align='left'><div class='form'><b>-PACK 5 Sélection Violets  13,50 euros </b>(5 coupons 15x110 cms)</div></td>
                             	<td width='200' bgcolor='#FFEBB6' align='right'><input type='checkbox' name='checkbox[5]' value='5'> </td>
                           		</tr>
								<tr>
								<td width='380' bgcolor='#FFEBB6' align='left'><div class='form'><b>-PACK 6 Sélection Verts  14,85 euros </b>(11 coupons 15x55 cms)</div></td>
                             	<td width='200' bgcolor='#FFEBB6' align='right'><input type='checkbox' name='checkbox[6]' value='6'> </td>
                           		</tr>
                         		</table>
									
                    		</td>
							</tr>
						<tr>
                       		<td colspan='2'><div class='nota'>+ Frais de port unique : 5 euros Colissimo Suivi<br></div></td>
                     		</tr>

							<tr> 
			  				<td colspan='2' height='30' ><div class='adresse'><br> xxxxxxxxxxxxx- xxxxxxxxxx
</div></td>
            				</tr>
							</table>
							
							<div align='center'>
                 <input type='reset' value='EFFACER' class='input' name='reset'>
                 <input type='hidden' value='send' name='formulaire'>
                 <input type='button' value='ENVOYER' class='input' name='valider' onclick='javascript:Verif();'>
				 </div>
				  </form>
				  <p>
    <a href='http://validator.w3.org/check?uri=referer'><img src='http://www.w3.org/Icons/valid-html401' alt='Valid HTML 4.01 Transitional' height='20' width='77'></a> 
    <a href='http://validator.w3.org/check?uri=referer'><img src='http://www.w3.org/Icons/valid-html401-blue' alt='Valid HTML 4.01 Transitional' height='20' width='77'></a>  
    <a href='http://jigsaw.w3.org/css-validator/check/referer'><img style='border:0;width:77px;height:20px'src='http://jigsaw.w3.org/css-validator/images/vcss' alt='CSS Valide !'\ ></a>
</p>
");

	


}// fin du if fomulaire vide
/***********************************************1ER ELSE OUVERTURE */
else{
	$nom=$_POST['nom'];
	$prenom=$_POST['prenom'];
	$tel=$_POST['tel'];
	$email=$_POST['email'];
	$adresse=$_POST['adresse'];
	$ville=$_POST['ville'];
	$packs_ids=$_POST['checkbox'];
	

	$nom=htmlspecialchars($nom);
	$prenom=htmlspecialchars($prenom);
	$mail=htmlspecialchars($mail);
	$adresse=htmlspecialchars($adresse);
	$ville=htmlspecialchars($ville);
	
	$message="";
	
		if($_SERVER('REQUEST_METHOD')=='POST') {if(!empty($_POST['checkbox'])) {
		$montant_total = 0;
		foreach($_POST['checkbox'] as $checkbox) {
			echo 'Pack choisi : '.$packsids[$checkbox].' / montant : '.$packsmontants[$checkbox].'euros';
			$montanttotal += $packsmontants[$checkbox];
		}
		echo 'Montant Total : '.$montanttotal.'euros';
	}
}




Merci !!!!!
Modifié par bouzette (21 Nov 2009 - 19:24)
Modérateur
Hello,

Je fais vite fait un petit passage pour te dire que tu te répètes :


//code...
$envois = mail($destinataire, $objet, $resultcontent, $headers); 
sleep(1); 
$envois2 = mail($destinataire2, $objet2, $resultcontent2, $headers);  
 
    if(($envois)&&($envois2)){ 
//code...


à remplacer par :

if(mail($destinataire, $objet, $resultcontent, $headers) && mail($destinataire2, $objet2, $resultcontent2, $headers))
//etc.


Le sleep() ne sert à rien. Mieux vaut faire une gestion d'envoi par paquet. Et là dans ton cas apparemment, ce ne serait pas la peine.

Au passage, euro est invariable en genre et en nombre.

++
Modifié par Nolem (21 Nov 2009 - 13:34)
Hem...

Tout d'abord j'ai édité ton message puisque ton email apparaissait en clair.

A part te donner le code tout fait (ce qui va contre la philosophie du forum et ce qui ne t'apprendrait rien) je ne vois pas quoi te dire de plus sinon qu'il faudrait reprendre le PHP du début : une des premières leçons concerne la concaténation. Smiley cligne
Ben je suis consciente que reprendre le PHP "au tout début" m'apparait essentiel ! n'empèche que j'aimerai arriver à finaliser au moins cette fonction de calcul !

Parmi les livres proposés, pourriez-vous me conseiller un livre traitant du PHP, pour débutant , ceux proposés ne sont pour des personnes de niveau avancé.

Je suis bien en peine....

Smiley decu
Bouzette
Modérateur
En lisant vite fait :

* Le javascript n'est qu'une surcouche. Tu ne peux pas te fier avec cette méthodologie. Smiley cligne
* Je ne suis pas sûr que la série str_replace avec les tableaux soient efficaces. Tu te répètes inutilement encore une fois (B A BA de la programmation).
* Logiquement, $contenu et $contenu2 seront présentés sur une seule ligne.

a écrit :

//code php
/* Si l'on veut envoyer un mail au format HTML, il faut configurer le type Content-type. */
//code php


Cela ne suffit pas de renseigner seulement le content type pour un envoi de mail en html. Smiley cligne
Modifié par Nolem (21 Nov 2009 - 14:53)
Modérateur
bouzette a écrit :

[...]
n'empèche que j'aimerai arriver à finaliser au moins cette fonction de calcul !
[...]


Je crois que notre ami Heyoan veut parler de ce ce sujet : La concaténation

bouzette a écrit :

[...]
Parmi les livres proposés, pourriez-vous me conseiller un livre traitant du PHP, pour débutant , ceux proposés ne sont pour des personnes de niveau avancé.
[...]


Tu as ce livre (introduction php 5 O'reilly) qui est bien fait et répond sans soucis à ta problématique évoquée sur ce forum. À la fin de chaque chapitre, il y a des mises en situation simples (dans mes souvenirs commande de menu dans un restaurant online avec autres choses). Ce livre à lui seul n'est pas complet. Cependant, il te donne déjà une bonne base de départ (hé hé O'reilly).
Modifié par Nolem (21 Nov 2009 - 16:32)
Salut,

Merci Nolem,
Le site indiqué sur la concaténation est bien expliqué et devrait être une aide bien utile, pour revoir le php.
Quant à la référence de ce livre, merci aussi ! il viendra s'ajouter dans ma bibliothèque en temps utile.

Smiley smile
Bouzette