Page 1 sur 2
Envoie par mail données formulaire
Posté : 03 déc. 2007, 12:28
par ju3979
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
Posté : 03 déc. 2007, 12:41
par Ryle
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);
Posté : 03 déc. 2007, 17:47
par Invité
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
Posté : 05 déc. 2007, 10:49
par Invité
Personne pour m'aider ??
Posté : 05 déc. 2007, 11:05
par zeus
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 ?
Posté : 10 déc. 2007, 10:44
par Invité
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
Posté : 10 déc. 2007, 11:46
par gadgino
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'.
Posté : 10 déc. 2007, 12:22
par Invité
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
Posté : 10 déc. 2007, 12:53
par Ryle
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 :
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']
Posté : 10 déc. 2007, 15:01
par Invité
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
Posté : 10 déc. 2007, 16:01
par Ryle
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 :
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>
Posté : 10 déc. 2007, 16:45
par Invité
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
Posté : 11 déc. 2007, 17:52
par Invité
svp j'ai besoin d'aide
Merci
Posté : 11 déc. 2007, 18:09
par gadgino
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
Posté : 14 déc. 2007, 09:58
par Invité
up
svp merci