Envoie par mail données formulaire

Eléphanteau du PHP | 40 Messages

03 déc. 2007, 12:28

Bonjour,

J’ai créé un formulaire avec une fonction php qui récupére les données saisies pas l’utilisateur pour les envoyer par mail

Voici le code de la fonction :
<?php
$TO = "[email protected]";

$h  = "From: " . $TO;

$message = "";

while (list($key, $val) = each($HTTP_POST_VARS)) {
  $message .= "$key : $val\n";
}

mail($TO, $subject, $message, $h);

Header("Location: http://172.18.4.41/ok.htm");

?>
Le problème c’est que dans mon formulaire je n’arrive pas à envoyer l’ensemble des données. Impossible d’envoyer :

Le champ avec 2 cases à cocher
Les champs de mes 2 listes déroulantes dynamiques

Pouvez vous m’aider, je débute tout juste dans le PHP

D’avance un grand merci pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 déc. 2007, 12:41

Modération :
ju3979, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ


Quant à ton problème difficile à dire sans plus d'information, mais sache que la valeur d'une case à cochée n'est envoyée au serveur que si elle a été cochée, sinon, elle n'est pas envoyée. Tu peux vérifier les données envoyées par le formulaire en affichant le contenu de $_POST (qu'il vaut mieux préférer à $HTTP_POST_VARS) :
print_r($_POST);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

03 déc. 2007, 17:47

voici mon code formulaire:

Code : Tout sélectionner

<?php include "connexion.php"; function Afficherresponsable($id) { $reponse = new xajaxResponse();//Création d'une instance de xajaxResponse pour traiter les réponses serveur $responsable='';// Initialisation de la variable $responsable //la selection des responsables celon le service choisis $req = mysql_query("SELECT `code_resp`,`nom` FROM `responsable` where code_resp= ".$id." ORDER BY nom") or die(mysql_error()); $responsable .='<select id="responsable" name="responsable">'; // on commence la declaration de la liste des villes $responsable .='<option value="00">Selectionnez responsable</option>'; while($array = mysql_fetch_array($req)) { $responsable .='<option value="'.$array['nom'].'">'.$array['nom'].'</option>'; } $responsable .='</select>'; $reponse = new xajaxResponse('ISO-8859-1'); $reponse->addAssign("affresponsable","innerHTML",$responsable); // affichage du contenu de $responsable (la liste des responsable) dans le div affresponsable return $reponse->getXML(); } require("xajax.inc.php"); $xajax = new xajax(); //On initialise l'objet xajax $xajax->setCharEncoding('ISO-8859-1'); $xajax->decodeUTF8InputOn(); $xajax->registerFunction("Afficherresponsable"); $xajax->processRequests();//Fonction qui va se charger de faire les requetes APRES AVOIR DECLARER NOS FONCTIONS ?> <html> <head> <title>Nouvelle Demande</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <?php $xajax->printJavascript(); /* Affiche le Javascript */?> </head> <body> <? $req = mysql_query("SELECT `code`,`nom` FROM `service` ORDER BY nom") or die(mysql_error()); ?> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-l"> <?php $xajax->printJavascript(); /* Affiche le Javascript */?> <link href="test2.css" rel="stylesheet" type="text/css"> </head> <body bgcolor="#ffffcc"> <form method="post" action="formmail.php"> <p class="titre">CREATION NOUVELLE DEMANDE</p> <fieldset id="livraisons"> <div> <label>Nom : </label> <input type="text" name="nom" size="30" /><br /> </div> <div> <label>Prenom : </label> <input type="text" name="prenom" size="30" /><br /> </div> <div> <label>Service : </label> <select id="serv" name="serv" onChange="xajax_Afficherresponsable(document.getElementById('serv').value);"> <option value="00">Selectionnez service </option> <?php while($array = mysql_fetch_array($req)) { ?> <option value="<?php echo ($array['code']); ?>"><?php echo ($array['nom']."(".$array['code'].")"); ?></option> <?php } ?> </select> </div> <div> <label>Responsable : </label> <div id="affresponsable" name="affresponsable"></div> </body> </div> <div> <label>Profil de référence : </label> <input type="text" name="profildereference" size="30" /><br /> </div> <HEAD> <style type="text/css"> .ds_box { background-color: #FFF; border: 1px solid #000; position: absolute; z-index: 32767; } .ds_tbl { background-color: #FFF; } .ds_head { background-color: #333; color: #FFF; font-family: Arial, Helvetica, sans-serif; font-size: 13px; font-weight: bold; text-align: center; letter-spacing: 2px; } .ds_subhead { background-color: #CCC; color: #000; font-size: 12px; font-weight: bold; text-align: center; font-family: Arial, Helvetica, sans-serif; width: 32px; } .ds_cell { background-color: #EEE; color: #000; font-size: 13px; text-align: center; font-family: Arial, Helvetica, sans-serif; padding: 5px; cursor: pointer; } .ds_cell:hover { background-color: #F3F3F3; } /* This hover code won't work for IE */ </style> </HEAD> <BODY> <table class="ds_box" cellpadding="0" cellspacing="0" id="ds_conclass" style="display: none;"> <tr><td id="ds_calclass"> </td></tr> </table> <script type="text/javascript"> // <!-- <![CDATA[ // Project: Dynamic Date Selector (DtTvB) - 2006-03-16 // Script featured on JavaScript Kit- http://www.javascriptkit.com // Code begin... // Set the initial date. var ds_i_date = new Date(); ds_c_month = ds_i_date.getMonth() + 1; ds_c_year = ds_i_date.getFullYear(); // Get Element By Id function ds_getel(id) { return document.getElementById(id); } // Get the left and the top of the element. function ds_getleft(el) { var tmp = el.offsetLeft; el = el.offsetParent while(el) { tmp += el.offsetLeft; el = el.offsetParent; } return tmp; } function ds_gettop(el) { var tmp = el.offsetTop; el = el.offsetParent while(el) { tmp += el.offsetTop; el = el.offsetParent; } return tmp; } // Output Element var ds_oe = ds_getel('ds_calclass'); // Container var ds_ce = ds_getel('ds_conclass'); // Output Buffering var ds_ob = ''; function ds_ob_clean() { ds_ob = ''; } function ds_ob_flush() { ds_oe.innerHTML = ds_ob; ds_ob_clean(); } function ds_echo(t) { ds_ob += t; } var ds_element; // Text Element... var ds_monthnames = [ 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre' ]; // You can translate it for your language. var ds_daynames = [ 'Dim', 'Lun', 'Mar', 'Me', 'Jeu', 'Ven', 'Sam' ]; // You can translate it for your language. // Calendar template function ds_template_main_above(t) { return '<table cellpadding="3" cellspacing="1" class="ds_tbl">' + '<tr>' + '<td class="ds_head" style="cursor: pointer" onclick="ds_py();"><<</td>' + '<td class="ds_head" style="cursor: pointer" onclick="ds_pm();"><</td>' + '<td class="ds_head" style="cursor: pointer" onclick="ds_hi();" colspan="3">[Fermer]</td>' + '<td class="ds_head" style="cursor: pointer" onclick="ds_nm();">></td>' + '<td class="ds_head" style="cursor: pointer" onclick="ds_ny();">>></td>' + '</tr>' + '<tr>' + '<td colspan="7" class="ds_head">' + t + '</td>' + '</tr>' + '<tr>'; } function ds_template_day_row(t) { return '<td class="ds_subhead">' + t + '</td>'; // Define width in CSS, XHTML 1.0 Strict doesn't have width property for it. } function ds_template_new_week() { return '</tr><tr>'; } function ds_template_blank_cell(colspan) { return '<td colspan="' + colspan + '"></td>' } function ds_template_day(d, m, y) { return '<td class="ds_cell" onclick="ds_onclick(' + d + ',' + m + ',' + y + ')">' + d + '</td>'; // Define width the day row. } function ds_template_main_below() { return '</tr>' + '</table>'; } // This one draws calendar... function ds_draw_calendar(m, y) { // First clean the output buffer. ds_ob_clean(); // Here we go, do the header ds_echo (ds_template_main_above(ds_monthnames[m - 1] + ' ' + y)); for (i = 0; i < 7; i ++) { ds_echo (ds_template_day_row(ds_daynames[i])); } // Make a date object. var ds_dc_date = new Date(); ds_dc_date.setMonth(m - 1); ds_dc_date.setFullYear(y); ds_dc_date.setDate(1); if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) { days = 31; } else if (m == 4 || m == 6 || m == 9 || m == 11) { days = 30; } else { days = (y % 4 == 0) ? 29 : 28; } var first_day = ds_dc_date.getDay(); var first_loop = 1; // Start the first week ds_echo (ds_template_new_week()); // If sunday is not the first day of the month, make a blank cell... if (first_day != 0) { ds_echo (ds_template_blank_cell(first_day)); } var j = first_day; for (i = 0; i < days; i ++) { // Today is sunday, make a new week. // If this sunday is the first day of the month, // we've made a new row for you already. if (j == 0 && !first_loop) { // New week!! ds_echo (ds_template_new_week()); } // Make a row of that day! ds_echo (ds_template_day(i + 1, m, y)); // This is not first loop anymore... first_loop = 0; // What is the next day? j ++; j %= 7; } // Do the footer ds_echo (ds_template_main_below()); // And let's display.. ds_ob_flush(); // Scroll it into view. ds_ce.scrollIntoView(); } // A function to show the calendar. // When user click on the date, it will set the content of t. function ds_sh(t) { // Set the element to set... ds_element = t; // Make a new date, and set the current month and year. var ds_sh_date = new Date(); ds_c_month = ds_sh_date.getMonth() + 1; ds_c_year = ds_sh_date.getFullYear(); // Draw the calendar ds_draw_calendar(ds_c_month, ds_c_year); // To change the position properly, we must show it first. ds_ce.style.display = ''; // Move the calendar container! the_left = ds_getleft(t); the_top = ds_gettop(t) + t.offsetHeight; ds_ce.style.left = the_left + 'px'; ds_ce.style.top = the_top + 'px'; // Scroll it into view. ds_ce.scrollIntoView(); } // Hide the calendar. function ds_hi() { ds_ce.style.display = 'none'; } // Moves to the next month... function ds_nm() { // Increase the current month. ds_c_month ++; // We have passed December, let's go to the next year. // Increase the current year, and set the current month to January. if (ds_c_month > 12) { ds_c_month = 1; ds_c_year++; } // Redraw the calendar. ds_draw_calendar(ds_c_month, ds_c_year); } // Moves to the previous month... function ds_pm() { ds_c_month = ds_c_month - 1; // Can't use dash-dash here, it will make the page invalid. // We have passed January, let's go back to the previous year. // Decrease the current year, and set the current month to December. if (ds_c_month < 1) { ds_c_month = 12; ds_c_year = ds_c_year - 1; // Can't use dash-dash here, it will make the page invalid. } // Redraw the calendar. ds_draw_calendar(ds_c_month, ds_c_year); } // Moves to the next year... function ds_ny() { // Increase the current year. ds_c_year++; // Redraw the calendar. ds_draw_calendar(ds_c_month, ds_c_year); } // Moves to the previous year... function ds_py() { // Decrease the current year. ds_c_year = ds_c_year - 1; // Can't use dash-dash here, it will make the page invalid. // Redraw the calendar. ds_draw_calendar(ds_c_month, ds_c_year); } // Format the date to output. function ds_format_date(d, m, y) { // 2 digits month. m2 = '00' + m; m2 = m2.substr(m2.length - 2); // 2 digits day. d2 = '00' + d; d2 = d2.substr(d2.length - 2); // YYYY-MM-DD // return y + '-' + m2 + '-' + d2; return d2 + '-' + m2 + '-' + y; } // When the user clicks the day. function ds_onclick(d, m, y) { // Hide the calendar. ds_hi(); // Set the value of it, if we can. if (typeof(ds_element.value) != 'undefined') { ds_element.value = ds_format_date(d, m, y); // Maybe we want to set the HTML in it. } else if (typeof(ds_element.innerHTML) != 'undefined') { ds_element.innerHTML = ds_format_date(d, m, y); // I don't know how should we display it, just alert it to user. } else { alert (ds_format_date(d, m, y)); } } // And here is the end. // ]]> --> </script> <form action="" method="post"> <div> <label>Date d'entrée : </label> <input onclick="ds_sh(this);" name="date" size="30" readonly="readonly" style="cursor: text" /><br /> </div> <p id="messagerie"><label>Accès messagerie ? : </label> <input name="accesmessagerie" value="oui" type="radio">Oui<br> <input name="accesmessagerie" value="non" type="radio">Non<br> </p> <p><label>Remarque :</label><br/> <textarea name="remarque" rows="5" cols="40"></textarea> </p> <p id="buttons"> <input value="Envoyer" type="submit"> <input value="Recommencer" type="reset"> </p> </fieldset> </form> </body> </html>
et mon code php pour l'envoie

Code : Tout sélectionner

<?php $TO = "[email protected]"; $h = "From: " . $TO; $message = ""; $subject = $_POST['date']; while (list($key, $val) = each($_POST)) { $message .= "$key : $val\n"; } mail($TO, $subject, $message, $h); Header("Location: http://172.18.4.41/ok.htm"); ?>
Merci pour l'aide

Invité
Invité n'ayant pas de compte PHPfrance

05 déc. 2007, 10:49

Personne pour m'aider ??

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 déc. 2007, 11:05

Plutôt que d'attendre une réponse, est-ce que tu as essayé par toi même ce que te proposais Ryle et essayé de comprendre le résultat ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 10:44

Bonjour à tous

On m'a donné un peu d'aide donc j'ai pu avancé sur mes problèmes
Je suis pas loin du but mais il y a encore 2 petites choses qui ne marchent pas

Lors de l'envoie du mail il me récupére tous les champs sauf le champ Service et le champ responsble
Voici le mail qu'il envoit:
Nom : jjjj
Prénom : jjjj
Service : - Responsable :00
Profil de référence : jjjj
Accès messagerie : oui
Remarque :
jjfhjfh
Voici le code de mon formulaire:
<?php
include ("connexion.php");
require("xajax.inc.php");
$xajax = new xajax(); //On initialise l'objet xajax
$xajax->setCharEncoding('ISO-8859-1');
$xajax->decodeUTF8InputOn();
$xajax->registerFunction("Afficherresponsable");
$xajax->processRequests();//Fonction qui va se charger de faire les requetes APRES AVOIR DECLARER NOS FONCTIONS

function Afficherresponsable($id)
{
$reponse = new xajaxResponse();//Création d'une instance de xajaxResponse pour traiter les réponses serveur
$responsable='';// Initialisation de la variable $responsable
//la selection des responsables celon le service choisis
$req = mysql_query("SELECT `code_resp`,`nom` FROM `responsable` where code_resp= ".$id." ORDER BY nom") or die(mysql_error()); 
$responsable .='<select id="responsable" name="responsable">'; // on commence la declaration de la liste des villes
$responsable .='<option value="00">Selectionnez responsable</option>';
while($array = mysql_fetch_array($req))
{
$responsable .='<option value="'.$array['nom'].'">'.$array['nom'].'</option>';
}
$responsable .='</select>';
$reponse = new xajaxResponse('ISO-8859-1');
$reponse->addAssign("affresponsable","innerHTML",$responsable); // affichage du contenu de $responsable (la liste des responsable) dans le div affresponsable
return $reponse->getXML();
}
?>
<html>
<head>
<title>Nouvelle Demande</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php
$xajax->printJavascript(); /* Affiche le Javascript */
?>
<script type="text/javascript" src="calendar.js"></script>
<link href="test2.css" rel="stylesheet" type="text/css">
<link href="calendar.css" rel="stylesheet" type="text/css">

<script type="text/javascript">
function NomService()
{
document.getElementById('service').value = document.getElementById('serv').options[document.getElementById('serv').selectedIndex].text;
}
</script>
</head>
<body bgcolor="#ffffcc" onload="initCalendar()">
<form method="POST" action="formmail.php">
<p class="titre">CREATION NOUVELLE DEMANDE</p>
<fieldset id="livraisons">
<label>Nom : </label>
<input type="text" name="nom" size="30" /><br />
<label>Prenom : </label>
<input type="text" name="prenom" size="30" /><br />
<div>
<label>Service : </label><input type="hidden" id="service" value="">
<select id="serv" name="serv" onChange="NomService();xajax_Afficherresponsable(document.getElementById('serv').value);">
<option value="00">Selectionnez service </option>
<?php
$req = mysql_query("SELECT `code`,`nom` FROM `service` ORDER BY nom") or die(mysql_error());
while($array = mysql_fetch_array($req))
{
?>
<option value="<?php echo $array['code']; ?>"><?php echo $array['nom']."(".$array['code'].")"; ?></option>
<?php
}
?>
</select>
</div>
<label>Responsable : </label>
<div id="affresponsable" name="affresponsable"><select id="responsable" name="responsable"><option value="00">Selectionnez responsable</option></select></div> 
<label>Profil de référence : </label>
<input type="text" name="profildereference" size="30" /><br />
<label>Date d'entrée : </label>
<input onclick="ds_sh(this);" name="date" size="30" readonly="readonly" style="cursor:text"><br />
<table class="ds_box" cellpadding="0" cellspacing="0" id="ds_conclass" style="display: none;">
<tr><td id="ds_calclass">
</td></tr>
</table>
<p id="messagerie"><label>Accès messagerie ? : </label>
<br />
<input name="accesmessagerie" value="oui" type="radio">Oui<br />
<input name="accesmessagerie" value="non" type="radio">Non<br />
</p>
<p><label>Remarque :</label><br />
<textarea name="remarque" rows="5" cols="40"></textarea>
</p>
<p id="buttons">
<input value="Envoyer" type="submit">
<input value="Recommencer" type="reset">
</p>
</fieldset>
</form>
</body>
</html>
Et voici le code de mon script php qui me récupére les données du formualire et le envoies par mail:
<?php
$TO = "[email protected]";
$header = "From: [email protected]\n";
$subject = $_POST['date'];
$message = "Nom : ".$_POST['nom']."\n";
$message .= "Prénom : ".$_POST['prenom']."\n";
$message .= "Service : ".$_POST['service']." - Responsable :".$_POST['responsable']."\n";
$message .= "Profil de référence : ".$_POST['profildereference']."\n";
$message .= "Accès messagerie : ".$_POST['accesmessagerie']."\n";
$message .= "Remarque : \n".$_POST['remarque']."\n";
if (mail($TO, $subject, $message, $header))
{
Header("Location: http://172.18.4.41/ok.htm");
}
?>
Pouvez vous m'aider
D'avance un grand merci

Eléphanteau du PHP | 40 Messages

10 déc. 2007, 11:46

Ton code recupere bien la valeur du select "responsable" c'est a dire ce que contient ton value =00.

Code : Tout sélectionner

<select id="responsable" name="responsable"> <option value="00">Selectionnez responsable</option> </select>
Pour ce qui est du champ service : 'ser' != 'service'.
en construction http://plus2site.fr

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 12:22

Désolé mais je ne comprend pas ta réponse
pour le champ responable il me récupérer systématiquement la valeur 00 alors que normalement je sélectionne un nom

Et pour le champ service , peux tu préciser

Merci pour ton aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 déc. 2007, 12:53

Tu as un champ caché qui n'a pas de nom, il n'est donc pas envoyé avec le formulaire, quelle que soit sa valeur :

Code : Tout sélectionner

<input type="hidden" id="service" value="">
Par ailleurs, comme le signale gadgino, ta liste déroulante contenant à priori les services, s'appelle "serv" alors que tu récupères la valeur de $_POST['service'] qui n'existe pas :
<select id="serv" name="serv" onChange="...">
...
$message .= "Service : ".$_POST['service'] 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 15:01

j'ai modifié la variable $message .= "Service : ".$_POST['serv']

Donc la il m'envoit le chiffre correspondant au service mais moi ce que je voudrais c'est qu'il récupére le nom
Et toujours idem pour le champ responsable il me met 00

Merci pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 déc. 2007, 16:01

Un champ de type select envoi la valeur associée à l'élément choisit, c'est à dire le contenu de l'attribut value si celui-ci est renseigné, et à défaut, le libellé de l'option si l'attribut value n'est pas spécifié.

Ainsi, si tu constuis tes options ainsi :

Code : Tout sélectionner

<option value="code">libellé</option>
Alors la valeur que tu va récupérer si l'option est selectionnée, c'est "code". Si tu veux le libellé, il te faut soit virer la value, soit la renseigner correctement :

Code : Tout sélectionner

<option value="libellé">libellé</option> ou <option>libellé</option>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 16:45

oui ok mais ou je dois modifier ça dans mon code
j'ai peur de modifier ou il ne faut pas et qu'après plus rien ne fonctionne

Invité
Invité n'ayant pas de compte PHPfrance

11 déc. 2007, 17:52

svp j'ai besoin d'aide
Merci

Eléphanteau du PHP | 40 Messages

11 déc. 2007, 18:09

On sait que t'es embeté sinon tu serrait pas la lol.
le pb c'est qu'il faut que tu recupere ton `code` à cause de ton code AJAX sinon faut changer ta requette pour selectionner tes responsables. si tu a le code service rien ne t'empeche a priorie de faire une petite requette du type "SELECT `code`,`nom` FROM `service` WHERE `code`= $code" avant l'envoie de ton mail. verifie la valeur $code que te renvoie ton select avant.

sinon pour ce qui est du reponsable je connais pas trop l'AJAX ni le XAJAX. c'est certainement de bonne technique mais pour te dire ou tu pert ton information je peut pas trops. fait le teste sur differrent navigateur voir si cela change quelque chose. la premiere idée qui peut venir a l'esprit c'est que ton formulaire est du mal avec l'importiont d'option via ta metode ?????
la je seche un peu mais je te propose de deplacer ton sujet dans le forum AJAX si tu peut le faire appel un moderateur d'apres moi ton probleme est interressant une foi n'est pas coutume. lol
en construction http://plus2site.fr

Invité
Invité n'ayant pas de compte PHPfrance

14 déc. 2007, 09:58

up
svp merci