[Résolut]Probleme upload multi image

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ésolut]Probleme upload multi image

Re: Probleme upload multi image

par Fre3z69 » 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

Re: Probleme upload multi image

par Fre3z69 » 02 janv. 2011, 01:19

ok j'ai compris merci

je vais essayer cela.

merci de ton aide

Cordialement

Re: Probleme upload multi image

par AB » 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.

Re: Probleme upload multi image

par moogli » 01 janv. 2011, 22:12

dans ce cas modifie la classe pour retourner un false !


@+

Re: Probleme upload multi image

par Fre3z69 » 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

Re: Probleme upload multi image

par moogli » 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
}
?>
@+

Re: Probleme upload multi image

par Fre3z69 » 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

Re: Probleme upload multi image

par AB » 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" :)

Re: Probleme upload multi image

par Fre3z69 » 29 déc. 2010, 09:57

Bon, je viens de tester ton script

effectivement cela fonctionne super bien

Ç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.

merci de ton aide

@++

Cordialement

Re: Probleme upload multi image

par AB » 27 déc. 2010, 23:09

Le formulaire 2 de cet exemple comprend un exemple d'upload de ce que tu souhaiterais faire. Il te suffira d'ajuster à tes besoins.

D'ailleurs c'est toi qui m'a donné le code avec "foreach ($resultat as $num => $rep)", je croyais donc que tu savais d'où venait la variable $resultat...

Bon donc dans l'exemple que je viens de te donner en lien, l'intérieur de la condition "if (isset($_POST['formulaire_2']))" devrait être quelque chose du genre :

//...
if (isset($_POST['formulaire_2']))
        {

                //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] : '';
                     

                             

                //récupération de des autres données post et enregistrement des données en bdd etc.
               
                // Rechargement de la page pour éviter un multiple post en cas de rafraichissement de la page par le visiteur
                $form2_photo->Get_Reload_page();
        }

Re: Probleme upload multi image

par Fre3z69 » 26 déc. 2010, 03:19

bon je relance ce sujet

j'ai tester ce que tu ma dit

j'ai rien compris à ce que tu m'as expliquer

tu ma dit fait ca
$SQL_Image = array();

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] : '';
mais ca sort d'où $résultat et faut pas oublier que je dois les mettre dans le dossier aussi

bref, il n'y aurais pas un tutoriel pour m'expliquer le multiupload??

J'aimerais vraiment que ca fonctionne, sachant que je dois donc uploader, mais aussi mettre le nom des images dans la BDD avec le reste du formulaire

Merci de votre aide

Bonnes fêtes

Cordialment

Re: Probleme upload multi image

par AB » 08 déc. 2010, 18:52

Tu tiens absolument à faire en sorte que cela ne fonctionne pas ?

Tu fais comme je t'ai indiqué et INUTILE de rajouter du code en supplément.

Tu as essayé ce que je t'ai montré ?

Si ce n'est pas ce que tu attends, expliques-toi avec des mots, pas avec du code car ce que tu montre dans ton dernier message ne correspond à rien :wink:

Re: Probleme upload multi image

par Fre3z69 » 08 déc. 2010, 16:18

Salut

Désolé, en fait je voulais savoir si je l'implémente comme ceci:
foreach ($resultat as $num => $rep)
{
        foreach ($rep as $key => $value)
        {                                                      
        if(!empty($value['nom']))                                  
$SQL_Image = array();

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] : '';
        }
}
Ou bien comme cela:
foreach ($resultat as $num => $rep)
{
        foreach ($rep as $key => $value)
        {                                                      
        if(!empty($value['nom']))                                  

        }
}
$SQL_Image = array();

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] : '';

Dans l'idée, je pense que en le mettant comme ceci ça ne fonctionnera pas, mais c'est juste pour te montrer ce que je voulais te dire

en tout cas merci de ton aide

cordialement

Re: Probleme upload multi image

par AB » 08 déc. 2010, 04:18

Je comprend pas ta dernière question.

Je t'ai déjà donné le code complet pour extraire tes variables, je te le remet :
$SQL_Image = array();

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] : '';

Re: Probleme upload multi image

par Fre3z69 » 08 déc. 2010, 01:31

Oui ok je viens de comprendre.

Bon maintenant me reste à savoir si je peux le mettre directement en dehors du le premier foreach ou il faut qu'il soir dedans


premier foreach
foreach ($resultat as $num => $rep)
{
        foreach ($rep as $key => $value)
        {                                                      
        if(!empty($value['nom']))                                  
        echo 'champ '.$champ.' n° '.$num.' = '.$value['nom'].' '. $value['dim'].', téléchargé dans "'.$key.'"<br />';
// Ici je vais définir les variables pour pouvoir les mettre dans la Bdd, et l'écho de dessus vas disparaitre, je laisse en debug
        //$dirr = $key.'/'.$value['nom'];
        //$SQL_Image=$key.'/'.$value['nom'];
        }
}
Merci bien