IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Upload de plusieurs images et insertion de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut Upload de plusieurs images et insertion de données
    Bonjour à tous et merci d'avance pour l'aide que vous m'apporterez j'essaye d'uploader plusieurs images en meme temps et d'insérer mes données dans ma BDD mais malheureusement rien ne se pas. C'est en PHP5. La fonction addSujet fait un insert et la fonction modif une modification pour chaque image. Merci de bien vouloir m'aider sur ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    <?php
     
    session_start();
    require_once("class_SujetMois.php");
    require_once("connexion.php");
    $sujet=unserialize($_SESSION['sujet']);
     
    extract($_POST);
     
    $nom=$_POST['nom'];
    $moisSujet=$_POST['moisSujet'];
    $desc=$_POST['desc'];
    $desc1=$_POST['desc1'];
    $desc2=$_POST['desc2'];
    $desc3=$_POST['desc3'];
    $desc4=$_POST['desc4'];
    $desc5=$_POST['desc5'];
    $desc6=$_POST['desc6'];
    $desc7=$_POST['desc7'];
    $desc8=$_POST['desc8'];
    $desc9=$_POST['desc9'];
    $desc10=$_POST['desc10'];
     
    for ($i = 1; $i < count($_FILES['fichier']['name']); $i++)
    {
    	if (isset($_POST['posted']))
    	{
    		//$_FILES existe on récupère les infos qui nous intéressent
    		$fichier=$_FILES['fichier']['name'][$i];//nom réel de l'image
    		$size=$_FILES['fichier']['size'][$i]; //poids de l'image en octets
    		$tmp=$_FILES['fichier']['tmp_name'][$i];//nom temporaire de l'image (sur le serveur)
    		$type=$_FILES['fichier']['type'][$i];//type de l'image
     
    		$extensions = array("jpg","bmp"); // Extension du fichier sans le .
    		$max_size = 1000000; // Taille max en octets du fichier
    		$width_max = 1000; // Largeur max de l'image en pixels
    		$height_max = 2000; // Hauteur max de l'image en pixels
     
    		//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
    		{
    			if(in_array(strtolower(substr($fichier,-3)), $extensions))
    			{
    				//vérification du type de l'img, son poids et sa taille
    				if ($size<=$max_size && $width<=$width_max && $height<=$height_max) 
    				{
    					// type mime gif, poids < à 20500 octets soit environ 20Ko, largeur = hauteur = 100px
    					//Pour supprimer les espaces dans les noms de fichiers car celà entraîne une erreur lorsque vous voulez l'afficher
    					$fichier = preg_replace ("` `i","",$fichier);//ligne facultative :)
     
    					//On vérifie s'il existe une image qui a le même nom dans le répertoire
    					if (file_exists('./fichiers_up/'.$fichier))
    					{
    						if($type=="image/jpeg")
    						{
    							$nom_final= preg_replace("`.jpg`is",date("U").".jpg",$fichier); 
    						}	
    						if($type=="image/bmp")
    						{
    							$nom_final= preg_replace("`.bmp`is",date("U").".bmp",$fichier); 
    						}			
    					}
    					else 
    					{
    						$nom_final=$fichier; //l'image n'existe pas on garde le même nom
    					}
     
    					$content_dir='./img/';
     
    					//on déplace l'image dans le répertoire final
    					if (move_uploaded_file($tmp,$content_dir.$nom_final)) 
    					{ 
    						if($i==1)
    							$sujet->addSujet($nomSujet, $moisSujet, $descriptionS, $desc1, $desc2, $desc3, $desc4, $desc5, $desc6, $desc7, $desc8, $desc9, $desc10, $nom_final,'','','','','','','', '','');
    						if($i==2)
    							$sujet->mod1($nom_final);
    						if($i==3)
    							$sujet->mod2($nom_final);
    						if($i==4)
    							$sujet->mod3($nom_final);
    						if($i==5)
    							$sujet->mod4($nom_final);
    						if($i==6)
    							$sujet->mod5($nom_final);
    						if($i==7)
    							$sujet->mod6($nom_final);
    						if($i==8)
    							$sujet->mod7($nom_final);
    						if($i==9)
    							$sujet->mod8($nom_final);	
    						if($i==10){
    							$sujet->mod9($nom_final);
    							echo "<div id='message_ok'>Le fichier a été uploadée avec succès</div><br/>"; }
     
    					}	 
    					else 
    					{ 
    	                    //l'image ne peut être déplacée, on supprime le fichier temporaire 
    	                    @ unlink ($tmp); 
    	                    echo '<div id="message_erreur">L\' image n\'a pu être déplacée !</div><br/>'; 
     
    					}
    				}
    				else 
    				{
    					echo "<div id='message_erreur'>Votre fichier a été rejetée (poids ou taille incorrect)</div><br/>"; 
    				}
    			}
    			else {echo "<div id='message_erreur'>Votre fichier a été rejetée (type incorrect)</div><br/>"; }
    		}
    	}
     
     
    	else
    	{
    		echo "<SCRIPT type=\"text/javascript\">alert(\"Erreur, ajout sujet !\");</SCRIPT>";
    	}
    }
     
     
     
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut que tu debug ton script en placant des echos a differents endroit afin de suivre le déroulement.
    Tu trouveras ainsi quelle étape bloque.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    je l'ai fait et je pense que c'est mon upload qui marche pas mai je ne vois pas du tout où

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est a dire ? Quelle est la derniere étape qui fonctionne dans ton script ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    Il rentre pas dans la boucle for je ne sais pas pourquoi si quelqu'un peut m'aider à y voir plus clair s'il vous plaît

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    controle ce que vaut count($_FILES['fichier']['name'])
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    Ceci devrait me compter le nombre d'images que je passe mais ceci me renvoie tout le temps 1

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Fais un print_r($_FILES) pour controler ce que tu recois de ton formulaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    Sur 10 fichiers (images) que je passe il retient la dernière donc voici ce qui me renvoit :

    Array ( [fichier] => Array ( [name] => Marianne.jpg [type] => image/jpeg [tmp_name] => C:/Program Files/EasyPHP 2.0b1\tmp\phpE008.tmp [error] => 0 [size] => 19203 ) )

    1

    La première ligne c'est print_r($_FILES) et la deuxième le nombre de fichiers.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il y a un problème au niveau de ton formulaire donc.
    tu as bien mis un "name" au format de tableau ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    Merci pour l'aide erreur toute bête

    Autre petit problème est-ce que tu sais comment je pourrais faire pour insérer mes images dans la base de données car, ceci m'insère la première mais pas les autres. J'ai fait une fonction modif avec un update à l'intérieur mais cela ne fonctionne pas

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    toujours la même démarche : il faut debugger.
    est-ce qu'on passe bien par l'étape d'insertion a chaque fois ?
    si oui a quoi ressemble la requete ? produit-elle une erreur ? etc.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    la requête d'insertion marche très bien elle se trouve ds ma fonction addSujet et dans ma fonction modif voilà ce que j'ai :

    public function mod3 ($img4)
    {
    $requete="UPDATE sujet SET img4='$img4' where numSujet=$this->numSujet";
    mysql_query($requete);
    }

    J'en ai une pour chaque image qui suit. Ici on est dans une classe et je me demande si on peut utilisé le this dans ces conditions.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu ne trouves pas cela affreux de faire autant de fonction que d'image ?

    Si ce sont des insertions que tu veux, pourquoi fais-tu des UPDATE ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    Je vois pas comment faire autrement pour les insérer si ma condition est égale à ma première image je commence par une insertion quand on arrive à la deuxième on fait une modification et ainsi de suite je vois pas comment faire autrement en faite.

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ah je vois le truc, ta structure de données est mauvaise : quand on veut stocker x images pour un sujet, on ne fait pas x champs images, on fait une table images avec une relation vers la table sujet.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    J'ai changé ma structure de données comme tu me l'avez dit mais toujours le problème au niveau de l'insertion dans la base. En effet, lors du déplacement de l'image donc de l'upload je fais l'insertion de mon sujet si c'est la première image et ensuite je fais l'insertion de mon image si c'est pas la première je fais juste l'insertion de mes images. Problème : l'insertion de mon sujet marche mais pas celle de mes images et quand je fais echo $sujet->getNomSujet() ou echo $sujet->getNumSujet() ceci ne marche pas dc je ne peut insérer mes images est-ce que tu saurait pourquoi?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <?php
     
    session_start();
    require_once("class_SujetMois.php");
    require_once("class_Image.php");
    require_once("connexion.php");
     
    $sujet=unserialize($_SESSION['sujet']);
    $image=unserialize($_SESSION['image']);
     
    extract($_POST);
     
    $nomSujet=$_POST['nom'];
    echo $nomSujet;
    $moisSujet=$_POST['moisSujet'];
    $descriptionS=$_POST['desc'];
    $desc1=$_POST['desc1'];
    $desc2=$_POST['desc2'];
    $desc3=$_POST['desc3'];
    $desc4=$_POST['desc4'];
    $desc5=$_POST['desc5'];
    $desc6=$_POST['desc6'];
    $desc7=$_POST['desc7'];
    $desc8=$_POST['desc8'];
    $desc9=$_POST['desc9'];
    $desc10=$_POST['desc10'];
    $test=$_POST['posted'];
     
    for ($i = 0; $i < count($_FILES['fichier']['name']); $i++)
    {
    	if (isset($test))
    	{
    		//$_FILES existe on récupère les infos qui nous intéressent
    		$fichier=$_FILES['fichier']['name'][$i];//nom réel de l'image
    		$size=$_FILES['fichier']['size'][$i]; //poids de l'image en octets
    		$tmp=$_FILES['fichier']['tmp_name'][$i];//nom temporaire de l'image (sur le serveur)
    		$type=$_FILES['fichier']['type'][$i];//type de l'image
     
    		$extensions = array("jpg","bmp"); // Extension du fichier sans le .
    		$max_size = 1000000; // Taille max en octets du fichier
    		$width_max = 1000; // Largeur max de l'image en pixels
    		$height_max = 2000; // Hauteur max de l'image en pixels
     
    		//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
    		{
    			if(in_array(strtolower(substr($fichier,-3)), $extensions))
    			{
    				//vérification du type de l'img, son poids et sa taille
    				if ($size<=$max_size && $width<=$width_max && $height<=$height_max) 
    				{
    					// type mime gif, poids < à 20500 octets soit environ 20Ko, largeur = hauteur = 100px
    					//Pour supprimer les espaces dans les noms de fichiers car celà entraîne une erreur lorsque vous voulez l'afficher
    					$fichier = preg_replace ("` `i","",$fichier);//ligne facultative :)
     
    					//On vérifie s'il existe une image qui a le même nom dans le répertoire
    					if (file_exists('./fichiers_up/'.$fichier))
    					{
    						if($type=="image/jpeg")
    						{
    							$nom_final= preg_replace("`.jpg`is",date("U").".jpg",$fichier); 
    						}	
    						if($type=="image/bmp")
    						{
    							$nom_final= preg_replace("`.bmp`is",date("U").".bmp",$fichier); 
    						}			
    					}
    					else 
    					{
    						$nom_final=$fichier; //l'image n'existe pas on garde le même nom
    					}
     
    					$content_dir='./img/';
     
    					//on déplace l'image dans le répertoire final
    					if (move_uploaded_file($tmp,$content_dir.$nom_final)) 
    					{ 
    						if($i==0){
    							$sujet->addSujet($nomSujet, $moisSujet, $descriptionS, $desc1, $desc2, $desc3, $desc4, $desc5, $desc6, $desc7, 							$desc8, $desc9, $desc10);
    							echo $sujet->getMoisSujet();
    							echo $sujet->getNumSujet();
    							$image->addImage($nom_final,$sujet->getNumSujet());}
    						else $image->addImage($nom_final,$sujet->getNumSujet());
    						echo "<div id='message_ok'>Le fichier a été uploadée avec succès</div><br/>";
    						echo $sujet->getNomSujet(); 
     
    					}	 
    					else 
    					{ 
    	                    //l'image ne peut être déplacée, on supprime le fichier temporaire 
    	                    @ unlink ($tmp); 
    	                    echo '<div id="message_erreur">L\' image n\'a pu être déplacée !</div><br/>'; 
     
    					}
    				}
    				else 
    				{
    					echo "<div id='message_erreur'>Votre fichier a été rejetée (poids ou taille incorrect)</div><br/>"; 
    				}
    			}
    			else {echo "<div id='message_erreur'>Votre fichier a été rejetée (type incorrect)</div><br/>"; }
    		}
    	}
    	else
    	{
    		echo "<SCRIPT type=\"text/javascript\">alert(\"Erreur, ajout sujet !\");</SCRIPT>";
    	}
    }
     
     
     
    ?>

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En effet, lors du déplacement de l'image donc de l'upload je fais l'insertion de mon sujet si c'est la première image et ensuite je fais l'insertion de mon image si c'est pas la première je fais juste l'insertion de mes image
    L'insertion du sujet n'a pas besoin d'être dans la boucle qui traite les images.

    quand je fais echo $sujet->getNomSujet() ou echo $sujet->getNumSujet() ceci ne marche pas
    Je ne sais pas ce que font ces fonctions.

    l'insertion de mon sujet marche mais pas celle de mes images
    Regarde si les requetes d'insertion retournent des erreurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 12
    Points
    12
    Par défaut
    Les fonctions get devrait me retourner le nom du Sujet mais aussi le numero du Sujet pour que je puisse le donner pour l'insertion d'une image

    Ma requête d'insertion hors ce contexte marche aussi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Upload de plusieurs images => rien dans le dossier
    Par beegees dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2011, 09h37
  2. Réponses: 6
    Dernier message: 21/03/2011, 21h30
  3. Upload de plusieurs images
    Par Blito dans le forum Langage
    Réponses: 6
    Dernier message: 02/07/2010, 12h17
  4. [Upload] Télécharger plusieurs images en même temps
    Par tarzanjane dans le forum Langage
    Réponses: 3
    Dernier message: 14/04/2009, 12h32
  5. Réponses: 2
    Dernier message: 18/03/2007, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo