par
moogli » 28 oct. 2011, 11:04
bon j'étais en forme hier, dans le formulaire c'est enctype="multipart/form-data" ...... (enfin t'a corrigé tout seul

)
Avec ça le script devrais être plus sympa
a tu bien compris la démarche de ton script ?
parce que la tu fait le redimensionnement de l'image avant l'upload "complet".
au final et déplace une image une image qui a été retravaillée et il ne s'agit plus d'un fichier uploadé donc, normalement move_uploaded_file doit retourner une erreur ou false à voir;
Pourquoi fait tu l'insertion dans la table images
avant le traitement de l'image, avant même de savoir si un fichier est arrivé sur le serveur ?
au vu de la dtd que tu indique (<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">) il serait bon de la respecter
pas <br> mais <br />
pas <input > mais <input />
<center> n'existe pas
un test rapide tout s'insère dans la table le répertoire image contient bien une image redimensionnée tous va bien

(enfin le redimensionnement rend l'image illisible, je sais plus a quoi ressemble mon MCD

).
ah si une erreur quand même : $url_image = mysql_real_escape_string($_POST['fichier']);
Notice: Undefined index: fichier in C:\xampp\htdocs\test\trunck.php on line 15 <= normal c'est dans $_FILES pas $_POST
d'ailleurs tu ne devrais pas utiliser des variables ainsi sans vérifier leurs existences (a aucun moment tu ne peux être certain que le formulaire sera conforme a ce que tu souhaite !).
le code testé : (avec des commentaires en plus à lire

)
@+
<?php
//require("connexion/conf.php");
$sql_serveur = 'localhost';
$sql_user = 'root';
$sql_passwd = '';
$sql_bdd = 'test';
$conn = mysql_connect($sql_serveur, $sql_user, $sql_passwd) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_query("SET CHARACTER SET 'utf8';")or die(mysql_error());
mysql_select_db($sql_bdd, $conn);
if(isset($_POST['action'])){
// Récupération des variables nécessaires
$titre_image = mysql_real_escape_string($_POST['titre_image']);
$texte_image = mysql_real_escape_string($_POST['texte_image']);
$url_image = mysql_real_escape_string($_POST['fichier']);
$sq="insert into images values('',\"$titre_image\",\"$texte_image\",\"$url_image\")";
$quer=mysql_query($sq ) or die('erreur sq: '.mysql_error());
define('TARGET', 'images/');
define('MAX_SIZE', 200000);
define('WIDTH_MAX', 800);
define('HEIGHT_MAX', 800);
$tabExt = array('jpg','gif','png','jpeg');
$infosImg = array();
$extension = '';
$message = '';
$nomImage = '';
if( !is_dir(TARGET) ) {
if( !mkdir(TARGET, 0755) ) {
// hum c'est un peu brutal ça même pas un affichage du site ^^
exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !');
}
}
if(!empty($_POST)){ // un peu bête si tu est ici c'est que $_POST['action'] existe don cpas vide ^^
// On verifie si le champ est rempli
if( !empty($_FILES['fichier']['name']) ) {
// Recuperation de l'extension du fichier
$extension = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);
// On verifie l'extension du fichier
if(in_array(strtolower($extension),$tabExt)) {
// On recupere les dimensions du fichier
$infosImg = getimagesize($_FILES['fichier']['tmp_name']);
// On verifie le type de l'image
if($infosImg[2] >= 1 && $infosImg[2] <= 14) {
// On verifie les dimensions et taille de l'image
if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) &&
(filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE))
//on redimentionne limage
// manque pas des {} la pour x et y ?
$x = 300;
$y = 200; # Taille en pixel de l'image redimensionnée
if ($infosImg) echo 'Image redimensionnée ... ';
if ($infosImg['mime']=='image/jpeg' ) {
$img_big = imagecreatefromjpeg($_FILES['fichier']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagejpeg($img_mini,$_FILES['fichier']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/png' ) {
$img_big = imagecreatefrompng($_FILES['fichier']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagepng($img_mini,$_FILES['fichier']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/gif' ) {
$img_big = imagecreatefromgif($_FILES['fichier']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagegif($img_mini,$_FILES['fichier']['tmp_name'] );
}
// la y manque un truc hein !!!!
{
// Parcours du tableau d'erreurs
if(isset($_FILES['fichier']['error'])
&& UPLOAD_ERR_OK === $_FILES['fichier']['error']) {
// On renomme le fichier
$nomImage = md5(uniqid()) .'.'. $extension;
// Si c'est OK, on teste l'upload
if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage)) {
$message = 'Upload réussi !'.__LINE__;
}
else {
// Sinon on affiche une erreur systeme
$message = 'Problème lors de l\'upload !'.__LINE__;
}
}
else {
$message = 'Une erreur interne a empêché l\'uplaod de l\'image'.__LINE__;
}
}
}
else {
// Sinon erreur sur les dimensions et taille de l'image
$message = 'Erreur dans les dimensions de l\'image !'.__LINE__;
}
}
else {
// Sinon erreur sur le type de l'image
$message = 'Le fichier à uploader n\'est pas une image !'.__LINE__;
}
}
else {
var_dump($_FILES);
// Sinon on affiche une erreur pour l'extension
$message = 'L\'extension du fichier est incorrecte !'.__LINE__; // <= ça c'est pas bon comme message c'est pas l'extension mais la validation de l'envoi ^^
}
}
else {
// Sinon on affiche une erreur pour le champ vide
$message = 'Veuillez remplir le formulaire svp !';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajouter un Client</title>
</head>
<body>
<center><!-- ça n'existe pas dans le doctype indiqué => div + css -->
<?php
if( !empty($message) ) {
echo '<p>',"\n"; echo "\t\t<strong>", htmlspecialchars($message) ,"</strong>\n";
echo "\t</p>\n\n";
}
echo '<p style="color:#ff0000;font-weight:bold;">Entrée correctement ajouté à la base de données</p>'."<br><br><a href=\"addcategorie.php\">Ajouter un nouveau client</a>"."<br><br><a href=\"admin.php\">Revenir à l'accueil</a>";
}
else{
?>
<center><!-- pourquoi un deuxième ? -->
<h1>Ajouter une catégorie:</h1>
<br />
<form action="" method="post" enctype="multipart/form-data"><!-- si c'est sur la même page pas obligé de mettre le nom mais je crois que la dtd l'impose
addimage.php -->
<input type="hidden" name="action" value="add" />
<!-- un input doit être terminé par un / <input machin /> -->
Ajouter le titre:<br /><input type="text" name="titre_image"><br /><br />
Ajouter le texte:<br /><textarea name="texte_image"></textarea><br /><br />
<fieldset>
<label for="fichier_a_uploader" title="Recherchez le fichier à uploader !">Ajouter l'image:</label> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_SIZE; ?>" />
<input name="fichier" type="file" id="fichier_a_uploader" />
</fieldset>
<br />
<br />
<input type="submit" name="submit" value="Envoyer" /></input>
</form>
<br /> <!-- attention c'est <br /> et pas <br> -->
<!-- existe pas dans la dtd choisie -->
<font face="Verdana" size="2"><a href="admin.php">Revenir à l'accueil</a></font>
</center>
<?php
}
?>
</center>
</body>
</html>
bon j'étais en forme hier, dans le formulaire c'est enctype="multipart/form-data" ...... (enfin t'a corrigé tout seul :) )
Avec ça le script devrais être plus sympa
a tu bien compris la démarche de ton script ?
parce que la tu fait le redimensionnement de l'image avant l'upload "complet".
au final et déplace une image une image qui a été retravaillée et il ne s'agit plus d'un fichier uploadé donc, normalement move_uploaded_file doit retourner une erreur ou false à voir;
Pourquoi fait tu l'insertion dans la table images [b]avant[/b] le traitement de l'image, avant même de savoir si un fichier est arrivé sur le serveur ?
au vu de la dtd que tu indique (<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">) il serait bon de la respecter
pas <br> mais <br />
pas <input > mais <input />
<center> n'existe pas
un test rapide tout s'insère dans la table le répertoire image contient bien une image redimensionnée tous va bien :) (enfin le redimensionnement rend l'image illisible, je sais plus a quoi ressemble mon MCD :lol: ).
ah si une erreur quand même : $url_image = mysql_real_escape_string($_POST['fichier']);
Notice: Undefined index: fichier in C:\xampp\htdocs\test\trunck.php on line 15 <= normal c'est dans $_FILES pas $_POST :evil:
d'ailleurs tu ne devrais pas utiliser des variables ainsi sans vérifier leurs existences (a aucun moment tu ne peux être certain que le formulaire sera conforme a ce que tu souhaite !).
le code testé : (avec des commentaires en plus à lire :mrgreen: )
@+
[php]
<?php
//require("connexion/conf.php");
$sql_serveur = 'localhost';
$sql_user = 'root';
$sql_passwd = '';
$sql_bdd = 'test';
$conn = mysql_connect($sql_serveur, $sql_user, $sql_passwd) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_query("SET CHARACTER SET 'utf8';")or die(mysql_error());
mysql_select_db($sql_bdd, $conn);
if(isset($_POST['action'])){
// Récupération des variables nécessaires
$titre_image = mysql_real_escape_string($_POST['titre_image']);
$texte_image = mysql_real_escape_string($_POST['texte_image']);
$url_image = mysql_real_escape_string($_POST['fichier']);
$sq="insert into images values('',\"$titre_image\",\"$texte_image\",\"$url_image\")";
$quer=mysql_query($sq ) or die('erreur sq: '.mysql_error());
define('TARGET', 'images/');
define('MAX_SIZE', 200000);
define('WIDTH_MAX', 800);
define('HEIGHT_MAX', 800);
$tabExt = array('jpg','gif','png','jpeg');
$infosImg = array();
$extension = '';
$message = '';
$nomImage = '';
if( !is_dir(TARGET) ) {
if( !mkdir(TARGET, 0755) ) {
// hum c'est un peu brutal ça même pas un affichage du site ^^
exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !');
}
}
if(!empty($_POST)){ // un peu bête si tu est ici c'est que $_POST['action'] existe don cpas vide ^^
// On verifie si le champ est rempli
if( !empty($_FILES['fichier']['name']) ) {
// Recuperation de l'extension du fichier
$extension = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);
// On verifie l'extension du fichier
if(in_array(strtolower($extension),$tabExt)) {
// On recupere les dimensions du fichier
$infosImg = getimagesize($_FILES['fichier']['tmp_name']);
// On verifie le type de l'image
if($infosImg[2] >= 1 && $infosImg[2] <= 14) {
// On verifie les dimensions et taille de l'image
if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) &&
(filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE))
//on redimentionne limage
// manque pas des {} la pour x et y ?
$x = 300;
$y = 200; # Taille en pixel de l'image redimensionnée
if ($infosImg) echo 'Image redimensionnée ... ';
if ($infosImg['mime']=='image/jpeg' ) {
$img_big = imagecreatefromjpeg($_FILES['fichier']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagejpeg($img_mini,$_FILES['fichier']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/png' ) {
$img_big = imagecreatefrompng($_FILES['fichier']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagepng($img_mini,$_FILES['fichier']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/gif' ) {
$img_big = imagecreatefromgif($_FILES['fichier']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagegif($img_mini,$_FILES['fichier']['tmp_name'] );
}
// la y manque un truc hein !!!!
{
// Parcours du tableau d'erreurs
if(isset($_FILES['fichier']['error'])
&& UPLOAD_ERR_OK === $_FILES['fichier']['error']) {
// On renomme le fichier
$nomImage = md5(uniqid()) .'.'. $extension;
// Si c'est OK, on teste l'upload
if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage)) {
$message = 'Upload réussi !'.__LINE__;
}
else {
// Sinon on affiche une erreur systeme
$message = 'Problème lors de l\'upload !'.__LINE__;
}
}
else {
$message = 'Une erreur interne a empêché l\'uplaod de l\'image'.__LINE__;
}
}
}
else {
// Sinon erreur sur les dimensions et taille de l'image
$message = 'Erreur dans les dimensions de l\'image !'.__LINE__;
}
}
else {
// Sinon erreur sur le type de l'image
$message = 'Le fichier à uploader n\'est pas une image !'.__LINE__;
}
}
else {
var_dump($_FILES);
// Sinon on affiche une erreur pour l'extension
$message = 'L\'extension du fichier est incorrecte !'.__LINE__; // <= ça c'est pas bon comme message c'est pas l'extension mais la validation de l'envoi ^^
}
}
else {
// Sinon on affiche une erreur pour le champ vide
$message = 'Veuillez remplir le formulaire svp !';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajouter un Client</title>
</head>
<body>
<center><!-- ça n'existe pas dans le doctype indiqué => div + css -->
<?php
if( !empty($message) ) {
echo '<p>',"\n"; echo "\t\t<strong>", htmlspecialchars($message) ,"</strong>\n";
echo "\t</p>\n\n";
}
echo '<p style="color:#ff0000;font-weight:bold;">Entrée correctement ajouté à la base de données</p>'."<br><br><a href=\"addcategorie.php\">Ajouter un nouveau client</a>"."<br><br><a href=\"admin.php\">Revenir à l'accueil</a>";
}
else{
?>
<center><!-- pourquoi un deuxième ? -->
<h1>Ajouter une catégorie:</h1>
<br />
<form action="" method="post" enctype="multipart/form-data"><!-- si c'est sur la même page pas obligé de mettre le nom mais je crois que la dtd l'impose
addimage.php -->
<input type="hidden" name="action" value="add" />
<!-- un input doit être terminé par un / <input machin /> -->
Ajouter le titre:<br /><input type="text" name="titre_image"><br /><br />
Ajouter le texte:<br /><textarea name="texte_image"></textarea><br /><br />
<fieldset>
<label for="fichier_a_uploader" title="Recherchez le fichier à uploader !">Ajouter l'image:</label> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_SIZE; ?>" />
<input name="fichier" type="file" id="fichier_a_uploader" />
</fieldset>
<br />
<br />
<input type="submit" name="submit" value="Envoyer" /></input>
</form>
<br /> <!-- attention c'est <br /> et pas <br> -->
<!-- existe pas dans la dtd choisie -->
<font face="Verdana" size="2"><a href="admin.php">Revenir à l'accueil</a></font>
</center>
<?php
}
?>
</center>
</body>
</html>[/php]