[Résolu] upload images aux résultats aléatoires
Posté : 03 janv. 2011, 11:45
Bonjour, et bonne année
Voilà mon problème:
J'ai un formulaire d'où le propriétaire peut charger 3 photos. Lors du chargement, je crée un dossier (normalement) spécifique à cet envoi. Or, non seulement 2 dossiers sont créés, mais sur 3 photos, seules 2 sont enregistrées, et je ne sais pas où est la 3eme. Même chose quand il y 2 photos, 2 dossiers sont créés et une seule image est chargée. Petite précision, je vois cela avec Filezilla sur l'hébergement.
Pour commencer, voici le code dans l'entête:
D'avance merci pour vos avis, remarques et conseils
Voilà mon problème:
J'ai un formulaire d'où le propriétaire peut charger 3 photos. Lors du chargement, je crée un dossier (normalement) spécifique à cet envoi. Or, non seulement 2 dossiers sont créés, mais sur 3 photos, seules 2 sont enregistrées, et je ne sais pas où est la 3eme. Même chose quand il y 2 photos, 2 dossiers sont créés et une seule image est chargée. Petite précision, je vois cela avec Filezilla sur l'hébergement.
Pour commencer, voici le code dans l'entête:
session_start();
if (!isset($_SESSION['nom'])){
header ('Location:ident.php');
exit();
}
include ('includes/connect.inc.php');
$requete_id = mysql_query("SELECT * FROM stock ORDER BY id_article DESC LIMIT 1");
while ($row = mysql_fetch_array($requete_id, MYSQL_BOTH))
{
$last_id = ($row[0]);
}
$nouvel_id = ++$last_id ;
$utf = mysql_query("SET NAMES UTF8");
mysql_free_result;
celui traitant les données du form
set_time_limit(120);//modification de la limitation de temps d'exécution du script en seconde
$nom_dossier= $nouvel_id."-".date('d-m-y')."-".time();
$extension = array('jpg', 'JPG', 'JPEG', 'gif', 'jpeg', 'png');//définition de la variable extension gérant les ext. autorisées
$dos_destinataire = mkdir("../boutik/imag-art/$nom_dossier");//définition de l'adresse du dossier destinataire et création(mkdir) du dossier
$path = "../boutik/imag-art/".$nom_dossier."/";
// on teste si le formulaire permettant d'uploader un fichier a été soumis
if (isset($_POST['Enregistrer'])) {
// on se connecte notre base
include ('includes/connect.inc.php');
//déclaration chargement photo
if(isset($_FILES['fichier']))
{
//$_FILES existe
$compteur=0;
foreach ($_FILES['fichier']['name'] as $key => $value)
{
$fichier=$value;//nom reel de l'image
$size=$_FILES['fichier']['size'][$key]; //poids de l'image en octets
$tmp=$_FILES['fichier']['tmp_name'][$key];//nom temporaire de l'image (sur le serveur)
$type=$_FILES['fichier']['type'][$key];//type de l'image
//vérification du type de l'image et son poids
if ( in_array(substr($fichier, -3), $extension) && $size<=4194304 )
{
// type mime jpeg, jpg, gif ou png poids < à 4194304 octets soit 4Mo
//le nouveau nom de l'image est composé du nouvel id, de -, de la date format unix, d'un point et de l'extension.
$nom_final= $nouvel_id."-".date('d-m-y')."-".time().".".substr($fichier, -3);
echo $path; //on déplace l'image dans le répertoire final
if (move_uploaded_file($tmp, $path.$nom_final))
{
//Message indiquant que tout s'est bien passé
echo '<p>Votre référence a bien été prise en compte<br /></p>';
}
}
$tab_final[$compteur] = $nom_final;
$compteur++;
}
}//fin de l'instruction if isset($_FILES['fichier'])
// on teste la déclaration de nos variables
if (!isset($_POST['descriptif']) && ($_POST['titre']) && ($_POST['prix']))
{
$erreur = 'Les variables nécessaires au script ne sont pas définies.';
}
else {
if (empty($_POST['descriptif']) || empty($_POST['titre']) || empty($_POST['prix']))
{
$erreur = '<p>Le champ description, titre ou prix est vide.</p>';
}
// si tout est bon, on peut commencer l'insertion dans la base
else {
// lancement de la requête d'insertion
//définition des variables
$marque = $_POST['marque'];
$modele = $_POST['modele'];
$annee = $_POST['annee'];
$type = $_POST['type'];
$cc = $_POST['cc'];
$genre = $_POST['genre'];
$titre = $_POST['titre'];
$descrip = $_POST['descriptif'];
$devis = $_POST['devis'];
$port = $_POST['port'];
$prix = $_POST['prix'];
$photo = $_FILES['fichier'];
$famille = $_POST['nomfamille'];
$nam_photo = $nom_final;
$sql = "INSERT INTO stock
(id_article, famille, marque, modele, annee, type, cc, prix, devis, titre, descriptif, port, date_insert, nom_dossier, nam_photo)
VALUES
('', '".$famille."', '".$marque."', '".$modele."', '".$annee."', '".$type."', '".$cc."', '".$prix."', '".$devis."', '".$titre."' ,'".$descriptif."', '".$port."', NOW(), '".$nom_dossier."', '".$nam_photo."')";
// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}
}
}
et la partie html du form (avec son entête) concernée
<form action="creat-art.php" class="gestart" method="POST" enctype="multipart/form-data" >
<input type="hidden" name="MAX_FILE_SIZE" VALUE="4194304" />
<legend>Upload des photos:</legend><br />
<label for="photo">Photo 1:</label><input type="file" name="fichier[]" /><br />
<label for="photo">Photo 2:</label><input type="file" name="fichier[]" /><br />
<label for="photo">Photo 3:</label><input type="file" name="fichier[]" /><br />
Quand j'utilise la boucle ci dessous, j'ai systématiquement un message "erreur systeme", mais si je fais un echo sur la boucle, il affiche "123".
//vérification des erreurs
if ($_FILES['fichier']['error'] > 0)
{
echo '<p>Problème de chargement photo(s):';
switch($_FILES['fichier']['error']){
case 1:
print 'le fichier excede la definition upload_max_filessize du php ini';
break;
case 2:
print 'le fichier excede la quantité de 4mo définie dans le code';
break;
case 3:
print 'le fichier n\'est qu\'en partie chargé';
break;
case 4:
print 'pas de fichier à charger';
break;
case 6:
print 'pas trouvé de dossier temporaire';
break;
case 7:
print'incapable d\'écrire sur le disque';
break;
case 8:
print 'arrêt du chargement par utilisateur';
break;
default:
print 'erreur systeme';
break;
}//fin switch
print '</p>';
}// fin du if pour erreurs
D'autre part, après l'upload, j'ai autant de message "Votre référence a bien été prise en compte" qu'il y a d'image, et l'echo de la $path m'affiche bien le bon chemin, aec un seul dossier pour les 3 images.... D'avance merci pour vos avis, remarques et conseils