réalisation d'une galerie - probleme upload

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : réalisation d'une galerie - probleme upload

Re: réalisation d'une galerie - probleme upload

par lamerehic » 09 août 2012, 00:28

J'ai trouvé une des erreurs, c'était la virgule en trop dans les requetes....

Re: réalisation d'une galerie - probleme upload

par lamerehic » 31 juil. 2012, 11:41

Merci pour les lumières...
j'avance progressivement:
J'ai repris mon code, inséré un if, mais j'ai toujours pas d'insert dans la base...
J'arrive pas a voir pourquoi,

Code : Tout sélectionner

$poids = getimagesize('images/genuine/'.$filename); if($poids !=0) { // on enregistre les données $sql = "INSERT INTO poster (nom, note, photo, md5, model, title, date, ip, warning, candidate, accepted, date_accepted) VALUES ( '".mysql_real_escape_string($nom)."', '".mysql_real_escape_string($note)."', '".mysql_real_escape_string($photo)."', '".mysql_real_escape_string($md5)."', '".mysql_real_escape_string($model)."', '".mysql_real_escape_string($title)."', '".mysql_real_escape_string($today)."', '".mysql_real_escape_string($loc)."', '".mysql_real_escape_string($warnings)."', '".mysql_real_escape_string($candidate)."', '".mysql_real_escape_string($accepted)."', '".mysql_real_escape_string($date_accepted)."', ) "; mysql_query($sql); //Si il y a une erreur, on crie ^^ if (!$sql) { die('Requête invalide : ' . mysql_error()); echo"$sql"; } // on ferme la connection mysql donc ci-dessous plus de sql mysql_close($connect); }; var_dump($sql);



j'ai bien le contenu de la requete qui est la mais il n'est pas inséré dans la base:

Code : Tout sélectionner

var_dump($sql): string(305) "INSERT INTO poster (nom, note, photo, md5, model, title, date, ip, warning, candidate, accepted, date_accepted) VALUES ( 'phot', '5', '../images/genuine/IMG_5807.jpg', '7fda55f20e25f3067260b448cc21617f', '', 'IMG_5807.jpg.', 'July 31, 2012, 9:01 am', '127.0.0.1', '0', '0', '0', '0', ) "

Re: réalisation d'une galerie - probleme upload

par moogli » 28 juil. 2012, 20:23

Salut,

Pour commencer il faut que tu mette la création de miniature et l'insertion en base dans un if conditionné par le résultat de move_uploaded_file.
En clair
<?php
If(move_uploaded_file(lefichiertemporaire, lefichierfinal) === true) {
// miniature
// insertion. 
}
?>
Sinon ton code de miniature ou d'insertion (voir les deux) est exécuté même si l'upload à foiré, ce qui n'est pas bon du tout ;)


Ensuite le addslashes sert à rien, le mysql_real_escape_string() est suffisant.

Je te conseil de tester ta requête en dehors afin d'etre sur que cela fonctionne sans être mélangé avec le reste.

Utilise var_dump() pour afficher les variables et voir ce qui se passe.

Tu peux aussi utiliser xdebug et un IDE comme éclipse / netbeans etc, ça te permet de debuger plus facilement :)


@+

Re: réalisation d'une galerie - probleme upload

par lamerehic » 28 juil. 2012, 15:41

merci pour ta réponse,
j'ai fini par réussir l'upload, je crée des thumbnails ensuite et je les stocke dans des dossiers.
Maintenant je veux faire une entrée dans la base.
avec l'id le nom, le titre, etc...
j'ai réécrit le code, j'ai bien l'upload mais j'ai pas d'entrée dans la base.

Code : Tout sélectionner

<?php include "config.php"; include "database.fn.php"; // ***** ici on récupère les données et on les stocke dans mysql $nom = $_POST['nom']; $note = $_POST['note']; //******* On renomme l'image de manière aléatoire pour éviter un conflit dans le dossier (2 fois le même nom par exemple include 'functions.php'; $allowed_ext = "jpg, gif, png, jpeg, JPG"; $top = 50; $filename = $_FILES['image']['name']; // Is the extension allowed? $extension = checkext($filename, $allowed_ext); if ($extension != False) { // Move the temporary file to the image folder $save_to="temp/"; if ($_POST['send_upload']==1) { $file_name=$_FILES['image']['name']; move_uploaded_file($_FILES['image']['tmp_name'], $save_to.basename($file_name)) or die('Cannot upload image'); $filepath = $save_to.basename($file_name); } // Create an image resource from the uploaded image if($extension == "jpg" || $extension == "jpeg" || $extension == "JPG"){ $source=imagecreatefromjpeg($filepath); }elseif($extension == "png") { $source=imagecreatefrompng($filepath); }elseif($extension == "gif") { $source=imagecreatefromgif($filepath); } // Resize the image resource $width_orig = imagesx( $source ); // width of image resource $height_orig = imagesy( $source ); // height of image resource $uploadedimage = $source; // Create space for the resized image //Save the resized image if($extension == "jpg" || $extension == "jpeg" || $extension == "JPG"){ imagejpeg($uploadedimage, $filepath, 100); }elseif($extension == "png") { imagepng($uploadedimage, $filepath); }elseif($extension == "gif") { imagegif($uploadedimage, $filepath); } //Print and clean stuff $im =imagejpeg($uploadedimage, "images/genuine/" . $filename ); //imagedestroy($im); imagedestroy($uploadedimage); // imagedestroy($source); } $im = imagecreatefromjpeg('images/genuine/'.$filename); // thumbnail list($width, $height) = getimagesize('images/genuine/'.$filename); $new_width = 150; $new_height = round((150/$width)*$height); // Redimensionnement $image_p = imagecreatetruecolor($new_width, $new_height); imagecopyresampled($image_p, $im, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagejpeg($image_p, 'images/thumbs/'.md5($filename).'-thumb.jpg', 70); imagedestroy($im); imagedestroy($image_p); $link = database_connect($db); $sql = "SELECT * FROM poster WHERE `md5`='".addslashes(md5($filename))."'"; $result = mysql_query($sql, $link) or die('Erreur MySQL'); if (mysql_num_rows($result)==1) return md5($filename); $ip = $_SERVER["REMOTE_ADDR"]; $photo = "../images/genuine/" . $filename; $md5 = ".addslashes(md5($filename))."; $model = ''; $title = ".addslashes($filename)."; $today = date("F j, Y, g:i a"); $loc = ".addslashes($ip)."; $warnings = 0; $candidate = 0; $accepted = 0; $date_accepted = 0; // echo $title,"</br>", $photo,"</br>", $md5, $loc, $today; // on enregistre les données $result = "INSERT INTO poster (id,nom, note, photo, md5, model, title, date, ip, warning, candidate, accepted, date_accepted) VALUES ( '', '".mysql_real_escape_string($nom)."', '".mysql_real_escape_string($note)."', '".mysql_real_escape_string($photo)."', '".mysql_real_escape_string($md5)."', '".mysql_real_escape_string($model)."', '".mysql_real_escape_string($title)."', '".mysql_real_escape_string($today)."', '".mysql_real_escape_string($loc)."', '".mysql_real_escape_string($warnings)."', '".mysql_real_escape_string($candidate)."', '".mysql_real_escape_string($accepted)."', '".mysql_real_escape_string($date_accepted)."', ) "; mysql_query($result); //Si il y a une erreur, on crie ^^ if (!$result) { die('Requête invalide : ' . mysql_error()); echo"$result"; } // on ferme la connection mysql donc ci-dessous plus de sql mysql_close($link); ?>

Re: réalisation d'une galerie - probleme upload

par moogli » 27 juil. 2012, 08:57

plutot garder ce bout de code :)
<?php
$fichier="images/".$_FILES['image']['name'];
if (is_uploaded_file($_FILES['image']['name'])){
   if (!move_uploaded_file($_FILES['image']['tmp_name'],$fichier)){
      echo "Problème: impossible de déplacer le fichier"; exit;
   } else {
      echo "Problème : Attaque possible par le fichier ".$_FILES['image']['name']; exit;
  }
}
vu que $fichier="images/".$_FILES['image']['name']; ton fichier sera dans un répertoire images enfant du répertorie courant (donc soit enfant de celui où ce trouve ce script soit enfant du répertoire qui contient le script appelant celui ci :)

bon la tu écrase le nom de fichier unique fait juste au dessus mais c'est fonctionnel ;)
par contre toi tu ajoute $dir, sachant que $fichier contient deja 'images/' tu va avoir images/images/nomdfichier.ext :)
donc enlève $fichier="images/".$_FILES['image']['name']; qui ne sert à rien, etre supprime la variable $dir.

+

pour le E_ALL cherche error_reporting :)

Re: réalisation d'une galerie - probleme upload

par lamerehic » 25 juil. 2012, 15:20

Salut,
j'ai enlevé le second move_uploded_file
dans mon php info (sous xamp) je suis en PHP Version 5.3.8
display_errors On On etc mais je ne vois pas de E_ALL
et j'ai viré le exit

Code : Tout sélectionner

<?php include "config.php"; include "database.fn.php"; $link = database_connect($db); // ***** ici on récupère les données et on les stocke dans mysql $nom = $_POST['nom']; $note = $_POST['note']; //******* On renomme l'image de manière aléatoire pour éviter un conflit dans le dossier (2 fois le même nom par exemple $dir = 'images/'; $ext = strtolower( pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION) ); $contenu=strip_tags($ext); // pour nettoyer le contenu du fichier des éventuelles balises HTML ou PHP $fichier="images/".uniqid('',false).'.'.$contenu; //**** on bouge l'image move_uploaded_file($_FILES['image']['tmp_name'], $dir.$fichier); $photo = $fichier; // on enregistre les données $result = mysql_query("INSERT INTO poster VALUES ( '', '".mysql_real_escape_string($nom)."', '".mysql_real_escape_string($note)."', '".mysql_real_escape_string($photo)."' ) "); //Si il y a une erreur, on crie ^^ if (!$result) { die('Requête invalide : ' . mysql_error()); } // on ferme la connection mysql donc ci-dessous plus de sql mysql_close($link); ?>
J'ai bien le chemin mais le fichier n'est pas déplacé...
Je ne sais pas s'il est uploadé quelque part non plus.

Re: réalisation d'une galerie - probleme upload

par moogli » 25 juil. 2012, 13:14

salut,

Pourquoi as tu deux move_uploded_file ?

le premier ne te suffit pas ?
rajout lui le nom du répertoire dans le chemin (en fait le second semble correct pas le premier).

Est ce que ton niveau d'erreur est à E_ALL (tupeux le voir dans un phpinfo()) c'est très important pour le développement.

vire l'utilisation de la fonction exit(). ce n'est pas une bonne pratique s'il y a une erreur elle doit être affichée mais mettre en vrac la mise en page du site, et ne pas laisser à l'internaute la possibilité de continuer sa navigation ;) )


@+

réalisation d'une galerie - probleme upload

par lamerehic » 25 juil. 2012, 12:44

Salut, je suis débutant et
Je voudrais réaliser une galerie en php.
J’essaie de comprendre et d’utiliser des fonctions php nécessaires pour écrire/lire des chemins d'images dans une bdd,
J'ai une bdd avec une table à 4 champs, id, nom, note, photo.
un fichier de connection php, un fichier config.php, un fichier insert_form.php et un formulaire
mais lorsque j’utilise l’ensemble de fichiers pour uploader et mettre à jour la bdd,
le champ « chemin de l’image » est bon, mais j’ai pas l’image uploadée dans le dossier,( les images doivent être dans un sous dossier).


voila le fichier insert_form.php:

Code : Tout sélectionner

<?php include "config.php"; include "database.fn.php"; $link = database_connect($db); // ***** ici on récupère les données et on les stocke dans mysql $nom = $_POST['nom']; $note = $_POST['note']; //******* On renomme l'image de manière aléatoire pour éviter un conflit dans le dossier (2 fois le même nom par exemple $dir = 'images/'; $ext = strtolower( pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION) ); $contenu=strip_tags($ext); // pour nettoyer le contenu du fichier des éventuelles balises HTML ou PHP $fichier=uniqid('',false).'.'.$contenu; //**** on bouge l'image $fichier="images/".$_FILES['image']['name']; if (is_uploaded_file($_FILES['image']['name'])){ if (!move_uploaded_file($_FILES['image']['tmp_name'],$fichier)){ echo "Problème: impossible de déplacer le fichier"; exit; } else { echo "Problème : Attaque possible par le fichier ".$_FILES['image']['name']; exit; } } move_uploaded_file($_FILES['image']['tmp_name'], $dir.$fichier); $photo = $fichier; // on enregistre les données $result = mysql_query("INSERT INTO poster VALUES ( '', '".mysql_real_escape_string($nom)."', '".mysql_real_escape_string($note)."', '".mysql_real_escape_string($photo)."' ) "); //Si il y a une erreur, on crie ^^ if (!$result) { die('Requête invalide : ' . mysql_error()); } // on ferme la connection mysql donc ci-dessous plus de sql mysql_close($link); ?>
au final j'ai une entrée dans la base avec le chemin, le nom mais pas de fichier image dans le dossier de destination.
Si quelqu'un à une idée cela m'aiderait grandement.
merci