Script d'uplaod de 4 images avec min et insertion BDD

lorenzo16000 Messages postés 24 Date d'inscription lundi 13 septembre 2010 Statut Membre Dernière intervention 29 septembre 2011 - 11 mars 2011 à 15:27
lorenzo16000 Messages postés 24 Date d'inscription lundi 13 septembre 2010 Statut Membre Dernière intervention 29 septembre 2011 - 13 mars 2011 à 03:02
Bonjour, je suis nouveau sur ce forum et c'est avec désespoir que je post ici afin d'avoir de l'aide, je vous préviens je suis un très grand débutant qui essaye de comprendre j'ai donc fait un script d'upload de 4 images a partir d'une class qui me crée la miniature, il se trouve que je souhaiterais que le script renommer mes images automatiquement avec un time() ou un rename ou rand() etc...... avant de l'uplodé sur le serveur et de l'inséré dans ma BDD, je joins tous le code mais attention je vous demande juste un peu d'indulgence je suis vraiment débutant dans le domaine et il se peu que mon code pour certain le trouverons vraiment nul, si par contre vous avez des chose a me conseiller etcc vos idée et vos conseille seront les bien venu.

Pouvez-vous me dire a partir de ce script a quel moment et a quel endroit je peu placé un bout de code qui me permettre de renommer mes images par la date et l'heure d'aujourd'hui ou par une incrémentation pour éviter d'avoir le même nom d'image sur mon serveur.

<?php
require "../imgClass.php";
require "../config.php";

/* Appel du fichier contenant la fonction pagination() */
include('../libs/pagination.php');

/* Connexion à la BDD (se place normalement dans un fichier externe) */
define('DB_HOST', '....');
define('DB_USER', '....');
define('DB_PASSWORD', '....');
define('DB_NAME', '....');
$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$dbc)
{
trigger_error('Connexion à la BDD impossible : ' . mysqli_connect_error() );
exit();
}

//Traitement données.
if(!empty($_FILES)){
$img = $_FILES['img'];
$img2 = $_FILES['img2'];
$img3 = $_FILES['img3'];
$img4 = $_FILES['img4'];

$ext = strtolower(substr($img['name'],-3));
$ext = strtolower(substr($img2['name'],-3));
$ext = strtolower(substr($img3['name'],-3));
$ext = strtolower(substr($img4['name'],-3));

$allow_ext = array('jpg');//posibilité d'ajouter des extentions autre exemple('jpg','png','gif')
$erreur1 = '';
if(empty($_FILES['img']['name'])
|| empty($_FILES['img2']['name'])
|| empty($_FILES['img3']['name'])
|| empty($_FILES['img4']['name']))
{
$erreur1 = 'Veuillez charger toutes les images !
';
}

$erreur2 = '';
if((file_exists('../../photos-motos-occasions/grand-format/'.$img['name']))
|| (file_exists('../../photos-motos-occasions/grand-format/'.$img2['name']))
|| (file_exists('../../photos-motos-occasions/grand-format/'.$img3['name']))
|| (file_exists('../../photos-motos-occasions/grand-format/'.$img4['name'])))
{
$erreur2 = 'Le nom d\'une des images existe déja !
';
}
else{


if(in_array($ext,$allow_ext)){
move_uploaded_file($img['tmp_name'],"../../photos-motos-occasions/grand-format/".$img['name']);//image déplacer dans le dossier grand format
move_uploaded_file($img2['tmp_name'],"../../photos-motos-occasions/grand-format/".$img2['name']);//image déplacer dans le dossier grand format
move_uploaded_file($img3['tmp_name'],"../../photos-motos-occasions/grand-format/".$img3['name']);//image déplacer dans le dossier grand format
move_uploaded_file($img4['tmp_name'],"../../photos-motos-occasions/grand-format/".$img4['name']);//image déplacer dans le dossier grand format

Img::creerMin("../../photos-motos-occasions/grand-format/".$img['name'],"../../photos-motos-occasions/photo-annonce/",$img['name'],170,128);//image redimentioné en image min
Img::creerMin("../../photos-motos-occasions/grand-format/".$img2['name'],"../../photos-motos-occasions/min/",$img2['name'],140,68);//image redimentioné en image min
Img::creerMin("../../photos-motos-occasions/grand-format/".$img3['name'],"../../photos-motos-occasions/min/",$img3['name'],140,68);//image redimentioné en image min
Img::creerMin("../../photos-motos-occasions/grand-format/".$img4['name'],"../../photos-motos-occasions/min/",$img4['name'],140,68);//image redimentioné en image min

Img::convertirJPG("../../photos-motos-occasions/grand-format/".$img['name']);
Img::convertirJPG("../../photos-motos-occasions/grand-format/".$img2['name']);
Img::convertirJPG("../../photos-motos-occasions/grand-format/".$img3['name']);
Img::convertirJPG("../../photos-motos-occasions/grand-format/".$img4['name']);
extract($_POST);
$GrandFormat1 = "../../photos-motos-occasions/grand-format/".$img2['name'];
$GrandFormat2 = "../../photos-motos-occasions/grand-format/".$img3['name'];
$GrandFormat3 = "../../photos-motos-occasions/grand-format/".$img4['name'];
$PhotoAnnonce = "../../photos-motos-occasions/photo-annonce/".$img['name'];
$PhotoAnnonce2 = "../../photos-motos-occasions/grand-format/".$img['name'];
$Miniature1 = "../../photos-motos-occasions/min/".$img2['name'];
$Miniature2 = "../../photos-motos-occasions/min/".$img3['name'];
$Miniature3 = "../../photos-motos-occasions/min/".$img4['name'];

$date = $_POST['date'];
$sql="INSERT INTO motosOccasions (
titreAnnonce,
Cyleindre,
Annee,
Prix,
AncienPrix,
Type,
Marque,
Modele,
Couleur,
MiseEnCirculation,
Kilometrage,
Garantie,
Descriptif,
GrandFormat1,
GrandFormat2,
GrandFormat3,
PhotoAnnonce,
PhotoAnnonce2,
Miniature1,
Miniature2,
Miniature3,

date) VALUES (

'".mysql_real_escape_string($titreAnnonce)."',
'".mysql_real_escape_string($Cyleindre)."',
'".$Annee."',
'".$Prix."',
'".$AncienPrix."',
'".mysql_real_escape_string($Type)."',
'".mysql_real_escape_string($Marque)."',
'".mysql_real_escape_string($Modele)."',
'".mysql_real_escape_string($Couleur)."',
'".mysql_real_escape_string($MiseEnCirculation)."',
'".$Kilometrage."',
'".mysql_real_escape_string($Garantie)."',
'".mysql_real_escape_string($Descriptif)."',
'".$GrandFormat1."',
'".$GrandFormat2."',
'".$GrandFormat3."',
'".$PhotoAnnonce."',
'".$PhotoAnnonce2."',
'".$Miniature1."',
'".$Miniature2."',
'".$Miniature3."',
NOW())";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
if($req);
$modif = "Nouvelle annonce importer avec succé
";

}
else{
$nonmodif = "Votre fichier n'est pas une image JPG ou un fichier non conforme
";
}
}
}
?>

14 réponses

phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
11 mars 2011 à 16:14
lut,

Nouveau ! C'est bizarre ce pseudo je crois l'avoir déjà vu sur PHPcs .
Brefff,
je souhaiterais que le script renommer mes images automatiquement avec un time() ou un rename ou rand() etc...... avant de l'uplodé sur le serveur et de l'inséré dans ma BDD

Le déplacement du fichier sur le serveur ce fait avec move_uploaded_file(), donc tu doit le renommer le fichier juste avant.

Pour renommer, un truc du genre :
preg_match('/(.*)\/(.*)\.(.*)$/', $img, $matches);
$newNamePic = md5($matches[2].time()).'.'.$matches[3];

Le mieux serait de mettre ça dans une fonction ou de crée une méthode dans la classe, récursive, qui effectuerait le renommage et qui contrôlerait également si le fichier renommer existe déjà ou pas.

______________________________________________________________________
0
lorenzo16000 Messages postés 24 Date d'inscription lundi 13 septembre 2010 Statut Membre Dernière intervention 29 septembre 2011
11 mars 2011 à 18:10
Merci pour ton aide, par contre pourrais tu me dire ou je doit placé ce morceau de code dans mon script pour que ça fonctionne?
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
11 mars 2011 à 18:15
La meilleure méthode pour éviter les collisions de noms, c'est me semble-t-il, de prendre la date et l'heure avec un préfixe au choix et reprise du suffixe (qui peut avoir 4 lettres avec du jpeg).
// Une méthode de saisie du suffixe indépendante du nombre de lettres
$sfx=substr(strrchr($fch,'.'),1);
 
// À prendre avec plus ou moins de tirets
$tdy=date('Y-m-d-H-i-s').'-'.round(1000*microtime());

J'ai même été contraint d'ajouter les millisecondes dans d'un mini blog destiné à des élèves de CP (qui sous l'impulsion d'une maîtresse sans doute assez directive enregistraient tous en même temps). Cette date servait, il est vrai, d'identifiant.
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
11 mars 2011 à 18:43
[quote=Lorenzo]par contre pourrais tu me dire ou je doit placé ce morceau de code dans mon script pour que ça fonctionne?/quote
Ben, la réponse est dans mon premier post !

007Julien, c'est beaucoup de chose pour si peu. Si on veut vraiment éviter les collisions suffit de mettre un mt_rand() en préfixe ou suffixe puis c'est tout !
$newName = mt_rand().md5($matches[2].time()).'.'.$matches[3];


_________________________________________
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
11 mars 2011 à 19:48
Le mt_rand() a, me semble-t-il, le défaut majeur d'être aléatoire et de ne pas faciliter les recherches de la dernière image téléchargée par exemple...
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
11 mars 2011 à 19:58
Peux-tu détaillé ? Je vois pas où tu veux en venir


______________________________________________________________________
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
12 mars 2011 à 00:08
Je peux effectivement préciser que même si l'information fait double emploi avec la date d'enregistrement du fichier, je ne vois pas l'intérêt de semer le désordre dans les noms des fichiers sous le prétexte de gagner un appel de fonction.

J'ajoute, tant qu'à détailler, que le $matches[2] me paraît bien dangereux, si les utilisateurs laissent des accents ou même des espaces blancs dans le nom du fichier...
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
12 mars 2011 à 00:29
Mais qu'est ce que tu raconte !!!

1- Il ne s'agit pas de gagner un appel de fonction ou pas, mais je ne vois pas l'intérêt de ce compliquer la vie à faire tous ce tralala. Car l'intérêt est surtout de donner un nom aléatoire et non existant au fichier.

2- Le matches[2] correspond au nom du fichier ou de l'image(au choix, hin). Concernant les espaces blancs en l'occurrence un fichier nom+extension : ' .jpg' par exemple, je pense que tout codeur qui se respecte vérifie qu'un nom à bien été attribué au fichier et à vérifier son extension.
Et tant bien même que le nom aurait des accents, des espaces ou peu importe, il ne serait pas dangereux, comme tu dis, vu que le nom est hashé, avant d'être enregistrer sur le serveur. Pour rappel un hashage comme md5(ici) c'est lettres sans accents et des chiffres.

3- Tu ne m'a toujours pas expliqué ce que tu entends par : "ne pas faciliter les recherches de la dernière image téléchargée par exemple..."

______________________________________________________________________
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
12 mars 2011 à 00:53
Lorenzo,

Petite modif, en relisant le masque de mon PCRE :
preg_match('/(.*)\/?(.*)\.(.*)$/', $img, $NamePic);

______________________________________________________________________
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
12 mars 2011 à 09:58
Alors, c'est également beaucoup de choses pour si peu !

Maintenant, malgré toutes les précautions prises, on peut avoir à chercher en FTP sur le serveur, pour des raisons diverses et variées la dernière image chargée ou encore l'image correspondant à une intervention d'un jour donné. La présence de la date et de l'heure dans le nom du fichier permettra alors aisément de classer les fichiers et de faire la liaison...

Je ne vois vraiment pas l'utilité de supprimer cette possibilité !

Et puis laissons à l'auteur de la question la possibilité d'apprécier où est le tralala...
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
12 mars 2011 à 16:01

Maintenant, malgré toutes les précautions prises, on peut avoir à chercher en FTP sur le serveur, pour des raisons diverses et variées la dernière image chargée ou encore l'image correspondant à une intervention d'un jour donné. La présence de la date et de l'heure dans le nom du fichier permettra alors aisément de classer les fichiers et de faire la liaison...

Donc si je comprends bien, toi, tu utilise ce format de nommage par exemple pour :
1- Avoir des infos sur la dernière image chargée
2- Avoir l'image correspondante du jour ou donnée
3- Ou pour classer

Donc à chaque accès/ou affichage tu DOIT renommer le fichier, non ? Si en faites ! Puisque sinon ça ne serait pas cohérent.
Dis moi le serveur il réagit comment à des milliers d'images, surtout lors de tes classements ?



Lorenzo,

Même si tu semble t'en moquer :
Hier soir j'ai oublié de déplacer une parenthèse dans mon correctif de regEx, donc un correctif du correctif :
preg_match('/(.*\/)?(.*)\.(.*)$/', $img, $NamePic)

______________________________________________________________________
0
lorenzo16000 Messages postés 24 Date d'inscription lundi 13 septembre 2010 Statut Membre Dernière intervention 29 septembre 2011
12 mars 2011 à 21:47
Merci pour tous vos messages les gars, je ne me moque surtout pas de votre aide, bien au contraire!!!! donc en faite moi ce que je cherche a faire c'est pas a classé les images mais juste que mon script me permette de renommer une image avec un nom qui n'existe pas déjà avec une autre image, tous simplement donc merci pour ton morceau de code mais pourrais tu me dire par rapport a mon code ou faudrait il que je le place ? pourrais tu me le montrer stp? merci d'avance vraiment!!!!!!
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
12 mars 2011 à 23:23
La rubrique de la fonction move_uploaded_file dans l'aide de PHP indique clairement que le changement de nom peut se faire à cette occasion, c'est donc à ce niveau qu'il convient, semble-t-il, d'intervenir avec la méthode la plus appropriée, pour laquelle nous avons trop longuement épilogué non sans mettre en évidence les écueils à surmonter.

Toutes mes excuses et bonne continuation...
0
lorenzo16000 Messages postés 24 Date d'inscription lundi 13 septembre 2010 Statut Membre Dernière intervention 29 septembre 2011
13 mars 2011 à 03:02
Merci beaucoup je vais tester ça demain ou lundi et je reviendrais ici pour vous dire si ça marche ou pas merci à vous d'être là pour des personnes comme moi débutant
0
Rejoignez-nous