J'ai créé un formulaire, qui fonctionne plutôt bien.
Il prend les informations que lui communique l'internaute me les transférent par mail et les stockent dans une base de données.
Depuis quelques jours je tente d'y ajouter un upload de fichier, j'ai lu votre tutoriel, tenté d'adapter le code à ma page de traitement et je n'arrive pas à le faire fonctionner.
En fait je débute en php et là ça devient un peu compliqué pour moi.
l'un d'entre vous pourrait-il m'expliquer ce qui ne va pas dans ce que j'ai fait, svp.
Je m'excuse d'avance pour la longeur du code, en effet mes deux pages étaient presque terminées.
Code de ma page formulaire :
Code : Tout sélectionner
echo "<html>
<head><title>Formulaire destiné aux candidatures spontanées</title></head>
<body>";
$labels = array ( "prenom" => "Prénom: ", /*tableau des valeurs*/
"nom" => "Nom: ",
"mail" => "Mail: ",
"secteur" => "Secteur d'activité: ",
"ville" => "Ville: ",
"fichier_joint" => "Fichiers joints: ",
"questions" => "Questions: ",
"MAX_FILE_SIZE" => ""); /*fichier caché*/
echo "<h3>Remplissez le formulaire de demande de renseignement</h3>";
echo "<form action='traitement1.php' method='POST' enctype='multipart/form-data'>
<table>\n";
/* Boucle d'affichage */
foreach($labels as $field => $label)
{
echo "<tr>
<td style='text-align: right;
font-weight: bold'> $label</td>
<td>";
/*Afficher le champ questions*/
if ($field == "questions")
echo "<textarea name='$field' rows='5' cols='49' maxlength='255'></textarea>";
/*Afficher le champ fichier_joint*/
elseif ($field == "fichier_joint")
echo "<input type='file' name='$field' for='$field' size='35'>Insérer votre fichier_joint</input>";
/*Afficher le champ caché*/
elseif ($field == "MAX_FILE_SIZE")
echo "<input type='hidden' name='$field' value='1048576'></input>";
/*Afficher les autres champs*/
else
echo "<input type='text' name='$field' size='65' maxlength='25' >";
echo "</td>
</tr>";
}
echo "<tr>
<td colspan='2' style='text-align: center'>
<input type='submit' value='Envoyer le formulaire'>";
echo "</td></tr></table>
</form>";
Code : Tout sélectionner
/* tableau de légende des champs */
$labels = array ( "prenom" => "Prénom: ",
"nom" => "Nom: ",
"mail" => "Mail: ",
"secteur" => "Secteur d'activité: ",
"ville" => "Ville: ",
"fichier_joint" => "Fichiers joints: ",
"questions" => "Vos questions: ",
"MAX_FILE_SIZE" => "");
/* regarde les champs reçus */
foreach($_POST as $field => $value)
{
/* Charche les champs vides */
if( $value == "" )
{
$blank_array[] = $field;
}
/* Teste le format des champs */
elseif( ereg("(nom)",$field) )
{
if(!ereg("^[A-Za-z' -]{1,50}$",$value) )
{
$bad_format[] = $field;
}
}
elseif($field == "mail")
{
if(!ereg("^.+@.+\.fr$",$value) )
{
$bad_format[] = $field;
}
}
elseif ($field == "fichier_joint")
{
if(isset($_FILES['$field']))
{
// params
unset($erreur);
$extensions_ok = array('txt', 'doc', 'pdf');
$taille_max = '1048576';
$dest_dossier = 'c:/home/coursphp/test/temp/';
// vérifications
if( !in_array( substr(strrchr($_FILES['$field']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = 'Veuillez sélectionner un fichier de type txt, doc ou pdf !';
}
elseif( file_exists($_FILES['$field']['tmp_name'])and filesize($_FILES['$field']['tmp_name']) > $taille_max)
{
$erreur = 'Votre fichier doit faire moins de 500Ko !'; // copie du fichier if(!isset($erreur))
}
}
} // Fin de foreach sur $_POST
/* Si problème, afficher un message et revenir au formulaire */
if(@sizeof($blank_array) > 0 or @sizeof($bad_format) > 0)
{
if(@sizeof($blank_array) > 0)
{
/* Information manquante */
echo "<b>Un champ au moins est vide. Vous devez le remplir :</b><br>";
/* Liste des données manquantes*/
foreach($blank_array as $value)
{
echo " {$labels[$value]}<br>";
}
}
if(@sizeof($bad_format) > 0)
{
/* Informations incorrectes */
echo "<b>Un champ au moins contient une information incorrecte. Veuillez la corrigez:</b><br>";
/* Liste des champs incorrects */
foreach($bad_format as $value)
{
echo " {$labels[$value]}<br>";
}
}
/* réaffichage du formulaire */
echo "<p><hr />";
echo "<h3>Remplissez le formulaire de demande de renseignement</h3>";
echo "<form action='traitement1.php' method='POST' enctype='multipart/form-data'>
<table>\n";
foreach($labels as $field => $label)
{
echo "<tr>
<td style='text-align: right;
font-weight: bold'> $label</td>
<td>";
/*Afficher le champ questions*/
if ($field == "questions")
echo "<textarea name='$field' rows='5' cols='49' maxlength='255'></textarea>";
/*Afficher le champ fichier_joint*/
elseif ($field == "fichier_joint")
echo "<input type='file' name='$field' for='$field' size='35'>Insérer votre fichier_joint</input>";
/*Afficher le champ fichier_joint*/
elseif ($field == "MAX_FILE_SIZE")
echo "<input type='hidden' name='$field' value='1048576'></input>";
/*Afficher les autres champs*/
else
echo "<input type='text' name='$field' size='65' maxlength='25' >";
echo "</td>
</tr>";
}
echo "<tr>
<td colspan='2' style='text-align: center'>
<input type='submit' value='Envoyer le formulaire'>";
echo "</td></tr></table>
</form>";
exit();
}
else //Si les données sont OK. Envoyer le formulaire et se connecter à la base
{
$user="mon_user";
$host="";
$password="mon_password";
$database="ma_base";
$cxn = mysqli_connect($host,$user,$password,$database)
or die ("connexion au serveur impossible");
//Vérifier le format du champ "mail"
$fields_all = array_keys($labels);
foreach($fields_all as $field)
{
$good_data[$field] = strip_tags(trim($_POST[$field]));
}
//Inserer les données du formulaire dans la table
$query = "INSERT INTO ma_table (prenom,nom,mail,secteur,ville,fichier_joint,questions)
VALUES ('$good_data[prenom]','$good_data[nom]','$good_data[mail]',
'$good_data[secteur]','$good_data[ville]','$good_data[fichier_joint]',
'$good_data[questions]')";
//message d'erreur, si l'envoi du formulaire se passe mal
$result = mysqli_query($cxn,$query)
or die ("L'envoi du formulaire a échoué");
$destinataire = 'mon_email';
// Pour les champs $expediteur / $copie / $destinataire, séparer par une virgule s'il y a plusieurs adresses
$expediteur = "'$good_data[mail]'";
$prenom = "$good_data[prenom]";
$nom = "$good_data[nom]";
$questions = "$good_data[questions]";
$secteur = "$good_data[secteur]";
$ville = "$good_data[ville]";
$fichier_joint = "$good_data[fichier_joint]";
$objet = "Demande de renseignements : "; // Objet du message
$headers = 'MIME-Version: 1.0' . "\n"; // Version MIME
$headers .= 'Reply-To: '.$expediteur."\n"; // Mail de reponse
$headers .= 'From: "Vous avez reçu un mail de: "<'.$expediteur.'>'."\n"; // Expediteur
$headers .= 'Delivered-to: '.$destinataire."\n"; // Destinataire
//Après avoir vérifié que le fichier existait (l'id est bien dans la BDD) et
//après avoir sélectionné les informations sur le fichier dans la BDD (dans $bdd_infos)
//Création des headers, pour indiquer au navigateur qu'il s'agit d'un fichier à télécharger
header('Content-Transfer-Encoding: binary'); //Transfert en binaire (fichier)
header('Content-Disposition: attachment; filename="'.$bdd_infos['$fichier_joint'].'"'); //Nom du fichier
header('Content-Length: '.$bdd_infos['$taille_max']); //Taille du fichier
//Envoi du fichier
readfile($bdd_infos['$fichier_joint']);
$message = "$prenom,$nom,$secteur,$ville,$fichier_joint,$questions";
if (mail($destinataire, $objet, $message, $headers)) // Envoi du message
//Message si l'envoi du formulaire se passe bien
echo "<h4>Votre demande a bien été envoyé. Nous vous remercions.</h4>";
}
?>