Bonjour à tous,
Bon, ben va falloir assumer...
Je ne voulais simplement pas casser le moral aux éventuelles bonnes âmes
Voici donc le code de ma page formulaire :
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 "<h3>Attention, vous devez remplir tous les champs</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 cv</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>";
?>
et celui de ma page de traitement, (le pire) :
/* 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;
}
}
/*traite le champ upload*/
//elseif ($field == "fichier_joint")
// {
// vérifications
if(!empty($_FILES['fichier_joint']['tmp_name']) AND is_uploaded_file($_FILES['fichier_joint']['tmp_name']))
{
//On va vérifier la taille du fichier en ne passant pas par $_FILES['fichier_source']['size'] pour éviter les failles de sécurité
if(filesize($_FILES['fichier_joint']['tmp_name'])<1048576)
{
//On vérifie maintenant le type de l'image à l'aide de la fonction getimagesize()
list($largeur, $hauteur, $type, $attr)=getimagesize($_FILES['fichier_joint']['tmp_name']);
//Si le Type est JPEG (correspond au chiffre 2) on copie l'image
if($type===2)
{
//Copie le fichier dans le répertoire de destination
if(move_uploaded_file($_FILES['fichier_joint']['tmp_name'], 'repertoire/image.jpg'))
{
//Le fichier a été uploadé correctement
echo 'Ok, fichier envoyé correctement';
}
else
{
//Erreur
echo 'Erreur lors de la copie du fichier';
}
}
}
}
// }
} // 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 cv</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>";
exit();
}
else //Si les données sont OK. Envoyer le formulaire et se connecter à la base
{
$user="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,questions,fichier_joint)
VALUES ('$good_data[prenom]','$good_data[nom]','$good_data[mail]',
'$good_data[secteur]','$good_data[ville]','$good_data[questions]','$good_data[fichier_joint]')";
//message d'erreur, si l'envoi du formulaire se passe mal
$result = mysqli_query($cxn,$query)
or die ("L'envoi du formulaire a échoué");
//déclaration de variable
$destinataire = 'mon_mail';
$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
$message_texte='Bonjour,'."\n\n".'Voici un message au format texte';
$message_html='<html>
<head>
<title>Titre</title>
</head>
<body>Test de message</body>
</html>';
//-----------------------------------------------
//GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
//-----------------------------------------------
$frontiere = '-----=' . md5(uniqid(mt_rand()));
//-----------------------------------------------
//HEADERS DU MAIL
//-----------------------------------------------
$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
$headers .= 'Content-Type: multipart/mixed; boundary="'.$frontiere.'"';
//-----------------------------------------------
//MESSAGE TEXTE
//-----------------------------------------------
$message = 'This is a multi-part message in MIME format.'."\n\n";
$message .= '--'.$frontiere."\n";
$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$message .= $message_texte."\n\n";
//-----------------------------------------------
//MESSAGE HTML
//-----------------------------------------------
$message .= '--'.$frontiere."\n";
$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$message .= $message_html."\n\n";
$message .= '--'.$frontiere.'--'."\n";
//Génération des pièces jointes pour la recupération du fichier dans la boite mail
$message .= 'Content-Type: image/jpg; name="image.jpg"'."\n";
$message .= 'Content-Transfer-Encoding: base64'."\n";
$message .= 'Content-Disposition:attachement; filename="image.jpg"'."\n\n";
$message .= chunk_split(base64_encode(file_get_contents('image.jpg')))."\n";
$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>";
}
Une fois sur deux, j'ai ces messages "Ok, fichier envoyé correctement" et "Votre demande a bien été envoyé. Nous vous remercions." la BDD est incrémentée, sauf de mon fichier et je reçois le mail avec les infos, sans la pièce jointe. Le fichier, lui est bien dans le répertoire temporaire.
Et une fois sur deux il me renvoi "L'envoi du formulaire a échoué".
La connexion à la base se fait.
J'ai le sentiment que mon problème est dans les headders, pour ce qui est de la pièce jointe.
Et je ne sais pas exactement de quelle manière on prépare un champ pour recevoir un fichier sous sql, pour le moment il est en "varchar" avec une taille de 50 000.
Je fais mes premières armes et certaines choses m'échappent
Merci à tous