Multi upload php et insert

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 : Multi upload php et insert

Re: Multi upload php et insert

par jojo28 » 21 mai 2014, 18:58

mon code html

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
		<head>
			<title>Mon blog</title>
			<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
			<link href="style.css" rel="stylesheet" type="text/css" />
		</head>
         
			<body>
				<center>
					<!-- Notre fonction d' ajout est placer dans un form --> 
					<form action="ajouter.php" method="post" enctype="multipart/form-data">
	
						<!-- balise pour renseigner le nom du répertoire musical --> 
						<li><h3>Nom du morceau   <input type="text" name="titre" placeholder=" Nom morceau" required></h3></li><br>
						
								<!-- Bouton de sélection pour ajouter les pistes --> 
									     <input type="file" name="file_array[]"></p>
									  <p><input type="file" name="file_array[]"></p>
									  <p><input type="file" name="file_array[]"></p>
									  <p><input type="file" name="file_array[]"></p>
								
						  <!-- bouton de validation  --> 	
						  <input type="submit" name="envoyer" onclick="return(confirm('Etes-vous sûr de vouloir ajouter la musique?'))" value="Ajouter les pistes au morceau">
					</form> 
					
				</center>

			</body>

et mon fichier php
<?php
//on insére notre classe de connexion pour intérargir entre la base de donnée et le site
require_once '../../accesBDD.php';

class Musique
{
	//on déclare toute nos variables 
	private $_titre;
	private $_fichier;
	private $_chemin;
	
	//on déclare nos variables de méthode
	private $_sqlAjouter;
	private $_reqAjouter;
	
	//on déclare nos variables de méthode
	private $_sqlSupprimerPiste;
	private $_reqSupprimerPiste;
	
	//on déclare nos variables de méthode
	private $_sqlSupprimerMorceau;
	private $_reqSupprimerMorceau;
	
	

		public function __construct($titre)
		{
			$this->_titre = $titre ;
		}
	
			public function ajouterMorceau($BDD)
			{
				//Ici nous utilisons notre variable sql pour effectuer une requête sql 
				$this->_sqlAjouter = 'INSERT INTO morceau(id_morceau, nom_morceau) VALUES(:morc, :titremorceau)' ;
				
				//Ensuite, nous utilisons notre variable de requête pour dans un premier temps effectuer une connexion
				//Et après, nous preparons notre requête sql qui a était défini auparavant
				$this->_reqAjouter = $BDD->getConnexion()->prepare($this->_sqlAjouter);

				//Et enfin, nous exécutons notre requête sql en insérant des données dans notre base de donnée
				//Lors de l' insertion je défini un lastInsertId  qui correspond à ma clé primaire dans ma table morceau
				//Celle-ci s' incrémente toute seule et je la récupére ainsi pour l' insérer dans ma table piste sous clé étrangère
				//Elle permettra ainsi de faire la liaison de savoir quel piste appartienne à telle morceau
				$this->_reqAjouter->execute(array( ':morc'          => lastInsertId,
										           ':titremorceau'  => $this->_titre));
	
	
					//id_data est une variable défini de la récupération de ma clé primaire
					$id_data = $BDD->getConnexion()->lastInsertId();
	
						//définition du fichier
						$fichier = $name_array = $_FILES['file_array']['name'];

						//stockage des fichiers uploader dans le dossier Musique
						$chemin = '../../Musique/';
	
							//quelque déclaration complémentaire pour définir une taille maximum du fichier a uploader ou du type du fichier a uploader...etc
							$tmp_name_array = $_FILES['file_array']['tmp_name'];
							$type_array  = $_FILES['file_array']['type'];
							$size_array  = $_FILES['file_array']['size'];
							$error_array = $_FILES['file_array']['error'];
	
	
										//boucle
										for($i = 0; $i < count($tmp_name_array); $i++)
										{
											//Ici, nous redigirons le fichier à uploader dans le répertoire spécifiée au préalable
											if(move_uploaded_file($tmp_name_array[$i], $chemin .$fichier[$i]))
											{
												//Ici nous utilisons notre variable sql pour effectuer une requête sql 
												$this->_sqlAjouter = 'INSERT INTO piste(piste1, id_piste, id_morceau) VALUES( :piste1, :idpiste , :idmorceau)' ;
												
												//Ensuite, nous utilisons notre variable de requête pour dans un premier temps effectuer une connexion
												//Et après, nous preparons notre requête sql qui a était défini auparavant
												$this->_reqAjouter = $BDD->getConnexion()->prepare($this->_sqlAjouter);
												
												//Et enfin, nous exécutons notre requête sql en insérant des données dans notre base de donnée
												
												
												$this->_reqAjouter->execute(array(
																				  //Le $fichier[i] défini le nom de la musique qui a été dans notre bdd
																				  ':piste1'  => $fichier[$i],
																				  
																				  
																				  ':idpiste' => '',
																				  
																				  //Et le id_data est la récupération de la cléprimaire de notre première table pour ainsi l' insérer dans notre deuxième table sous forme de clé étrangère
																				  'idmorceau'=> $id_data));
									
           
											} 
											//Si le fichier a bien était uploader alors 
											else
											{
												'upload OK';
											}
    
										}	

			}
	
	

Re: Multi upload php et insert

par moogli » 21 mai 2014, 18:51

pour être plus clair, avec le code complet on pourrait t'aider mais la c'est que de la supposition donc c'est pas la peine.

de plus merci d'utiliser le bbcode afin que cela plus lisible pour tout le monde (les boutons sont au dessus de la zone de saisie).


@+

Re: Multi upload php et insert

par jojo28 » 21 mai 2014, 18:38

$chemin c 'est le chemin ou je stocke mon fichier sur le serveur dans le repertoire je le definis, c' est pas le souci sa

$fichier[$i]. le fichier c' est le nom du fichier que je sauvegarde dans la base de donne j' arrive a le stocker pas de souci aussi

j' ai déja reussi a faire plusieurs upl mais la sa bloque donc c' est bizarre

Re: Multi upload php et insert

par Mazarini » 21 mai 2014, 16:15

On ne peut t'aider sans savoir comment sont alimentés $tmp_name_array $chemin et $fichier[$i].

Re: Multi upload php et insert

par jojo28 » 21 mai 2014, 13:10

Voici mon formulaire, j' ai bien penser a mettre enctype="multipart/form-data"

<form action="ajouter.php" method="post" enctype="multipart/form-data">

<!-- balise pour renseigner le nom du répertoire musical -->
<li><h3>Nom du morceau <input type="text" name="titre" placeholder=" Nom morceau" required></h3></li><br>

<!-- Bouton de sélection pour ajouter les pistes -->
<input id="musique" type="file" name="file_array[]" multiple>
<input id="musique" type="file" name="file_array[]" multiple>

<!-- bouton de validation -->
<input type="submit" name="envoyer" value="Ajouter les pistes au morceau">
</form>
Le souci, sa doit être dans ma boucle, il faudrait peut etre que j' utilise un foreach ou je sais pas de trop si vous pouvez m' aider merci beaucoup

Re: Multi upload php et insert

par moogli » 21 mai 2014, 10:29

salut,

il doit te manquer le enctype="multipart/form-data" dans la déclaration du formulaire.

@Mazarini : effectivement terme peu explicite ici.
Tu as
- soit l'utilisation du "multiple" dans l'input, mais c'est peu commode 'fichier forcément dans le même répertoire.
- soit utiliser plusieurs input avec la notation tableau.

dans les deux cas tu auras un tableau dans $_FILES.

@jojo28 : Juste avec ce fragment du code on ne peu pas t'aider plus.
on ne sais pas d'où proviennent les variables, ce que tu as pu faire dessus etc.

Pour info utiliser un count dans la condition d'arrêt du for est une mauvaise idée c'est anti performant (l'évaluation est faite à chaque "tour" et vu que ton tableau n'as pas vocation à changer autant ne le faire qu'une seule fois ;))


@+

Re: Multi upload php et insert

par Mazarini » 21 mai 2014, 10:25

Il semble qu'en fait c'est plutôt max_file_uploads dans php.ini et pour la variable $_FILES. Désolé pour ces informations imprécises.

Dans les exemples de la doc PHP (http://us1.php.net/manual/fr/reserved.v ... .files.php) il y a un script qui semble indiquer un comportement un peu différent dans la variable $_FILES selon que l'on utilise un tableau ou un élément simple dans le html.

Pour uploader des fichiers, il faut enctype="multipart/form-data" dans la balise form.

Ce sont des pistes, à toi d'approfondir. Commencer par être sur que le fichier est bien uploader, puis comprendre comment utiliser $_FILES pour récupérer le fichier.

Re: Multi upload php et insert

par jojo28 » 21 mai 2014, 09:33

Bonjour alors dans mon php.ini je n' ai pa trouver le max upload file et en ce qui concerne le var sa me donne sa
array (size=0)
empty
Cordialement

Re: Multi upload php et insert

par Mazarini » 21 mai 2014, 08:13

Bonjour,

Peut être qu'un var_dump($_FILE) te permettra de comprendre ce qui se passe. Je pense que c'est dans l'utilisation de cette variable que tu as un problème.

Je ne sais pas comment est géré "multiple". Ca me semble un peu contradictoire de l'utiliser et de mettre 2 input. Attention, dans php.ini, il y a un parametre pour définir le nombre de max d'upload (max_upload_file ?)

Multi upload php et insert

par jojo28 » 20 mai 2014, 23:48

Bonjour, J' essaye aussi d' insérer des uploads dans ma base de donnée sauf que le probleme il y en a que un qui marche voici mon code si vous pouvez m' aider merci

le code sql et requete
//boucle
for($i = 0; $i < count($tmp_name_array); $i++)
{
//Ici, nous redigirons le fichier à uploader dans le répertoire spécifiée au préalable
if(move_uploaded_file($tmp_name_array[$i], $chemin .$fichier[$i]))
{
//Ici nous utilisons notre variable sql pour effectuer une requête sql
$this->_sqlAjouter = 'INSERT INTO piste(piste1, id_piste, id_morceau) VALUES( :piste1, :idpiste , :idmorceau)' ;

//Ensuite, nous utilisons notre variable de requête pour dans un premier temps effectuer une connexion
//Et après, nous preparons notre requête sql qui a était défini auparavant
$this->_reqAjouter = $BDD->getConnexion()->prepare($this->_sqlAjouter);

//Et enfin, nous exécutons notre requête sql en insérant des données dans notre base de donnée


$this->_reqAjouter->execute(array(
//Le $fichier défini le nom de la musique qui a été dans notre bdd
':piste1' => $fichier[$i]));
}
}

et mon formulaire html

<!-- Bouton de sélection pour ajouter les pistes -->
<input id="musique" type="file" name="file_array[]" multiple>
<input id="musique" type="file" name="file_array[]" multiple>


si vous pouvez m' aider merci beaucoup