sur un formulaire permettant aux utilisateurs d'envoyer une annonce sur ma boite mail en y joignant ou pas un fichier image, je tente d'insérer un code pour n'autoriser que les images .png, .gif, .jpg, .btm
// vérification de l'extension ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$allowed_types = array(
"image/bmp",
"image/gif",
"image/jpeg",
"image/png",
);
if (!in_array($_FILES['affiche']['type'], $allowed_types))
die ('FORMAT DE FICHIER INCORRECT');
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Sans ce code, l'envoi d'annonce sans joindre de fichier est possible mais pas de vérification d'extension.Avec ce code, les extensions sont vérifiées mais obligation de joindre un fichier, ce qui ne m'arrange pas.
Pourriez-vous, s'il vous plait, jeter un coup d'œil à mon code et m'expliquer ce qui ne vas pas.
<?php
$error_types = array(
1=>'Le fichier téléchargé excède la taille de upload_max_filesize, configurée dans le php.ini.',
2=>'Le fichier téléchargé est plus lourd que 4 Mo.',
3=>'Le fichier n a été que partiellement téléchargé. ',
6=>'Un dossier temporaire est manquant.',
7=>'Échec de l écriture du fichier sur le disque.',
8=>'Une extension PHP a arrété l envoi de fichier.'
);
if (!empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['titre']))
{
include "libmail.php";
$nom=$_POST['nom'];
$email=$_POST['email'];
$titre=$_POST['titre'];
if (isset($_POST['contenu']))
$contenu=$_POST['contenu'];
$m= new Mail; // le mail est créé
$m->From( $_POST['email'] );
$m->To( "[email protected]" ); // adresse de reception du mail
$m->Subject( "annonce " );
$imager = $_FILES['affiche']['tmp_name']; // nom du fichier temporaire
$nomimage = $_FILES['affiche']['name']; // nom réel
$message= " Nom : ".stripslashes($nom)."\n Email : ".$email."\n Titre :".stripslashes($titre)."\n Message : ".stripslashes($contenu)."\n";
$m->Body( $message); // corps du message
$m->Priority(2) ; // donne la priorité du mess
// vérification de l'extension ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$allowed_types = array(
"image/bmp",
"image/gif",
"image/jpeg",
"image/png",
);
if (!in_array($_FILES['affiche']['type'], $allowed_types))
die ('FORMAT DE FICHIER INCORRECT');
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// valide avec image
if (isset($_FILES['affiche']['name'])&&($_FILES['affiche']['error']==0))
{$m->Attach( "$imager", "$nomimage" ) ; // attache l image
$m->Send(); // envoi le mail
echo" <p/> Votre annonce a été envoyé.</p>";
}
// valide sans image
elseif (empty($_FILES['affiche']['name']))
{
$m->Send(); // envoi le mail
echo" <p/> Votre annonce a été envoyé. </p>";
}
// non valide
else {
$error_message = $error_types[$_FILES['affiche']['error']];
echo " <p>VOTRE ANNONCE N'A PAS ETE ENVOYE!!! : $error_message </p>" ;
}
}
if (isset($_POST['submit'])&&($_POST['submit'] == " "))
{
// formulaire
?>
<script>
function surligne(champ, erreur)
{
if(erreur)
champ.style.backgroundColor = "#fba";
else
champ.style.backgroundColor = "";
}
function verifNom(champ)
{
if(champ.value.length < 1)
{
surligne(champ, true);
alert("Le champ 'Nom' n'est pas rempli");
return false;
}
else
{
surligne(champ, false);
return true;
}
}
function verifMail(champ)
{
var regex = /^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/;
if(!regex.test(champ.value))
{
surligne(champ, true);
alert("Le champ 'Email' n'est pas rempli ou n'est pas valide");
return false;
}
else
{
surligne(champ, false);
return true;
}
}
function verifTitre(champ)
{
if(champ.value.length < 1)
{
surligne(champ, true);
alert("Le champ 'Titre' n'est pas rempli");
return false;
}
else
{
surligne(champ, false);
return true;
}
}
function valideForm(f)
{
var nomOk = verifNom(f.nom);
var mailOk = verifMail(f.email);
var titreOk = verifTitre(f.titre);
if(nomOk && mailOk && titreOk)
return true;
else
{
alert("Veuillez remplir correctement les champs obligatoires");
return false;
}
}
</script>
<div id="corpsform">
<center><form action="agendatest.php" method="post" enctype="multipart/form-data" onsubmit="return valideForm(this)">
<table class="center">
<tr><td>* Nom : </td><td><input type="text" size="30" name="nom" onblur="verifNom(this)" placeholder="Nom" required="required"/></td></tr>
<tr><td">* Email : </td><td><input type="text" size="30" name="email" id="email1" onblur="verifMail(this)" placeholder="Mail" required="required"/></td></tr>
<tr><td>* Titre : </td><td><input type="text" size="30" name="titre" onblur="verifTitre(this)" placeholder="Titre" required="required"/></td></tr>
<tr><td>Affiche : </td><td><input type="hidden" name="MAX_FILE_SIZE" value="4000000" /><input type="file" id="files" name="affiche" accept="image/*"/>
<output id="list"></output></td></tr>
<script>
if (window.FileReader) {
function handleFileSelect(evt) {
var files = evt.target.files;
var f = files[0];
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
document.getElementById('list').innerHTML = ['<img src="', e.target.result,'" title="', theFile.name, '" width="50"/>'].join('');
};
})(f);
reader.readAsDataURL(f);
}
} else {
alert('Ce navigateur internet ne supporte pas FileReader');
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
<tr><td class="right">Contenu :</td><td class="left"><textarea rows="5" name="contenu" cols="30" onclick='this.value = erase(this.value)' placeholder="Contenu"></textarea></td></tr>
<tr><td></td><td class="left">* Champs obligatoires.</td></tr>
<tr><td colspan="2" class="center"><input type="submit" name="submit" value="Envoyer" /></td></tr>
</table>
</form></center>
</div>