8792 sujets

Développement web côté serveur, CMS

Bonjour, je désirerais créer un formulaire de devis en ligne avec un menu déroulant et des cases à cocher comme sur ce site : www.atousconseils.com
Mais je ne vois pas du tout comment faire et aucun script "simple" n'existe...

Un peu d'aide ??
MERCI Smiley smile
Modifié par guigro (01 Apr 2007 - 08:38)
Bonsoir et bienvenue sur le Forum...

Je me permets un petit rappel : Régle 16
Ceci est une communauté d'entraide, pas de travail à votre place.

Ce forum a pour vocation d'échanger des connaissances. 
Les membres ne sont pas là pour faire le travail à votre place. 
Il est donc inutile de demander des scripts tout faits, des codes à faire pour vous. 
On vous donnera les moyens d'y parvenir vous-même, sans vous apporter le code sur un plateau.

Je te propose donc la chose suivante :
Commence par coder le formulaire toi-même, et lorsque tu rencontreras des problèmes, reviens nous voir... Smiley cligne
Bonjour,
premièrement, je ne demande pas du "tout fait" puisque depuis que je suis webmaster je profite toujours de l'aide qu'on peut m'apporter pour enrichir mes connaissances, et il est extrèmement rare que je ne modifie pas ce qu'on m'indique.
Ensuite, pour le formulaire, je viens de le faire : http://www.guigro.com/acmee/index.php?page=pages/devis
Le formulaire appelle une page "devis2.php" qui fera les calculs, mais je n'ai aucune connaissance du code à mettre dans cette page pour qu'il récupère les données du formulaire et qu'il fasse les calculs (très simples) et affiche le devis, et c'est sur ce point que je demande un petit coup de pouce pour au moins m'indiquer comment commencer.
Comme vous le savez, il est plus facile de lire une oeuvre littéraire que de l'écrire, et par la je ne cherche pas à lire, disons que j'essaie de rédiger une dissertation ou une thèse sur ce sujet Smiley cligne Je ne demande donc qu'un coup de pouce pour commencer (du style quelles variables pour récupérer les infos, lesquelles pour calculer, et pour l'affichage LOGIQUEMENT je devrais m'en sortir).

Merci quand même pour la précision, et merci de votre aide.
Guigro
Bonjour,

La méthode utilisé par ton formulaire est la méthode POST.
Pour récuperer les données de ton formulaire, tu utilisera la variable suivante si le le parametre variable_global est à off : $_POST['name'] où name est le nom d'un des champs de ton formulaire que tu as attribué avec la propriété "name" ...

voilà quelques pistes Smiley cligne
Très bien, merci pour cette info qui m'a permis d'avancer (un tout petit peu !!) et qui me motive à chercher (en plus, c'est carrément intéressant !!)
Voici mon code php pour le moment :

a écrit :

<?php
if (($amiante=="")&($plomb=="")&($termites=="")&($dpe=="")&($carrez=="")){
print("Veuillez choisir au moins un diagnostic.<BR>\n");
}

else {
$select = $_POST['select'];
$amiante = $_POST['amiante'];
$aplomb = $_POST['plomb'];
$termites = $_POST['termites'];
$dpe = $_POST['dpe'];
$carrez = $_POST['carrez'];
}
?>


Déjà, est-ce bon ?? Parce que pour les "&" entre chaque variable pour spécifier le fait que il faut que AUCUN bouton ne soit coché je l'ai fait tout seul, et apparemment ça marche !

Et ensuite, j'ai vu le code pour calculer toutes les valeurs :
a écrit :

$prix = round($amiante + $plomb + $termites + $dpe + $carrez);


Mais premièrement je ne sais pas si cela fonctionne si une des variables est vide (logiquement si, le calcul me fera un +0), et deuxièmement, le résultat dépendera de la valeur de $select, et pour ça, en fait il faudrait lire la partie select et faire un calcul pour chaque. Mais alors les valeurs de chaque $amiante etc... changent en fonction de la valeur de $select

Voilà ou je suis bloqué, donc si quelqu'un peut me donner un petit coup de pouce, c'est sympa, mais j'ai écouté vos conseils et j'essaie d'avancer seul le plus possible, et je vous remercie !
Salut,

guigro a écrit :
<?php
if (($amiante=="")&($plomb=="")&($termites=="")&($dpe=="")&($carrez=="")){
print("Veuillez choisir au moins un diagnostic.<BR>\n");
}

else {
$select = $_POST['select'];
$amiante = $_POST['amiante'];
$aplomb = $_POST['plomb'];
$termites = $_POST['termites'];
$dpe = $_POST['dpe'];
$carrez = $_POST['carrez'];
}
?>


personnellement je le ferais plutôt comme ça :
<?php

// Si $_POST['amiante'] n'est pas vide OU $_POST['termites'] n'est pas vide OU empty($_POST['carrez'] n'est pas vide
if (empty($_POST['amiante']) OR empty($_POST['termites']) OR empty($_POST['carrez']))
{ 

$select = $_POST['select'];
$amiante = $_POST['amiante'];
$aplomb = $_POST['plomb'];
$termites = $_POST['termites'];
$dpe = $_POST['dpe'];
$carrez = $_POST['carrez'];

} else {

print("Veuillez choisir au moins un diagnostic.<BR>\n");

}
?>


Etant donné que tes variables $select, $amiante, etc ... ne sont déterminés qu'après la condition, je ne vois pas comment elle peuvent déterminer la condition Smiley biggol

Parce que à 1er vu, même si la personne fais un choix, elle aura le message "Veuillez choisir au moins un diagnostic", il faudra soumettre le formulaire 2 fois de suite pour qu'il soit accepté (et encore j'en suis pas sur).

Je me suis peux être embrouillé, j'ai mal au crane Smiley ravi


guigro a écrit :
Mais alors les valeurs de chaque $amiante etc... changent en fonction de la valeur de $select

Il faudrait déjà connaître les valeurs de cette variable, si c'est un pourcentage par exemple (*1, *1.25, *1.5, etc) c'est tout simple. Ou si le changement de valeur ce fait en fonction d'une grille tarifaire (dans ce cas un tableau serait certainement mieux non ?)

En admettant que ce soir un pourcentage qui est appliqué tu peux utiliser la fonction switch, de cette façon tu récupère la valeur de $logement pour faire le calcule plus loin dans le script :

<?php
switch ($select) { 

case t1: //si select = t1
$logement= "1.10"; //On récupère une majoration 10%
break; // On a trouvé la valeur de $select on s'arrête

case t2: //si selevt = t2
$logement= "1.20"; //On récupère une majoration 20%
break; // On a trouvé la valeur de $select on s'arrête

case t3:
$logement= "1.30";
break;

case t4:
$logement= "1.40";
break;

case t5:
$logement= "1.50";
break;

case t6:
$logement= "1.60";
break;
}
?>

Modifié par Spark (14 Mar 2007 - 22:46)
Hmm okok je pense avoir compris, mais je pense que ça serait plutôt une grille tarifaire (genre case t4, amiante = 125, plomb = 45 etc...)
Je vais tenter quelque chose
Voilà ma page php pour le moment :

a écrit :
<?php
else {
$select = $_POST['select'];
$amiante = $_POST['amiante'];
$aplomb = $_POST['plomb'];
$termites = $_POST['termites'];
$dpe = $_POST['dpe'];
$carrez = $_POST['carrez'];
}

if (($amiante=="")&($plomb=="")&($termites=="")&($dpe=="")&($carrez=="")){
print("Veuillez choisir au moins un diagnostic.<BR>\n");
}

if (($select=="t1"){
then {
$amiante="100");
$plomb="200";
$dpe="300";
$carrez="400"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="t2"){
then {
$amiante="101");
$plomb="201";
$dpe="301";
$carrez="401"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="t3"){
then {
$amiante="102");
$plomb="202";
$dpe="302";
$carrez="402"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="t4"){
then {
$amiante="103");
$plomb="203";
$dpe="303";
$carrez="403"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="t5"){
then {
$amiante="104");
$plomb="204";
$dpe="304";
$carrez="404"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="t6"){
then {
$amiante="105");
$plomb="205";
$dpe="305";
$carrez="405"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="m2p"){
then {
$amiante="106");
$plomb="206";
$dpe="306";
$carrez="406"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="m3p"){
then {
$amiante="107");
$plomb="207";
$dpe="307";
$carrez="407"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="m4p"){
then {
$amiante="108");
$plomb="208";
$dpe="308";
$carrez="408"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="m5p"){
then {
$amiante="109");
$plomb="209";
$dpe="309";
$carrez="409"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

if (($select=="m6p"){
then {
$amiante="1099");
$plomb="2099";
$dpe="3099";
$carrez="4099"; }
$prix = round($amiante + $plomb + $termites + $dpe + $carrez);
print("Vous avez choisis : ????, cela vous coutera $prix €.<BR>\n");

?>


Il y a surement des erreurs, énormes d'ailleurs, mais si ce système fonctionne comme ça, c'est parfait, et pour afficher bien sur la page finale sera beaucoup plus complexe !
Mais pour le moment l'important n'est pas l'affichage.
Re là je vais pas regarder ton code je vais au dodo, juste un truc, c'est la 1er fois que je vois ça, je dis pas que c'est faut mais c'est la 1er fois :

if (){
then {

}
Bon ok, moi je te le dis c'est faux puisque le script marche pas sur mon serveur...
En fait il faut que je mette la variable qui dit que "si" (if) : blablabla, "alors" : faire blablabla

Je pensais que c'était : if...then...
Re

Quand je parlais de grille tarifaire je penssais plutôt à un truc comme ça :

_______________________________________
T0 amiante | aplomb | termites | dpe | carrez |
_______________________________________|
T1 1€iante | 2€lomb | 5€rmites | 8€e | 4€arrez|
_______________________________________|
T2 2€iante | 5€lomb | 11€mites | 16€ | 8€rrez|
_______________________________________|
T3 3€iante | 12€mb | 20€mtes | 24€ | 12€rez|


Enfin se n'est pas ce que tu veux, pour ce que tu veux faire il vaudrait mieux utiliser un base de données, car a par faire les totaux on ne peut rien faire de plus avec PHP, les prix n'augmente pas de façon proportionnel (+ x%)


Créer une table "devis" avec les champs amiante | aplomb | termites | dpe | carrez | T1 | T2 | T3 | T4 | T5 | T6 | Maison 2 pièces | Maison 3 pièces | etc ...
Modifié par Spark (19 Mar 2007 - 21:36)
Bah une grille tarifaire c'est EXACTEMENT ce qu'il me faut !
Et il faudrait juste qu'en fonction des boutons sélectionnés et du choix dans le menu ça me donne les prix...
Je vois que quelqu'un ou toi même l'a fait en javascript, le sujet est donc résolu

Faudrait peut être éviter de mettre un point au millier ... ou mettre une virgule au centime parce que 2.400.00, sur le coup je lis 2 millions 400 milles euros.
Modifié par Spark (31 Mar 2007 - 21:25)
Effectivement, pour le point, je n'y avait même pas pensé. Merci

Et pour ce qui est du devis il est vrai que j'ai trouvé une solution, bien que moins efficace et jolie qu'n script php, alternative.
Donc pour le moment je vais clore le sujet, mais pour ceux qui passent ici et qui voudraient savoir comment on fait, ou qui sont dans la situation dans laquelle je me trouvais, voici le code :


Entre les balises <head> et </head> :
a écrit :
<script type="text/javascript">
/*
Kevin Hartig :: http://www.grafikfx.net/
*/

// Calculate the total for items in the form which are selected.
function calculateTotal(inputItem) {
with (inputItem.form) {
// Process each of the different input types in the form.
if (inputItem.type == "radio") { // Process radio buttons.
// Subtract the previously selected radio button value from the total.
calculatedTotal.value = eval(calculatedTotal.value) - eval(previouslySelectedRadioButton.value);
// Save the current radio selection value.
previouslySelectedRadioButton.value = eval(inputItem.value);
// Add the current radio button selection value to the total.
calculatedTotal.value = eval(calculatedTotal.value) + eval(inputItem.value);
} else { // Process check boxes.
if (inputItem.checked == false) { // Item was uncheck. Subtract item value from total.
calculatedTotal.value = eval(calculatedTotal.value) - eval(inputItem.value);
} else { // Item was checked. Add the item value to the total.
calculatedTotal.value = eval(calculatedTotal.value) + eval(inputItem.value);
}
}

// Total value should never be less than 0.
if (calculatedTotal.value < 0) {
InitForm();
}

// Return total value.
return(formatCurrency(calculatedTotal.value));
}
}

// Format a value as currency.
function formatCurrency(num) {
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))
num = "0";
sign = (num == (num = Math.abs(num)));
num = Math.floor(num*100+0.50000000001);
cents = num%100;
num = Math.floor(num/100).toString();
if(cents<10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3)) + ',' + num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + '€' + num + '.' + cents);
}

// This function initialzes all the form elements to default values.
function InitForm() {
// Reset values on form.
document.selectionForm.total.value='€0';
document.selectionForm.calculatedTotal.value=0;
document.selectionForm.previouslySelectedRadioButton.value=0;

// Set all checkboxes and radio buttons on form to unchecked.
for (i=0; i < document.selectionForm.elements.length; i++) {
if (document.selectionForm.elements.type == 'checkbox' | document.selectionForm.elements[i].type == 'radio') {
document.selectionForm.elements[i].checked = false;
}
}
}
</script>



Remplacer (ou ajouter le bout de code) la balise <body > par :
a écrit :
<body onLoad="InitForm();" onreset="InitForm();">



Et enfin, votre formulaire (dans la partie <body> </body> :
a écrit :
<form method="POST" name="selectionForm">
<br>
<input type="checkbox" name="checkbox" value="METTEZ ICI LE PRIX(exemple dans les autres options)" onClick="this.form.total.value=calculateTotal(this);"> Option 1
<br>
<input name="checkbox" type="checkbox" value="550" onClick="this.form.total.value=calculateTotal(this);"> Option 2
<br>
<input type="checkbox" name="checkbox" value="555" onClick="this.form.total.value=calculateTotal(this);"> Option 3
<br>
<input type="checkbox" name="checkbox" value="520" onClick="this.form.total.value=calculateTotal(this);"> Option 4
<br>
<input type="checkbox" name="checkbox" value="510" onClick="this.form.total.value=calculateTotal(this);"> Option 5
<br>
<br>
<input type="hidden" name="calculatedTotal" value="0">
<input type="hidden" name="previouslySelectedRadioButton" value="0">
<strong>Le total est de :</strong>
<input type="text" name="total" readonly onFocus="this.blur();">
</form>



Voilà, poru ce qui est du prix en fonction du choix (ce qu'il fallait dans le formulaire à la base), pour régler le problème j'ai fait une premiere page avec un menu déroulant demandant de choisir un logement, menu déroulant qui menait à une page différente par devis.

Voilà voilà, pour toute question, postez ici ou contactez-moi !!

Merci à tous en tout cas.
Guigro
[/i][/i]