[Résolut]Probleme upload multi image

ViPHP
AB
ViPHP | 5818 Messages

29 déc. 2010, 19:31

Ça fonctionne super, j'ai enlever $form2_photo->Get_Reload_page(); à la fin, je sais pas à quoi ça sert mais sans ça je voyais pas le resultat final.
Cordialement
A quoi ça sert, c'est indiqué en commentaire juste au dessus :wink:

Et c'est normal que tu ne vois pas le tableau des résultats après le rechargement de la page car le tableau des résultats que l'on obtient avec "$form2_photo->Get_Tab_upload ()" sert uniquement pour enregistrer les résultats en bdd comme je te l'ai montré dans mon message précédent.

Pour lister les informations, il faut utiliser le tableau des messages d'information - prévu pour ça - en utilisant "$form2_photo->Get_Tab_message ();" APRES la condition "if (isset($_POST..." (comme dans l'exemple).

Et ensuite tu liste le tableau des messages d'informations toujours comme dans l'exemple.

C'est mieux d'utiliser le tableau des messages d'information pour informer du résultat car il renvoie des messages plus complets en cas d'erreurs que le tableau des résultats, et cela te permet par ailleurs de reloader la page pour éviter un multi upload en cas de rafraichissement de la page.

N'oublies pas de mettre ce topic "résolu" :)

Eléphant du PHP | 418 Messages

31 déc. 2010, 09:25

Bonjours

Je me suis rendu compte d'un problème

En fait , lorsqu'il ya une erreur sur l'envoi de l'image, ça enregistre quand même l'annonce, mais ça ne met pas l'image dans le dossier, ni l'url de cette dernière dans la bdd

J'aimerais qu'en cas d'échec de transfère, on ne puisse pas continuer, donc ne pas enregistrer l'annonce.

Voici mon code complet, si tu peux m'aider à faire ça, ça serais sympa.

J'ai bien essayer de le faire, mais je n'y suis pas arriver.
		// on définie les variables
		$Categories=$_POST['Categories'];
		$SousCategorie=$_POST['SousCategorie'];
		$Titre=$_POST['Titre'];
		$Marque=$_POST['Marque'];
		$Model=$_POST['Model'];
		$Type=$_POST['Type'];
		$Annee=$_POST['Annee'];
		$Description=$_POST['Description'];
		$Prix=$_POST['Prix'];
		$Login=$_POST['Login'];
		$Phone=$_POST['Phone'];
		$Mail=$_POST['Mail'];
		$Date=$_POST['Date'];
		$TimeDate=$_POST['TimeDate'];
		if (empty($Titre)||empty($Prix)||empty($Phone))
		{
			echo 'un ou plusieurs champs sont vides';
		}
		else
		{
			if (empty($Description))
			{
				$SQL_Description = "";
			}
			if (isset($Description))
			{
				$SQL_Description = mysql_real_escape_string(htmlspecialchars($Description, ENT_QUOTES));
			}
			$SQL_Titre = mysql_real_escape_string(htmlspecialchars($Titre, ENT_QUOTES));
			$SQL_Marque = mysql_real_escape_string(htmlspecialchars($Marque, ENT_QUOTES));
			$SQL_Model = mysql_real_escape_string(htmlspecialchars($Model, ENT_QUOTES));
			$SQL_Type = mysql_real_escape_string(htmlspecialchars($Type, ENT_QUOTES));
			$SQL_Annee = mysql_real_escape_string(htmlspecialchars($Annee, ENT_QUOTES));
			$SQL_Prix = mysql_real_escape_string(htmlspecialchars($Prix, ENT_QUOTES));
			$SQL_Login = mysql_real_escape_string(htmlspecialchars($Login, ENT_QUOTES));
			$SQL_Phone = mysql_real_escape_string(htmlspecialchars($Phone, ENT_QUOTES));
			$SQL_Mail = mysql_real_escape_string(htmlspecialchars($Mail, ENT_QUOTES));
			$SQL_Date = mysql_real_escape_string(htmlspecialchars($Date, ENT_QUOTES));
			$SQL_Etat = 'Nonvalid';
			$SQL_TimeDate = mysql_real_escape_string(htmlspecialchars($TimeDate));
			if (empty($_POST['formulaire']))
			{
				$SQL_Image1 = '';
				$SQL_Image2 = '';
				$SQL_Image3 = '';
			}
			if (isset($_POST['formulaire']))
			{
				$dossier = 'imgannonces/'.$_SESSION['login'];
				if(is_dir($dossier))
				{
					$target = $dossier;  // Repertoire cible	
				}
				if(!is_dir($dossier))
				{
					$creat = mkdir($dossier);
					$target = $dossier;
				}
				//$form2_photo = new Telechargement($dossier,'formulaire','photo','get_formulaire');
				$form2_photo = new Telechargement('/annonces/'.$dossier,'formulaire','photo','get_formulaire');
				$tab_extensions_autorisees = array('jpg','jpeg','gif','png');
				$form2_photo->Set_Extensions_accepte($tab_extensions_autorisees);
				$form2_photo->Upload ();
				//Récupération des résultats
				$transfert_form2_photo = $form2_photo->Get_Tab_upload ();
				$SQL_Image = array();
				if (!empty ($transfert_form2_photo))
				{
					$resultat = $transfert_form2_photo['resultat'];//tableau à trois  dimensions                                   
					foreach ($resultat as $num => $rep)
					{
						foreach ($rep as $key => $value)
						{                                                      
							if(!empty($value['nom'])) { $SQL_Image[] = $key.'/'.$value['nom']; }
						}
					}
				}
				$SQL_Image1 = isset($SQL_Image[0])? $SQL_Image[0] : '';
				$SQL_Image2 = isset($SQL_Image[1])? $SQL_Image[1] : '';
				$SQL_Image3 = isset($SQL_Image[2])? $SQL_Image[2] : '';
			// On insert dans la BdD
			mysql_query("INSERT INTO Annonces (Id,Categorie,SousCategorie,Titre,Marque,Model,Type,Annee,Description,Photo1,Photo2,Photo3,Prix,Login,Phone,Mail,Date,TimeDate,Etat) VALUES('','$Categories','$SousCategorie','$SQL_Titre','$SQL_Marque','$SQL_Model','$SQL_Type','$SQL_Annee','$SQL_Description','$SQL_Image1','$SQL_Image2','$SQL_Image3','$SQL_Prix','$SQL_Login','$SQL_Phone','$SQL_Mail','$SQL_Date','$SQL_TimeDate','$SQL_Etat')") or exit (mysql_error());
			echo 'Ajout r&eacute;ussit, votre annonce seras soumise &agrave; validation de l&rsquo;administrateur, et ne seras affich&eacute; qu&rsquo;apr&egrave;s cela.<br /><br />
			<a href="index.php">Retourner &agrave; l&rsquo;index</a>';
			}
		}
Merci de ton aide @++

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 déc. 2010, 12:35

salut,

a priori il faut que tu utilise Get_Tab_message() après le upload() afin de voir s'il y a des messages d'erreur si oui pas de requete sql

par exemple
<?php
// le début ..
$form2_photo->Upload ();
$erreur = $form2_photo->Get_Tab_message();
if (empty($erreur)) {
// affichage des erreurs (par exemple avec un foreach)
}
else {
// ligne 65 à 85
}
?>
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

01 janv. 2011, 10:26

En fait Get_Tab_message() permet d'afficher tous les messages , même les messages qui dissent que l'image est bien uploader.

Je pense pas que ça soit cela, j'ai déjà tester cela.

Merci de votre aide

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 janv. 2011, 22:12

dans ce cas modifie la classe pour retourner un false !


@+
Il en faut peu pour être heureux ......

ViPHP
AB
ViPHP | 5818 Messages

02 janv. 2011, 00:38

Bonjour,

Tu peux obtenir le nombre de fichiers mis en téléchargement en faisant : count(array_filter($_FILES['photo']['name']));

Donc il te suffit de comparer ce nombre avec count($SQL_Image) qui te renvoies le nombre de fichiers téléchargés :
				//$form2_photo = new Telechargement($dossier,'formulaire','photo','get_formulaire');
				$form2_photo = new Telechargement('/annonces/'.$dossier,'formulaire','photo','get_formulaire');
				$tab_extensions_autorisees = array('jpg','jpeg','gif','png');
				$form2_photo->Set_Extensions_accepte($tab_extensions_autorisees);
				$form2_photo->Upload ();

                                $nb_fichiers = count(array_filter($_FILES['photo']['name']));

				//Récupération des résultats
				$transfert_form2_photo = $form2_photo->Get_Tab_upload ();
				$SQL_Image = array();
				if (!empty ($transfert_form2_photo))
				{
					$resultat = $transfert_form2_photo['resultat'];//tableau à trois  dimensions                                   
					foreach ($resultat as $num => $rep)
					{
						foreach ($rep as $key => $value)
						{                                                      
							if(!empty($value['nom'])) { $SQL_Image[] = $key.'/'.$value['nom']; }
						}
					}
				}
				$SQL_Image1 = isset($SQL_Image[0])? $SQL_Image[0] : '';
				$SQL_Image2 = isset($SQL_Image[1])? $SQL_Image[1] : '';
				$SQL_Image3 = isset($SQL_Image[2])? $SQL_Image[2] : '';

			// On insert dans la BdD si pas d'erreurs
                        if($nb_fichiers == count($SQL_Image))
                        { 

			mysql_query("INSERT INTO Annonces (Id,Categorie,SousCategorie,Titre,Marque,Model,Type,Annee,Description,Photo1,Photo2,Photo3,Prix,Login,Phone,Mail,Date,TimeDate,Etat) VALUES('','$Categories','$SousCategorie','$SQL_Titre','$SQL_Marque','$SQL_Model','$SQL_Type','$SQL_Annee','$SQL_Description','$SQL_Image1','$SQL_Image2','$SQL_Image3','$SQL_Prix','$SQL_Login','$SQL_Phone','$SQL_Mail','$SQL_Date','$SQL_TimeDate','$SQL_Etat')") or exit (mysql_error());
			echo 'Ajout r&eacute;ussit, votre annonce seras soumise &agrave; validation de l&rsquo;administrateur, et ne seras affich&eacute; qu&rsquo;apr&egrave;s cela.<br /><br />
			<a href="index.php">Retourner &agrave; l&rsquo;index</a>';
			}
Cela dit tu ne devrais pas mettre les lignes
$form2_photo = new Telechargement('/annonces/'.$dossier,'formulaire','photo','get_formulaire');
$tab_extensions_autorisees = array('jpg','jpeg','gif','png');
$form2_photo->Set_Extensions_accepte($tab_extensions_autorisees);
$form2_photo->Upload ();
... à l'intérieur de la condition " if (isset($_POST['formulaire'])) { ..." car en cas de dépassement du maximum du post autorisé par le serveur, la classe ne pourra pas te renvoyer de message d'erreurs dans ces conditions.

Eléphant du PHP | 418 Messages

02 janv. 2011, 01:19

ok j'ai compris merci

je vais essayer cela.

merci de ton aide

Cordialement

Eléphant du PHP | 418 Messages

02 janv. 2011, 10:45

Enfin ça fonctionne ^^.

à moins que je vois d'autres erreurs, pour moi ce sujet est enfin résolut

Merci beaucoup pour l'aide apporté, c'est toujours sympa de voir l'entre aide.

En tout cas meilleurs vœux pour cette nouvelle année

Cordialement