form complet avec multi-upload: tout est enregistré sauf les
Posté : 11 oct. 2008, 15:06
Bonjour
Il y avait longtemps que je ne vous avais pas embêté avec mes 'tits problème...
J'ai donc un formulaire de création d'article pour une boutique; sur celui ci j'ai souhaité avoir la possibilité d'uploader 6 photos par article. Tout se passe bien, sauf que les photos ne sont JAMAIS enregistrées; je précise qu'elles doivent l'être dans un dossier sur le serveur et non pas dans la base.
Voici mon code:
Lorsque je valide le formulaire, tout est bien enregistré das ma base SAUF l nom e la photo; mais les photos qui doivent, elles, être enregistrées dans un dossier "../photos/" ne le sont pas...
De plus, problème non permanent, mais plutôt "aléatoire" (je mets des guillemets car je ne suis pas certain que cela soit aléatoire), j'ai donc parfois le message d'erreur "Votre image a été rejetée (poids, taille ou type incorrect)"; j'ai vérifié le type, le poids, la taille, rien d'anormal..
Cela fait près d'une semaine que je bataille avec ça, et franchement, je ne vois plus rien...
Le moindre de vos avis, conseil, etc. sera comme toujours le bienvenu...
Merci d'avance!
EDIT: Désolé, j'ai envoyé le message une 1ere fois avant d'avoir tout écrit...
Il y avait longtemps que je ne vous avais pas embêté avec mes 'tits problème...
J'ai donc un formulaire de création d'article pour une boutique; sur celui ci j'ai souhaité avoir la possibilité d'uploader 6 photos par article. Tout se passe bien, sauf que les photos ne sont JAMAIS enregistrées; je précise qu'elles doivent l'être dans un dossier sur le serveur et non pas dans la base.
Voici mon code:
<?php
$extension = ("'jpg', 'gif', 'jpeg', 'png'");//définition de la variable extension gérant les ext. autorisées
$dos_destinataire = '../photos/';//définition de l'adresse du dossier destinataire
// on teste si le formulaire a été soumis
if (isset($_POST['enregistrer'])) {
// on se connecte notre base
include ('../code/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
//On récupère la taille de l'image
list($width,$height)=getimagesize($tmp);
if (is_uploaded_file($tmp)) //permet de vérifier si le fichier a été uplodé via http
{
//vérification du type de l'image et son poids
if ( substr($fichier, -3) == $extension && $size<=2097152 )
{
// type mime jpeg, jpg, gif ou png poids < à 2097152 octets
//Pour supprimer les espaces dans les noms de fichiers
$fichier = preg_replace ("` `i","",$fichier);
//On vérifie s'il existe une image qui a le même nom dans le répertoire
if (file_exists('../photos/'.$fichier))
{
/*Le fichier existe on rajoute dans son nom le timestamp du moment pour le
différencier de la première
*/
$nom_final= preg_replace("`.`is",date("U").".",$fichier);
}
else {
$nom_final=$fichier; //l'image n'existe pas on garde le même nom
}
//on déplace l'image dans le répertoire final
if (move_uploaded_file($nom_final, $dos_destinataire)) {
//Message indiquant que tout s'est bien passé
echo 'Votre référence a bien été prise en compte<br /><br /><br />';
}
else {
//l'image ne peut être déplacée, on supprime le fichier temporaire
@ unlink ($tmp);
echo 'L\'image n\'a pu être déplacée !<br /><br /><br />';
}
}
else {
//Le type mime, ou la taille ou le poids est incorrect
echo 'Votre image a été rejetée (poids, taille ou type incorrect)<br /><br /><br />';
}
}
$tab_final[$compteur] = $nom_final;
$compteur++;
}
}
// on teste la déclaration de nos variables
if (!isset($_POST['description']) && ($_POST['titre']) && ($_POST['prix'])) {
$erreur = 'Les variables nécessaires au script ne sont pas définies.';
}
else {
if (empty($_POST['description'])&& ($_POST['titre']) && ($_POST['prix'])) {
$erreur = 'Le champs description, titre ou prix est vide.';
}
// si tout est bon, on peut commencer l'insertion dans la base
else {
// lancement de la requête d'insertion
//définition de quelques variables
$marque = $_POST['marque'];
$modele = $_POST['modele'];
$annee = $_POST['annee'];
$type = $_POST['type'];
$cc = $_POST['cc'];
$genre = $_POST['genre'];
$titre = $_POST['titre'];
$descrip = $_POST['description'];
$prix = $_POST['prix'];
$photo = $_FILES['fichier'];
$famille = $_POST['famille'];
$ssfamille = $_POST['ssfamille'];
$nam_photo = $nom_final;
$sql = "INSERT INTO stock (id_article, date, marque, modele, type, annee, cc, titre, descrip, prix, famille, ss_famille, nam_photo) VALUES('', NOW(), '".$marque."', '".$modele."', '".$type."', '".$annee."', '".$cc."', '".$titre."', '".$descrip."', '".$prix."', '".$famille."', '".$ssfamille."', '".$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());
// on ferme la connexion à la base de données
mysql_close();
// on redirige vers la page d'accueil de l'admin
header('Location: insert_article.php');
// on termine le script courant
exit();
}
}
}
?>
Et maintenant le formulaire:Code : Tout sélectionner
<form action="insert_article.php" method="POST" enctype="multipart/form-data">Telechargement de fichier:<br />
<label>Marque</label>
<select name="marque"><?php if (isset($_POST['marque'])) echo (trim($_POST['marque'])); ?>
<option value="">------------------------------------------</option>
<option value="abc">ABC</option>
<option value="ace">ACE</option>
(380 lignes à suivre... + les autres champs...et enfin la partie "file")
<br />
<input type="hidden" name="MAX_FILE_SIZE" VALUE="2000000" />
<br />
<legend>Upload des photos:<?php if (isset($_POST['photo'])) echo (trim($_POST['photo'])); ?></legend>
<br />
<label for="photo">Photo 1:</label><input type="file" name="fichier[]" />
<br />
<label for="photo_2">Photo 2:</label><input type="file" name="fichier[]" />
<br />
<label for="photo_3">Photo 3:</label><input type="file" name="fichier[]" />
<br />
<label for="photo_4">Photo 4:</label><input type="file" name="fichier[]" />
<br />
<label for="photo_5">Photo 5:</label><input type="file" name="fichier[]" />
<br />
<label for="photo_6">Photo 6:</label><input type="file" name="fichier[]" />
<br />
<label>
<input type="submit" name="enregistrer" value="Enregistrer">
</label>
</form>
De plus, problème non permanent, mais plutôt "aléatoire" (je mets des guillemets car je ne suis pas certain que cela soit aléatoire), j'ai donc parfois le message d'erreur "Votre image a été rejetée (poids, taille ou type incorrect)"; j'ai vérifié le type, le poids, la taille, rien d'anormal..
Cela fait près d'une semaine que je bataille avec ça, et franchement, je ne vois plus rien...
Le moindre de vos avis, conseil, etc. sera comme toujours le bienvenu...
Merci d'avance!
EDIT: Désolé, j'ai envoyé le message une 1ere fois avant d'avoir tout écrit...