Aller au contenu

upload sécurisée image


Sujets conseillés

Posté

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>

Posté

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

Posté

Je te remercie mille fois, tu es un dieu, dans ma stupidité et mes yeux collés je n'ai pas vu des erreurs vraiments bêtes, merci merci merci. Tout est okay ;)

Veuillez vous connecter pour commenter

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



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