Aller au contenu

upload sécurisée image


Alic3s

Sujets conseillés

Bonjour à tous, j'ai adapté et codé un formulaire d'upload d'image, il upload bien, mais il upload tout !! il prend pas en compte mais instruction sur la taille et l'extension, tout y passe sans erreur, quelqu'un peut m'aider ? je seche... merci d'avance.

<?
// Sessions

session_start();

if (!$_SESSION["membre"])
{
header("Location:index.php");
}

// Taille maximum
$MAX_FILE_SIZE = 500000;

// Dossier de destination du fichier
$folder = "photos_bg/";

if ($fichier != "")

{

// Tableau array des différents types
$allowed_types = array("image/bmp", "image/gif", "image/pjpeg", "image/jpeg", "image/jpg");

// Variables récupérée par methode POST du formulaires
$fname = $HTTP_POST_FILES['fichier']['name'];
$ftype = $HTTP_POST_FILES['fichier']['type'];
$fsize = $HTTP_POST_FILES['fichier']['size'];
$ftmp = $HTTP_POST_FILES['fichier']['tmp_name'];

// Diverses test afin de savoir si :
// Le format de fichier correspond à notre tableau array
if(!in_array($ftype, $allowed_types)){$error = 1;}

// La taille du fichier n'est pas dépassée
if($fsize > $MAX_FILE_SIZE){$error = 2;}

// Le fichier n'existe pas déjà
if(file_exists($folder."m_".$fname)){$error = 3;}

include("misc.inc");
$db = mysql_connect($host,$user,$password) or die ("Erreur de connection");
mysql_select_db($database,$db) or die ("Erreur de connection a la base");

$query3 = "SELECT * FROM bg_consults WHERE bgc_pseudo ='".$_SESSION["membrelogin"]."'";
$result3 = mysql_query($query3) or die('Erreur SQL !<br>'.$query3.'<br>'.mysql_error());

while($r2 = mysql_fetch_array($result3)) {

$nomp = $r2["bgc_nom"];
$prenomp = $r2["bgc_prenom"];
$idp = $r2["bgc_id"];

$newname = "$nomp$prenomp$idp.jpg";

// Si tout va bien, c'est bien déroulé
if(copy($ftmp,''.$folder.''.$newname.'')) {$error = 0;}

// Switch servant simplement à la gestion des erreures
switch($error){
case'0':
echo("Fichier correctement envoyé.");
break;
case'1':
echo("Format de fichier incorrecte.");
break;
case'2':
echo("Fichier trop volumineux.");
break;
case'3':
echo("Fichier déjà existant.");
break;

echo $newname;

$query2 = "UPDATE `bg_consults` SET `bgc_photo` = '$newname' WHERE `bgc_id` = '$idp'";
$result2 = mysql_query($query2) or die('Erreur SQL !<br>'.$sql2.'<br>election impossible [type 2]. La table contenant votre id ne répond plus. Réessayez et/ou prévenez le Webmaster.<br>'.mysql_error());


}
}
}
?>
<link href="styles.css" rel="stylesheet" type="text/css">
<form enctype="multipart/form-data" action="upphoto.php" method="post">
<table width="459" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td colspan="4"><strong class="txt">.:: Ajout de photo </strong></td>
</tr>
<tr>
<td height="45" colspan="3"><span class="txt">Fichier :</span> </td>
<td width="368"><input name="fichier" type="file" class="txt"></td>
</tr>
<tr>
<td width="15"> </td>
<td width="38"> </td>
<td width="38" class="mini"> </td>
<td class="mini">Format accepté : .jpg, .jpeg, .bmp, .gif.<br>
Maximum 400ko </td>
</tr>
<tr>
<td height="42"> </td>
<td> </td>
<td> </td>
<td><div align="right">
<input name="submit" type="submit" value="Envoyer">
</div></td>
</tr>
</table>
<br>
</form>

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

A premiere vue, et sans trop rentrer dans le détail, tu fais bien les tests pour vérifier taille, extension , etc....

Par contre tu upload ton fichier sans tenir compte du résultat des tests que tu effectues !!!

donc dans tous les cas tu uploaderas...

Esssaye de :

Initialiser la variable $error à 0 en début de script :

$error = 0;

Pour ensuite ne faire l'upload que si effectivement tous c'est bien déroulé :

// Si tous c'est bien déroulé error = 0, et on peut tenter d'uploader
if ($error==0) {
if(copy($ftmp,''.$folder.''.$newname.'')) {$error = 0;}
}

Pour Info, le code :

// Switch servant simplement à la gestion des erreures
switch($error){
case'0':
echo("Fichier correctement envoyé.");
break;
case'1':
echo("Format de fichier incorrecte.");
break;
case'2':
echo("Fichier trop volumineux.");
break;
case'3':
echo("Fichier déjà existant.");
break;

N'est pas là pour servir à la gestion d'erreur, mais servir simplement à l'affichage du compte rendu d'erreur, $error !!!

Pour finir :

Fermer le switch avec une accolade...avant la requete...

case'3':
echo("Fichier déjà existant.");
break;
}
echo $newname;

Vérifier juste avant de fermer le script php à quoi correspondent les 3 accolades fermantes !!!

}
}
}
?>

Bon Week end

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...