8791 sujets

Développement web côté serveur, CMS

Bien le bonjour,
Est-il possible de récupérer uniquement les données d'un champ qui a été rempli ?
Mon formulaire fait trois kilomètres de long, et ça fait beaucoup d'infos inutiles quand on a répondu qu'à une seule question...

Merci d'avance.

(je ne poste pas mon code pour le moment, qui d'ailleurs marche très bien. J'imagine que tous les formulaires ont + ou - la même architecture).
Salut,

Ralf a écrit :
Est-il possible de récupérer uniquement les données d'un champ qui a été rempli ?
Pas sûr d'avoir compris mais à tout hasard :
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	foreach($_POST as $cle => $valeur) {
		if(!empty($valeur)) {
			echo "<p>\$_POST['$cle'] est égal à $valeur</p>\n";
		}
}
Pour être plus clair, mon formulaire comporte une trentaine de champs, dont seulement un ou deux sont remplis selon les besoins.
Du coup je me retrouve avec un email plein de questions sans réponse, et je dois fouiller là dedans pour trouver celles qui en ont.
D'où mon besoin de savoir s'il serait possible de ne recevoir que les questions qui ont eu une réponse dans le champ correspondant.

Et pour être encore plus précis, voici mon formulaire résumé :

<form id="myForm" action="form_commandepp_reponse.php" method="post"> 
<fieldset id="internet">
	  <legend>Internet</legend>
					<ol>
					  <li><span>e-flash</span><span>e-flash</span>
					    <label for="eflash" title="" >Quantité estimée.</label>
							<input name="eflash" type="text" id="eflash" value="" />	
					  </li>
						<li><span>mini-sites</span>
						  <label for="minisites" title="" >mini-sites</label>
                          <textarea name="minisites" id="minisites"></textarea>
						</li>

...

</ol>
				</fieldset>
				<fieldset id="submitform">
					<input type="submit" id="formsubmit" value="Valider la commande" /></label>
				</fieldset>
	  </form>


et la partie PHP :
<?php

if ((isset($_POST['eflash'])) && (strlen(trim($_POST['eflash'])) > 0)) {
	$eflash = stripslashes(strip_tags($_POST['eflash']));
} else {$eflash = '-';}
if ((isset($_POST['minisites'])) && (strlen(trim($_POST['minisites'])) > 0)) {
	$minisites = stripslashes(strip_tags($_POST['minisites']));
} else {$minisites = '-';}


...


ob_start();

?>
<html>
<head>
</head>
<body>
<table width="550" border="0" align="center" cellpadding="2" cellspacing="2">
<tr bgcolor="#727272"><td style="text-align: center; color: #FFF; font-weight: bold;">Internet</td><td></td></tr>
  <tr bgcolor="#e7d7cf">
    <td>e-flash</td>
    <td><?=$eflash;?></td>
  </tr>
  <tr>
    <td>mini-sites</td>
    <td><?=$minisites;?></td>
  </tr>



...



</table>

</body>
</html>
<?
$body = ob_get_contents();

$to = 'xxxxx@xxxxxxxxxt.com';
$email = 'xxxxx@xxxxxxxxxt.com';
$fromaddress = "xxxxx@xxxxxxxxxt.com";
$fromname = "Online Contact";

require("phpmailer.php");

$mail = new PHPMailer();

$mail->From     = "xxxxx@xxxxxxxxxt.com";
$mail->FromName = "xxxxxxxxxxxxx";
$mail->AddAddress("xxxxx@xxxxxxxxxt.com");
$mail->AddAddress("xxxxx@xxxxxxxxxt.com");

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->Subject  =  "xxxxxxxxxxxxxxxxxxxxxx";
$mail->Body     =  $body;
$mail->AltBody  =  "This is the text-only body";

if(!$mail->Send()) {
	$recipient = 'your_email@example.com';
	$subject = 'Echec de la commande';
	$content = $body;	
  mail($recipient, $subject, $content, "From: xxxxx@xxxxxxxxxt.com\r\nReply-To: $email\r\nX-Mailer: DT_formmail");
  exit;
}
?>


J'ai essayé de rajouter ton bout de code, mais du coup je ne reçois plus rien du tout...
Modifié par Ralf (12 Feb 2010 - 14:00)
Ralf a écrit :
J'ai essayé de rajouter ton bout de code, mais du coup je ne reçois plus rien du tout...
Ce n'était pas à rajouter à un code mais pour voir le fonctionnement. Smiley cligne

Tu pourrais alimenter un array des libellés dont la clef serait le nom du champ :
$libelles = array(
	'eflash' => 'e-flash',
	'minisites' => 'mini-sites',
	'nomduchamp' => 'libelledanslemail'
);
Ensuite pour alimenter ton mail tu fais une boucle :
foreach($_POST as $cle => $valeur) {
	if(!empty($valeur) && trim($valeur)!='') {
		echo '<tr><td>'.$libelles[$cle].'</td><td>'.$valeur."</td></tr>\n";
	}
}
Pardon de te pourrir encore l'existence (c'est vraiment pas mon domaine le PhP...), mais est-ce que tu pourrais juste me préciser où je cale ces deux machins, en fonction de mon code fourni ?

1000 mercis !
J'ai un second problème sur mon formulaire, moins grave celui là.
Comme je n'y connais pas grand chose, j'ai récupéré grosso modo le code deux formulaires différents.
Le premier me permettant de récupérer les données dans un tableau (du html dans le mail, donc), le second de joindre un document à ces données (via le code <input type="file" name="fichier" /> dans le formulaire).

Ça marche à peu près, sauf que, du coup, chaque validation m'envoie deux mails, un avec les données du formulaire, l'autre avec la pièce jointe.

J'essaie de fusionner maladroitement le code des deux pour ne recevoir plus qu'un seul mail avec données + pièce jointe, mais rien à faire, à peine je touche une ligne, ça casse tout.

Vous auriez une idée ?

Voici le code qui correspond au mail de la pièce jointe :
<?

$name_file = $_FILES['fichier']['name']; 
$source=$_FILES['fichier']['tmp_name'];

move_uploaded_file($source, "./".$name_file); 

$extension=get_extension($name_file);

$type="text/plain";
if($type=="doc")
{
   $type="text/vnd.ms-word";
}
else if($type=="xls")
{
   $type="text/vnd.ms-excel";
}

$type2="image/png";

if($extension=="gif")
{
   $type2="image/gif";
}
else if($extension=="bmp")
{
   $type2="image/bmp";
}

function get_extension($filename)
{
   $parts = explode('.',$filename);
   $last = count($parts) - 1;
   $ext = $parts[$last];
   return $ext;
}

//----------------------------------
// Construction de l'entête
//----------------------------------

$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";



if($name_file!="")
{
$file = $name_file;
$fp = fopen($file, "rb");  
$attachment = fread($fp, filesize($file));
fclose($fp);

$attachment = chunk_split(base64_encode($attachment));


$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $type2; name=\"$file\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";
}

$destinataire = "xxxxx@xxxxxxxxxxxxx.fr";

mail($destinataire, "La piece jointe", $msg, $header);

if($name_file!="")
{
unlink($name_file);
}

?>


et celui qui m'envoie données... sans la pièce jointe (dans la mesure du possible, c'est celui ci que j'aimerais adapter, plutôt que l'autre) :
<?
$body = ob_get_contents();

$to = 'xxxxx@xxxxxxxxxxxxx.fr';
$email = 'xxxxx@xxxxxxxxxxxxx.fr';
$fromaddress = "xxxxx@xxxxxxxxxxxxx.fr";
$fromname = "Online Contact";

require("phpmailer.php");

$msg = new PHPMailer();

$msg->From     = "xxxxx@xxxxxxxxxxxxx.fr";
$msg->FromName = "Commande PP";
$msg->AddAddress("xxxxx@xxxxxxxxxxxxx.fr");
$msg->AddAddress("xxxxx@xxxxxxxxxxxxx.fr");

$msg->WordWrap = 50;
$msg->IsHTML(true);

$msg->Subject  =  "Bla bla bla bla";
$msg->Body     =  $body;
$msg->AltBody  =  "This is the text-only body";

if(!$msg->Send()) {
	$recipient = 'your_email@example.com';
	$subject = 'Echec de la commande';
	$content = $body;	
  mail($recipient, $subject, $content, "From: xxxxx@xxxxxxxxxxxxx.fr\r\nReply-To: $email\r\nX-Mailer: DT_formmail");
  exit;
}
?>
Ralf a écrit :
Vous auriez une idée ?
Ben oui... et même 2 :
* ne pas récupérer des codes dont on ne comprend pas le fonctionnement.
* apprendre les bases de php.

Parce que là en gros tu demandes à ce que quelqu'un te donne le code tout fait, ce qui va à l'encontre de l'une des règles de base du forum. Smiley murf

J'ajoute que :
1) en ne cherchant pas toi-même tu n'apprends rien.
2) de mon point de vue ça n'est pas gratifiant d'aider quelqu'un qui n'a pas le désir d'apprendre... déjà qu'on est tous bénévoles si en plus on n'a pas ça en retour... Smiley smile
OK je vois...
J'ai quand même passé une quinzaine d'heures à chercher sur le net et essayer de comprendre, mais si ce n'est pas assez, je m'en excuse.

Je dérangerai plus alsa, pouvez fermer. Merci quand même.
Ralf a écrit :
J'ai quand même passé une quinzaine d'heures à chercher sur le net et essayer de comprendre, mais si ce n'est pas assez, je m'en excuse.
Y a pas de mal... mais si tu as passé 15 heures sans comprendre ça confirme que tu ne connais pas les bases de PHP (et notamment la réception des variables d'un formulaire) et qu'il faudrait commencer par là : il doit bien exister une centaine de tutos sur le net qui parlent de ça.

Concernant le fait de fusionner deux codes dont l'un seulement utilise la classe phpmailer je te conseillerais d'aller sur le site proposant cette classe et de lire leurs tutos.