Bonjour,
A vrai dire j'ai entendu parlé d'Ajax mais je ne connais pas du tout le principe.
J'ai un formulaire de contact avec des inputs de type texte, textarea etc et la possibilité d'attacher plusieurs fichiers. Pour attacher un nouveaux fichier j'ai un bouton "Ajouter" qui, losqu'on clique dessus ouvre une popup. Dans cette popup, on choisit le fichier avec un input type file. Lorsqu'on valide ensuite à l'aide d'un bouton, le fichier est transmis à la fenêtre mère et la popup est fermée. Et cela à chaque fichier qu'on veut ajouter. Sur la fenêtre mère, je voudrait que les fichiers choisis apparaissent sans les chemins dans le input nommé pieces_jointes.
formulaire dans la page principale :
<?php
session_start();
?>
<!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">
<head>
<title>Contacter Archipel des Sciences</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
<SCRIPT language=JavaScript>
function popup_ajout(page) {
window.open(page,'','width=300,height=100,left=0,top=0,toolbar=false,scrollbars=false');
}
</SCRIPT>
</head>
<body>
<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = $_GET['destinataire'];
//nom du destinataire
$name = $_GET['name1'];
// Action du formulaire (si votre page a des paramètres dans l'URL)
// si cette page est index.php?page=contact alors mettez index.php?page=contact
// sinon, laissez vide
$form_action = '';
// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu !";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
// Message d'erreur du formulaire
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
//nombre de caractères dans le code
$nb = 4;
//message d'erreur
$mess = '';
/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/
/*
* cette fonction sert à nettoyer et enregistrer un texte
*/
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}
// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};
/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};
$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin
// si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : '';
$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
$copie = (isset($_POST['copie'])) ? Rec($_POST['copie']) : '';
$width = $nb * 23 + 40;
$name = html_entity_decode($name);
$name = str_replace("_",' ',$name);
$msg_body = '';
if (isset($_POST['envoi']))
{
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
$err_formulaire = (IsEmail($email)) ? false : true;
$code = (isset($_POST['code'])) ? strtoupper($_POST['code']) : ''; // contient la réponse du visiteur
if( $_SESSION['contacter'] != $code )
{
// le formulaire s'arrête ici
echo '<p style="text-align:center;">Vous n\'avez pas répondu correctement à la question ...</p><p style="text-align:center;"><a href="javascript:window.close();">Fermer la fenêtre</a></p>'."\n";
}
else // code OK : c'est un humain
{
if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
{
// les 4 variables sont remplies, on génère le mail
$boundary = '-----=' . md5(uniqid(mt_rand()));
// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};
//entete
$headers .= 'Date : '.date("D, j M Y H:i")."\r\n";
$headers .= 'MIME-Version: 1.0'."\r\n";
$headers .= 'From: '.$nom.' <'.$email.'>'."\r\n";
$headers .= 'Reply-To: '.$nom.' <'.$email.'>'."\r\n";
$headers .= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'."\r\n";
$headers .= 'X-Mailer: PHP'.phpversion()."\r\n";
// message
$message = html_entity_decode($message);
$message = str_replace(''',"'",$message);
$message = str_replace('’',"'",$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$msg_body = '--'.$boundary."\r\n";
$msg_body .= 'Content-Type: text/plain; charset="iso-8859-1"'."\r\n";
$msg_body .= 'Content-Transfer-Encoding: 8bit'."\r\n";
$msg_body .= "\r\n";
$msg_body .= $message."\r\n";
$msg_body .= "\r\n";
//pieces jointes
$uploaddir = 'UpLoad/';
$size = 0;
for ($i = 1; isset($_FILE['Fichier']['name']); $i++)
{
if(!$err_formulaire && strlen($_FILES['Fichier']['name'][$i-1]))
{
$uploadfile[$i-1] = $uploaddir.$_FILES['Fichier']['name'][$i-1];
$source[$i-1] = $_FILES['Fichier']['tmp_name'][$i-1];
if (!is_uploaded_file($source[$i-1]))
{
$err_formulaire =true;
$mess = 'Téléchargement de '.$_FILES['Fichier']['name'][$i-1].' impossible !';
}
elseif(!move_uploaded_file($source[$i-1], '../'.$uploadfile[$i-1]))
{
$err_formulaire = true;
$mess = 'Problème de transfert de '.$_FILES['Fichier']['name'][$i-1].' !';
}
else
{
$ext[$i-1] = explode(".", basename($_FILES['Fichier']['name'][$i-1]));
switch($ext[$i][1]) {
default:
$file_type[$i-1] = "application/octet-stream";
break;
case "gz":
$filetype[$i-1] = "application/x-gzip";
break;
case "tgz":
$file_type[$i-1] = "application/x-gzip";
break;
case "zip":
$file_type[$i-1] = "application/zip";
break;
case "pdf":
$file_type[$i-1] = "application/pdf";
break;
case "png":
$file_type[$i-1] = "image/png";
break;
case "gif":
$file_type[$i-1] = "image/gif";
break;
case "jpg":
case"jpeg":
$file_type[$i-1] = "image/jpeg";
break;
case "txt":
$file_type[$i-1] = "text/plain";
break;
case "doc":
$file_type[$i-1] = "application/msword";
break;
case "xls":
$file_type[$i-1] = "application/vnd.ms-excel";
break;
case "ppt":
$file_type[$i-1] = "application/vnd.ms-powerpoint";
break;
case "mp3":
$file_type[$i-1] = "audio/mpeg";
break;
case "wav":
$file_type[$i-1] = "audio/x-wav";
break;
case "mpeg":
case "mpg":
case "mpe":
$file_type[$i-1] = "video/mpeg";
break;
case "mov":
$file_type[$i-1] = "video/quicktime";
break;
case "avi":
$file_type[$i-1] = "video/x-msvideo";
break;
case "htm":
case "html":
$file_type[$i-1] = "text/html";
break;
};
$file_name[$i-1] = $_FILES['Fichier']['name'][$i-1];
$file_size[$i-1] = $_FILES['Fichier']['size'][$i-1];
$size += $file_size[$i-1];
if ($size > 1048576)
{
$err_formulaire = true;
$mess = 'La taille des fichiers est supérieure à 1 Mo';
}
else
{
if ($handle[$i-1] = fopen('../'.$uploadfile[$i-1], 'rb'))
{
$content[$i-1] = fread($handle[$i-1], $file_size[$i-1]);
$encoded_attach[$i-1] = chunk_split(base64_encode($content[$i-1]));
fclose($handle[$i-1]);
$msg_body .= '--'.$boundary."\r\n";
$msg_body .= 'Content-type:'.$file_type[$i].';name="'.$file_name[$i-1].'"'."\r\n";
$msg_body .= 'Content-transfer-encoding:base64'."\r\n";
$msg_body .= 'Content-Disposition: attachment; filename="'.$file_name[$i-1].'"'."\r\n";
$msg_body .= "\r\n";
$msg_body .= $encoded_attach[$i-1]."\r\n";
$msg_body .= "\r\n\r\n";
}
else
{
$err_formulaire = true;
$mess = 'Problème de lecture du fichier '.$_FILES['Fichier']['name'][$i-1];
};
};
};
};// fin du if (strlen($_FILES['Fichier']['name'][$i]))
};// fin du for ($i = 0; isset($_FILE['Fichier']['name'][$i]))
$msg_body .= '--'.$boundary.'--'."\r\n";
// Envoi du mail
if (mail($cible, $objet, $msg_body, $headers))
{
echo '<p style="text-align:center;"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>'.$message_envoye.'</FONT></p><p style="text-align:center;"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2><a href="javascript:window.close();">Fermer la fenêtre !</a></FONT></p>'."\n";
while ($i <= isset($_FILES['fichier']['name']))
{
unlink('../'.$uploadfile[$i-1]);
};
exit();
}
else
{
if(!$err_formulaire)
{
$err_formulaire = true;
$mess = $message_non_envoye;
};
};
}
else
{
// une des 4 variables (ou plus) est vide ...
$mess = $message_formulaire_invalide;
$err_formulaire = true;
};
};
}; // fin du if (!isset($_POST['envoi']))
if (($err_formulaire) || (!isset($_POST['envoi'])))
{
// afficher le formulaire
echo '<p align="center"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=3><STRONG>Archipel des Sciences</STRONG></FONT></p>'."\n";
echo '<p> </p>'."\n";
echo '<p><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Envoi d\'un message à </FONT><FONT face="Arial, Helvetica, sans-serif" color=29a1c3 size=2>'.$name.'</FONT></p>'."\n";
echo '<p> </p>'."\n";
echo '<p style="text-align:center;"><FONT face="Arial, Helvetica, sans-serif" color=#FF0000 size=2>'.$mess.'</FONT></p>'."\n";
echo '<form enctype="multipart/form-data" id="contact" method="post" action="'.$form_action.'">'."\n";
echo ' <fieldset><legend><FONT face="Arial, Helvetica, sans-serif" size=2>Vos coordonnées</FONT></legend>'."\n";
echo ' <p>'."\n";
echo ' <label for="nom"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Votre nom</FONT><FONT face="Arial, Helvetica, sans-serif" color=#FF0000 size=2>*</FONT><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2> : </FONT></label> '."\n";
echo ' <input type="text" id="nom" name="nom" value="'.stripslashes($nom).'" tabindex="1" />'."\n";
echo ' </p>'."\n";
echo ' <p>'."\n";
echo ' <label for="email"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Votre email</FONT><FONT face="Arial, Helvetica, sans-serif" color=#FF0000 size=2>*</FONT><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2> : </FONT></label> '."\n";
echo ' <input type="text" id="email" name="email" value="'.stripslashes($email).'" tabindex="2" />'."\n";
echo ' </p>'."\n";
echo ' </fieldset>'."\n";
echo ' <p> </p>'."\n";
echo ' <fieldset><legend><FONT face="Arial, Helvetica, sans-serif" size=2>Votre message</FONT></legend>'."\n";
echo ' <p>'."\n";
echo ' <label for="objet"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Objet</FONT><FONT face="Arial, Helvetica, sans-serif" color=#FF0000 size=2>*</FONT><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2> : </FONT></label> '."\n";
if (($destinataire == "archipel.des.sciences2@wanadoo.fr" && $name != "archipel.des.sciences2@wanadoo.fr") || $destinataire == "archipel.des.sciences1@wanadoo.fr") {
$nb1 = strlen('A l\'attention de '.$name);
echo ' <input type="text" id="objet" name="objet" value="A l\'attention de '.$name.'" tabindex="3" readonly="readonly" size='.$nb1.'>'."\n";
}
else
{
echo ' <input type="text" id="objet" name="objet" value="'.stripslashes($objet).'" tabindex="3" />'."\n";
}
echo ' </p>'."\n";
echo ' <TABLE cellSpacing=0 cellPadding=0 width=600 border=0>'."\n";
echo ' <TBODY>'."\n";
echo ' <TR vlaign="top" height=40>'."\n";
echo ' <TD width=150 align=left valign="top"><label for="Fichier"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Fichiers attachés :</FONT></label></TD>'."\n";
echo ' <TD width=500 align=left valign="top"><input type="text" id="pieces_jointes" name="pieces_jointes" size="50"/> <input type="button" id="ajouter_fichier" name="ajouter_fichier" value="Ajouter" onClick="Javascript: popup_ajout(\'ajouter.php?\');" /><div id="attDiv"></div>'."\n";
echo ' </TD>'."\n";
echo ' </TR>'."\n";
echo ' <TR>'."\n";
echo ' <TD width=150 align=left valign="top"><label for="message"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Votre message</FONT><FONT face="Arial, Helvetica, sans-serif" color=#FF0000 size=2>*</FONT><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2> : </FONT></label></TD>'."\n";
echo ' <TD width=500 align=left valign="top"><textarea id="message" name="message" tabindex="5" cols="50" rows="8">'.stripslashes($message).'</textarea></TD>'."\n";
echo ' </TR>'."\n";
echo ' </TBODY>'."\n";
echo ' </TABLE>'."\n";
echo ' <p><label for="copie"><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Souhaitez-vous recevoir une copie du message ?</FONT></label> '."\n";
echo ' <INPUT type= "radio" name="copie" value="oui" checked="checked" /><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Oui</FONT> <INPUT type= "radio" name="copie" value="non" /><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Non</FONT></p>'."\n";
echo ' </fieldset>'."\n";
echo ' <p> </p>'."\n";
echo ' <fieldset><legend><FONT face="Arial, Helvetica, sans-serif" size=2>Contrôle</FONT></legend>'."\n";
echo ' <p><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2>Recopiez les '.$nb.' caractères</FONT><FONT face="Arial, Helvetica, sans-serif" color=#FF0000 size=2>*</FONT><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2> :</FONT></p>'."\n";
echo ' <TABLE cellSpacing=10 cellPadding=0 width=500 border=0>'."\n";
echo ' <TBODY>'."\n";
echo ' <TR>'."\n";
echo ' <TD valign="middle" width="'.$width.'"><label for="code"><img src="../html/antispam.php?name2=contacter&strlen='.$nb.'" alt="anti-flood" /></label></TD>'."\n";
echo ' <TD valign="middle" align="left"><input type="text" name="code" id="code" maxlength="'.$nb.'" value="" tabindex="6" /></TD>'."\n";
echo ' </TR>'."\n";
echo ' </TBODY>'."\n";
echo ' </TABLE>'."\n";
echo ' </fieldset>'."\n";
echo ' <p> </p>'."\n";
echo ' <div style="text-align:center;"><input type="submit" name="envoi" value="Envoyer" /></div>'."\n";
echo '</form>'."\n";
echo '<p style="font-style:italic;"><FONT face="Arial, Helvetica, sans-serif" color=#FF0000 size=2>*</FONT><FONT face="Arial, Helvetica, sans-serif" color=#000000 size=2> Les champs marqués d\'un astérisque sont obligatoires.</FONT></p>'."\n";
};
?>
</body>
</html>
popup :
<!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">
<head>
<title>Ajouter un fichier</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
<body>
<?php
$err = 'false';
$mess = '';
if (isset($_POST['attacher']))
{
if (strlen($_FILES['Fichier']['name']))
{
echo '<SCRIPT language=JavaScript>'."\n";
echo ' d = window.parent.getElementById("attDiv");'."\n";
echo ' newAttach = window.parent.createElement("input");'."\n";
echo ' newAttach.setAttribute("type","file");'."\n";
echo ' newAttach.setAttribute("id","Fichier[]");'."\n";
echo ' newAttach.setAttribute("name","Fichier[]");'."\n";
echo ' newAttach.setAttribute("style","visibility:hidden");'."\n";
echo ' d.appendChild(newAttach);'."\n";
echo ' window.parent.getElementById(\'Fichier[]\').value=document.getElementById(\'Fichier\');'."\n";
echo ' window.close();</SCRIPT>'."\n";
}
else
{
$err = 'true';
$mess = 'Veuillez ajouter un fichier';
};
};
if ($err || (!isset($_POST['attacher'])))
{
echo '<p style="text-align:center;"><FONT face="Arial, Helvetica, sans-serif" color=#FF0000 size=2>'.$mess.'</FONT></p>'."\n";
echo '<form enctype="multipart/form-data" id="ajouter" method="post" action="">'."\n";
echo ' <p align="center"><input type="file" id="Fichier" name="Fichier" /></p>'."\n";;
echo ' <div align="center"><input type="submit" name="attacher" value="Ajouter" />'."\n";
echo ' <input type="button" id="fermer" name="fermer" value="Fermer" onClick="Javascript: window.close();" /></div>';
echo '</form>'."\n";
};
?>
</body>
</html>
J'espère que ca vous aidera un peu plus
Merci