pb upload (changement : caractère spéciaux et UTF-8)

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 : pb upload (changement : caractère spéciaux et UTF-8)

Re: pb upload (changement : caractère spéciaux et UTF-8)

par arthur77 » 17 déc. 2011, 12:45

Merci, la solution d'AB fonctionne :D

Re: pb upload (changement : caractère spéciaux et UTF-8)

par AB » 14 déc. 2011, 04:01

Oui sinon si tu veux modifier directement le code de la classe, la fonction de la classe se nomme "Nettoie_nom_fichier" et dans cette fonction c'est à la ligne
$nom_fichier = preg_replace('#[^.a-z0-9_-]+#i', '', $nom_fichier);
que tu peux intervenir.

Re: pb upload (changement : caractère spéciaux et UTF-8)

par sadeq » 14 déc. 2011, 02:09

Désolé de déttéré un sujet qui date et qui fache, mais j'ai voulu modifier le script d'upload, pour remplacer les "-" et " " par des "_" avant l'upload et l'enregistrement BDD, hors ça ne change rien. J'ai rajouté :
preg_replace('-','_',$titre);
preg_replace(' ','_',$titre);
Essaye str_replace plutôt que preg_replace.
preg_replace ou str_replace il faut réaffecter la modif dans $titre.

Correction:
$titre= preg_replace('#\-|\s#','_',$titre);  # remplacement par REGEXP 
Ou bien:
$titre= str_replace('-', '_', str_replace(' ', '_', $titre);  # remplacement en cascade

Re: pb upload (changement : caractère spéciaux et UTF-8)

par Calimero » 13 déc. 2011, 23:31

Désolé de déttéré un sujet qui date et qui fache, mais j'ai voulu modifier le script d'upload, pour remplacer les "-" et " " par des "_" avant l'upload et l'enregistrement BDD, hors ça ne change rien. J'ai rajouté :
preg_replace('-','_',$titre);
preg_replace(' ','_',$titre);
Essaye str_replace plutôt que preg_replace.

Re: pb upload (changement : caractère spéciaux et UTF-8)

par arthur77 » 13 déc. 2011, 23:27

Désolé de déttéré un sujet qui date et qui fache, mais j'ai voulu modifier le script d'upload, pour remplacer les "-" et " " par des "_" avant l'upload et l'enregistrement BDD, hors ça ne change rien. J'ai rajouté :
preg_replace('-','_',$titre);
preg_replace(' ','_',$titre);
dans le premier "if (isset($_POST['form1']))" lors du traitement de mon titre.

Merci et désolé pour le troll :?

Re: pb upload (changement : caractère spéciaux et UTF-8)

par arthur77 » 07 oct. 2011, 21:35

Je vais lire attentivement le mode d'emploi de la classe et je ferais gaffe ^^
Et oui je comprends a peu près le code, mais je vais continuer a bosser dessus pour le maitriser ^^
Merci :D

Re: pb upload (changement : caractère spéciaux et UTF-8)

par AB » 07 oct. 2011, 21:06

Ouf ! :wink:

Maintenant te reste plus qu'à comprendre le code (je parle pas de celui de la classe d'upload).

Au cas où tu rajouterais du code, faits attention à bien garder cette structure de code si tu veux que la classe d'upload puisse gérer un maximum d'erreurs. Pour mémoire, l'explication du pourquoi de cette façon de faire est indiquée quelques messages plus haut :
cette construction sert à éviter de mettre l'initialisation de la classe de téléchargement à l'intérieur de la condition (if (isset($_POS['form1'])) {//initialisation de la classe... }) car la classe ne pourrait pas envoyer de message d'erreur en cas du dépassement du post_max_size puisque dans ce cas aucun post ne serait renvoyé et donc la classe ne serait pas instanciée. Ou alors il faudrait gérer le dépassement du post_max_size avec un supplément de code.

Re: pb upload (changement : caractère spéciaux et UTF-8)

par arthur77 » 07 oct. 2011, 20:22

ça fonctionne ! Ah je pensais que je n'arriverais jamais au bout de cet upload !

Merci AB et Moogli, sans vous j'aurais pu dire adieu a mon site ! Merci :D

Re: pb upload (changement : caractère spéciaux et UTF-8)

par AB » 07 oct. 2011, 05:20

Oui ça c'était une erreur de ma part. Essaies ça :
<?php
// Chargement de la classe
require('Classe_upload.php');


// On déclare un tableau pour enregistrer les messages d'erreur du formulaire
$_SESSION['erreur_form'] = isset($_SESSION['erreur_form']) ?  $_SESSION['erreur_form'] : array();

if (isset($_POST['form1']))
	 {                      
									 
		 //on regarde si la description est remplie
		 $description = !empty($_POST['description']) ? $_POST['description'] : '';
				 
				 
		  if (!empty($_POST['style']))
				  {
						 $style = $_POST['style'];
				  }
				  else
				  {
						 $_SESSION['erreur_form'][] = "Veuillez sélectionner un style musical.";
				  }
				 
				 
		 if (!empty($_POST['titre']))
				 {
						 $titre = $_POST['titre'];
						 
						 if (!preg_match("#^[a-zA-Z0-9]+$#", $titre))
								 {
										 $_SESSION['erreur_form'][] = "Veuillez n'utiliser que des caractères alphanumériques dans le titre.";
								 }
				 }
				 else
				 {
						 $_SESSION['erreur_form'][] = "Veuillez indiquer le titre de la chanson.";
				 }
				 
				 
		 if (count($_SESSION['erreur_form']) > 0)
		 {
				 $_SESSION['erreur_form'][] = 'Aucun fichier n\'a été téléchargé';
				 
				 //reload de la page
				 header('Location: '.$_SERVER['PHP_SELF']);
				 exit;
		 }
	}




if (count($_SESSION['erreur_form']) == 0)
	 {
		 $repertoire_destination = 'Code/musiques';
		 
		 //Déclaration de la classe
		 $up = new Telechargement($repertoire_destination,'form1','song','controle_form');
		 
		 //Extensions autorisées (sans les .)
		 $extensions = array("mp3");
		 $up->Set_Extensions_accepte ($extensions);
		 
		 // Rennommage des fichiers (en mode incrémentiel) si déjà présents sur le serveur.
		 $up->Set_Renomme_fichier('incr');
		 
		 // Téléchargement
		 $up->Upload();
		 
		 
		 // Enregistrement en bdd des valeurs récupérées par le post
		 if (isset($_POST['form1']))
				 {
			 
					 // Récupération des valeurs du transfert de fichiers
					 $transfert = $up->Get_Tab_upload();//tableau à plusieurs dimensions (c.f. Doc de la class pour plus de détails)
											 
					 // définition des valeurs par défaut
					 $fichier = array();
					 $dossier = array();
					 
					 if (isset($transfert['resultat']))
							 {
									 foreach ($transfert['resultat'] as $num => $rep)
											 {
													 foreach ($rep as $key => $value)
															 {
																	 if(!empty($value['nom'])) $fichier[] =  $value['nom'];// Nom du fichier transféré
																	 $dossier[] =  $key; // Nom du dossier
															 }                    
											 }    
							 }
			 
						   
					if(count($fichier) > 0)
					{
								
							 // là on est certain que le code qui suit ne s'exécutera que si un fichier à été téléchargé
							 
							 // Puisqu'il n'y a qu'un champ de fichier il sera dans $fichier[0], et puisqu'il n'y a pas de redimensionnement multiple il n'y a qu'un dossier de destination donc il sera dans $dossier[0]
							 
																	 
							 // la récupération des autres variables du post a été faite dans la première condition (haut de page) if (isset($_POST['form1']))

					 
					 
							 // Connexion à ta bdd
							 // connexion BDD par PDO
	 
							  $PARAM_hote='localhost';      // le chemin vers le serveur
							  $PARAM_port='3306';
							  $PARAM_nom_bd='monsite';          // le nom de votre base de données
							  $PARAM_utilisateur='root';    // nom d'utilisateur pour se connecter
							  $PARAM_mot_passe='';          // mot de passe de l'utilisateur pour se connecter
			 
			 
							  try{
											  $connexion = new PDO(
											  'mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd,
											  $PARAM_utilisateur,
											  $PARAM_mot_passe,
											  array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
											  );

											  $connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
											 
									 }
							  catch(Exception $e){
											 
											  echo 'Une erreur est survenue !';
											  echo 'Erreur : '.$e->getMessage().'<br />';
											  echo 'N° : '.$e->getCode();
											  die();
									 }
							  //   /fin de la connexion BDD par PDO-->
							 
							   $artiste = $_SESSION['pseudo'];
							   $id_artiste = $_SESSION['id'];
							   $adresse_chanson = $dossier[0].'/'.$fichier[0];
							   $vues = 0;
							   $note = 0;
							  $insert = $connexion->prepare('INSERT INTO chansons(titre, artiste, id_artiste, date_envoi, vues, note, description, adresse_chanson, style) VALUES(:titre, :artiste, :id_artiste, NOW(), :vues, :note, :description, :adresse_chanson, :style)');
							 
							 try
									 {
									 $insert->execute(array(
											 'titre' => $titre,
											 'artiste' => $artiste,
											 'id_artiste' => $id_artiste,
											 'vues' => $vues,
											 'note' => $note,
											 'description' => $description,
											 'adresse_chanson' => $adresse_chanson,
											 'style' => $style
											 ));
									 }
							 catch(Exception $e)
									 {
											 
											  echo 'Une erreur est survenue !';
											  echo 'Erreur : '.$e->getMessage().'<br />';
											  echo 'N° : '.$e->getCode();
											  die();
									 }
									 
							 //$insert->closeCursor(); // Termine le traitement de la requête
							 
							 
					 
			 
					 
																														 
	 
				   
					//la chanson est enregistréz dans la BDD chansons, on va maintenant récupérer son id créer automatiquement par MySQL
					$id = $_SESSION['id'];
					$sql  = 'SELECT id '.
									'FROM chansons '.
									'WHERE id_artiste='.$connexion->quote($id).' '.
									'and date_envoi= NOW()';
					$req = $connexion->query($sql);
					$req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
					$data = $req->fetch();
					$id_chanson = $data->id;
					$req->closeCursor(); // Termine le traitement de la requête
				   
					//on a récupérer l'id de la chanson, on va l'enregistrer dans la BDD musplay avec les infos correspondantes au compositeur
					$id_playlist = $_SESSION['id_playlist'];
					$id_crea = $_SESSION['id'];
					$type = 1;
					$insert2 = $connexion->prepare('INSERT INTO musplay(id_chanson, id_playlist, type, id_crea) VALUES(:id_chanson, :id_playlist, :type, :id_crea)');
					try
					{
					$insert2->execute(array(
											'id_chanson' => $id_chanson,
											'id_playlist' => $id_playlist,
											'type' => $type,
											'id_crea' => $id_crea
											));
					}
					catch(Exception $e)
					{
						 /* erreur insertion */
						 echo 'Une erreur est survenue !';
						 echo 'Erreur : '.$e->getMessage().'<br />';
						 echo 'NÐ : '.$e->getCode();
						 die();
					}
					//$insert2->closeCursor(); // Termine le traitement de la requête
				   
					//on incrémente de 1 le nombre de chansons du compositeur
					$nb_chanson = $_SESSION['nb_chanson'];
					$nb_chanson = $nb_chanson + 1;
					$id = $_SESSION['id'];
					$update = $connexion->prepare('UPDATE user SET nb_chanson = :nb_chanson WHERE id = :id');
					try
					{
					$update->execute(array(
											'nb_chanson' => $nb_chanson,
											'id' => $id
											));
					}
					catch(Exception $e)
					{
						 /* erreur insertion */
						 echo 'Une erreur est survenue !';
						 echo 'Erreur : '.$e->getMessage().'<br />';
						 echo 'NÐ : '.$e->getCode();
						 die();
					}
					$update->closeCursor(); // Termine le traitement de la requête
				   
					//on incrémente de 1 le nombre de chansons de la playlist de type 1 (compositeur) du compositeur dans playlist_compo
					$nb_chanson_playlist = $_SESSION['nb_chanson'];
					$nb_chanson_playlist = $nb_chanson_playlist + 1;
					$update2 = $connexion->prepare('UPDATE playlist_compo SET nb_chanson = :nb_chanson WHERE id = :id');
					try
					{
					$update2->execute(array(
											'nb_chanson' => $nb_chanson_playlist,
											'id' => $id
											));
					}
					catch(Exception $e)
					{
						 /* erreur insertion */
						 echo 'Une erreur est survenue !';
						 echo 'Erreur : '.$e->getMessage().'<br />';
						 echo 'NÐ : '.$e->getCode();
						 die();
					}
					
					
				  }
				  
				  $up->Get_Reload_page();	
				}
				
			
			// Récupération des messages d'information de téléchargement
			 $resultat = $up->Get_Tab_message();
							 
			   
		}
                   
               
?>
 <form enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?controle_form=1' ?>" method = "post">
     
       <input type="hidden" name="MAX_FILE_SIZE" value="5242880" />

       <input type="file" name="song[]" /><br  />
         
                <label for="titre">Titre de la chanson : (seuls les caractères alphanumériques sont autorisés)</label><input type="text" name="titre" id="titre"/><br />
                 <label for="style"> Style musical de la chanson : </label>
                 <select name="style" id="style" >
                                 <option value="blues" > Blues </option>
                                 <option value="chanson_francaise" > Chanson Française </option>
                                 <option value="classique" id="classique" > Classique </option>
                                 <option value="club" > Club </option>
                                                                 <option value="country" > Country </option>
                                                                <option value="dance" > Dance </option>
                                                                <option value="disco" > Disco</option>
                                                                <option value="electro" > Electro</option>
                                                                <option value="electro_rock" >Electro-Rock </option>
                                                                <option value="electro_pop" > Electro-Pop</option>
                                                                <option value="folk" > Folk</option>
                                                                <option value="funk" > Funk</option>
                                                                <option value="garage_rock" > Garage Rock</option>
                                                                <option value="gospel" > Gospel</option>
                                                                <option value="grunge" > Grunge</option>
                                                                <option value="hard_rock" > Hard Rock </option>
                                                                <option value="heavy_metal" > Heavy Metal</option>
                                                                <option value="hip_hop" > Hip Hop</option>
                                                                <option value="house" > House</option>
                                                                <option value="indie_rock" > Indie Rock</option>
                                                                <option value="instrumental" > Instrumental</option>
                                                                <option value="jazz" > Jazz</option>
                                                                <option value="lounge" > Lounge<option>
                                                                <option value="mambo" > Mambo</option>
                                                                <option value="opera" > Opera</option>
                                                                <option value="pop" > Pop</option>
                                                                <option value="pop_rock" > Pop Rock</option>
                                                                <option value="punk" > Punk</option>
                                                                <option value="punk_rock" > Punk Rock</option>
                                                                <option value="rnb" > R'n'B</option>
                                                                <option value="rap" > Rap</option>
                                                                <option value="reggae" > Reggae</option>
                                                                <option value="rock" > Rock</option>
                                                                <option value="salsa" > Salsa</option>
                                                                <option value="slam" > Slam</option>
                                                                <option value="soul" > Soul</option>
                                                                <option value="tango" > Tango</option>
                                                                <option value="techno" > Techno</option>
                                                                <option value="trance" > Trance</option>
                                                </select><br />
                                 <textarea name="description" id="description" /></textarea><label for="description" > Breve description de la chanson (facultatif) : </label>
                 <input type="submit" name = "form1" value="Envoyer le fichier">
 </form>

<?php //affichage des résultats
if (!empty($resultat))
         {
                 echo '<p>';
                         foreach ($resultat as $num)
                                 {
                                         foreach ($num as $value)
                                         echo htmlspecialchars($value).'<br />';
                                 }
                 echo '</p>';
         }
                 
// affichage des erreurs du formulaire
if(count($_SESSION['erreur_form']) > 0)
         {
                  echo '<p>';
                 
                  foreach ($_SESSION['erreur_form'] as $value)
                          {
                                  echo htmlspecialchars($value).'<br />';
                          }
                                         
                  echo '</p>';
                 
                 unset($_SESSION['erreur_form']);
         }
?>
Pour personnaliser le renvoi des messages c'est indiqué dans le mode d'emploi de la classe.

Le plus rapide est de modifier le tableau interne "private $tab_mes" de la classe d'upload. Je te cite un extrait du mode d'emploi :

...le deuxième élément (index 1) du tableau "private $tab_mes", contenant le libellé : "téléchargé dans le dossier", est indispensable pour avoir un renseignement complet sur le résultat du téléchargement en cas de succès, à savoir : nom du fichier original + éventuellement nouveau nom en cas de renommage + éventuellement nouvelles dimensions de l'image en cas de redimensionnement + dossier de destination. Ces informations détaillées sont utiles pour un téléchargement de fichiers dans un espace administrateur. Cependant pour permettre un renseignement plus sommaire destiné aux visiteurs vous pouvez remplacer ce deuxième élément du tableau ("téléchargé dans le dossier") par une chaine vide ( '' ) auquel cas c'est le dernier élément du tableau "téléchargement OK" qui sera renvoyé à la place des informations détaillées.

Une autre possibilité est de faire un tableau de message personnalisé et de le passer en cinquième paramètre dans l'initialisation de la classe.

Re: pb upload (changement : caractère spéciaux et UTF-8)

par arthur77 » 06 oct. 2011, 20:57

J'ai modifié que tout ma dit et maitenant l'upload ET l'enregistrement BDD fonctionnent mais si j'envoi un fichier autre que .mp3 il m'indique "aucun fichier n'a été téléchargé" au lieu de me dire que le format n'est pas correct ...
voici donc le code :
<?php
// Chargement de la classe
require('Classe_upload.php');


// On déclare un tableau pour enregistrer les messages d'erreur du formulaire
$_SESSION['erreur_form'] = isset($_SESSION['erreur_form']) ?  $_SESSION['erreur_form'] : array();

if (isset($_POST['form1']))
         {                       
                                          
                 //on regarde si la description est remplie
                 $description = !empty($_POST['description']) ? $_POST['description'] : '';
                         
                          
                  if (!empty($_POST['style']))
                          {
                                 $style = $_POST['style'];
                          }
                          else
                          {
                                 $_SESSION['erreur_form'][] = "Veuillez sélectionner un style musical.";
                          }
                         
                          
                 if (!empty($_POST['titre']))
                         {
                                 $titre = $_POST['titre'];
                                 
                                 if (!preg_match("#^[a-zA-Z0-9]+$#", $titre))
                                         {
                                                 $_SESSION['erreur_form'][] = "Veuillez n'utiliser que des caractères alphanumériques dans le titre.";
                                         }
                         }
                         else
                         {
                                 $_SESSION['erreur_form'][] = "Veuillez indiquer le titre de la chanson.";
                         }
                         
                         
                 if (count($_SESSION['erreur_form']) > 0)
                 {
                         $_SESSION['erreur_form'][] = 'Aucun fichier n\'a été téléchargé';
                         
                         //reload de la page
                         header('Location: '.$_SERVER['PHP_SELF']);
                         exit;
                 }
        }




if (count($_SESSION['erreur_form']) == 0) 
         {
                 $repertoire_destination = 'Code/musiques';
                 
                 //Déclaration de la classe
                 $up = new Telechargement($repertoire_destination,'form1','song','controle_form');
                 
                 //Extensions autorisées (sans les .)
                 $extensions = array("mp3");
                 $up->Set_Extensions_accepte ($extensions);
                 
                 // Rennommage des fichiers (en mode incrémentiel) si déjà présents sur le serveur.
                 $up->Set_Renomme_fichier('incr');
                 
                 // Téléchargement
                 $up->Upload();
                 
                 
                 // Enregistrement en bdd des valeurs récupérées par le post
                 if (isset($_POST['form1']))
                         {
                         
                                 // Récupération des valeurs du transfert de fichiers
                                 $transfert = $up->Get_Tab_upload();//tableau à plusieurs dimensions (c.f. Doc de la class pour plus de détails)
                                                          
                                 // définition des valeurs par défaut
                                 $fichier = array();
                                 $dossier = array();
                                 
                                 if (isset($transfert['resultat']))
                                         {
                                                 foreach ($transfert['resultat'] as $num => $rep)
                                                         {
                                                                 foreach ($rep as $key => $value)
                                                                         {
                                                                                 if(!empty($value['nom'])) $fichier[] =  $value['nom'];// Nom du fichier transféré
                                                                                 $dossier[] =  $key; // Nom du dossier
                                                                         }                    
                                                         }    
                                         }
                         
                                    
                            if(count($fichier) == 0)
                                    {
                                                 $_SESSION['erreur_form'][] = 'Aucun fichier n\'a été téléchargé';
                                                 $up->Get_Reload_page(); // reload de la page
                                    }
                                 
                                 
                                 // là on est certain que le code qui suit ne s'exécutera que si un fichier à été téléchargé
                                 
                                 // Puisqu'il n'y a qu'un champ de fichier il sera dans $fichier[0], et puisqu'il n'y a pas de redimensionnement multiple il n'y a qu'un dossier de destination donc il sera dans $dossier[0]
                                 
                                                                          
                                 // la récupération des autres variables du post a été faite dans la première condition (haut de page) if (isset($_POST['form1']))

                         
                         
                                 // Connexion à ta bdd
                                 // connexion BDD par PDO
         
                                  $PARAM_hote='localhost';      // le chemin vers le serveur
                                  $PARAM_port='3306';
                                  $PARAM_nom_bd='monsite';          // le nom de votre base de données
                                  $PARAM_utilisateur='root';    // nom d'utilisateur pour se connecter
                                  $PARAM_mot_passe='';          // mot de passe de l'utilisateur pour se connecter
                 
                 
                                  try{
                                                  $connexion = new PDO(
                                                  'mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, 
                                                  $PARAM_utilisateur,
                                                  $PARAM_mot_passe,
                                                  array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
                                                  );

                                                  $connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
                                                  
                                         }
                                  catch(Exception $e){
                                                  
                                                  echo 'Une erreur est survenue !';
                                                  echo 'Erreur : '.$e->getMessage().'<br />';
                                                  echo 'N° : '.$e->getCode();
                                                  die();
                                         }
                                  //   /fin de la connexion BDD par PDO-->
                                  
                                   $artiste = $_SESSION['pseudo'];
                                   $id_artiste = $_SESSION['id'];
                                   $adresse_chanson = $dossier[0].'/'.$fichier[0];
                                   $vues = 0;
                                   $note = 0;
                                  $insert = $connexion->prepare('INSERT INTO chansons(titre, artiste, id_artiste, date_envoi, vues, note, description, adresse_chanson, style) VALUES(:titre, :artiste, :id_artiste, NOW(), :vues, :note, :description, :adresse_chanson, :style)');
                                  
                                 try
                                         {
                                         $insert->execute(array(
                                                 'titre' => $titre,
                                                 'artiste' => $artiste,
                                                 'id_artiste' => $id_artiste,
                                                 'vues' => $vues,
                                                 'note' => $note,
                                                 'description' => $description,
                                                 'adresse_chanson' => $adresse_chanson,
                                                 'style' => $style
                                                 ));
                                         }
                                 catch(Exception $e)
                                         {
                                                 
                                                  echo 'Une erreur est survenue !';
                                                  echo 'Erreur : '.$e->getMessage().'<br />';
                                                  echo 'N° : '.$e->getCode();
                                                  die();
                                         }
                                         
                                 //$insert->closeCursor(); // Termine le traitement de la requête
                                 
                                 
                          
                 
                         
                                                                                                                              
         
			
			//la chanson est enregistréz dans la BDD chansons, on va maintenant récupérer son id créer automatiquement par MySQL
			$id = $_SESSION['id'];
			$sql  = 'SELECT id '.
					'FROM chansons '.
					'WHERE id_artiste='.$connexion->quote($id).' '.
					'and date_envoi= NOW()';
			$req = $connexion->query($sql); 
			$req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
			$data = $req->fetch();
			$id_chanson = $data->id;
			$req->closeCursor(); // Termine le traitement de la requête
			
			//on a récupérer l'id de la chanson, on va l'enregistrer dans la BDD musplay avec les infos correspondantes au compositeur
			$id_playlist = $_SESSION['id_playlist'];
			$id_crea = $_SESSION['id'];
			$type = 1;
			$insert2 = $connexion->prepare('INSERT INTO musplay(id_chanson, id_playlist, type, id_crea) VALUES(:id_chanson, :id_playlist, :type, :id_crea)');
			try 
			{
			$insert2->execute(array(
						'id_chanson' => $id_chanson,
						'id_playlist' => $id_playlist,
						'type' => $type,
						'id_crea' => $id_crea
						));
			}
			catch(Exception $e)
			{
                 /* erreur insertion */
                 echo 'Une erreur est survenue !';
                 echo 'Erreur : '.$e->getMessage().'<br />';
                 echo 'NР: '.$e->getCode();
                 die();
			}
			//$insert2->closeCursor(); // Termine le traitement de la requête
			
			//on incrémente de 1 le nombre de chansons du compositeur
			$nb_chanson = $_SESSION['nb_chanson'];
			$nb_chanson = $nb_chanson + 1;
			$id = $_SESSION['id'];
			$update = $connexion->prepare('UPDATE user SET nb_chanson = :nb_chanson WHERE id = :id');
			try 
			{
			$update->execute(array(
						'nb_chanson' => $nb_chanson,
						'id' => $id
						));
			}
			catch(Exception $e)
			{
                 /* erreur insertion */
                 echo 'Une erreur est survenue !';
                 echo 'Erreur : '.$e->getMessage().'<br />';
                 echo 'NР: '.$e->getCode();
                 die();
			}
			$update->closeCursor(); // Termine le traitement de la requête
			
			//on incrémente de 1 le nombre de chansons de la playlist de type 1 (compositeur) du compositeur dans playlist_compo
			$nb_chanson_playlist = $_SESSION['nb_chanson'];
			$nb_chanson_playlist = $nb_chanson_playlist + 1;
			$update2 = $connexion->prepare('UPDATE playlist_compo SET nb_chanson = :nb_chanson WHERE id = :id');
			try 
			{
			$update2->execute(array(
						'nb_chanson' => $nb_chanson_playlist,
						'id' => $id
						));
			}
			catch(Exception $e)
			{
                 /* erreur insertion */
                 echo 'Une erreur est survenue !';
                 echo 'Erreur : '.$e->getMessage().'<br />';
                 echo 'NР: '.$e->getCode();
                 die();
			}
			$update2->closeCursor(); // Termine le traitement de la requête
			}
		// Récupération des messages d'information de téléchargement
                 $resultat = $up->Get_Tab_message(); 
				 
		   //$up->Get_Reload_page();
		   }
		   
		
?>
 <form enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?controle_form=1' ?>" method = "post">
      
       <input type="hidden" name="MAX_FILE_SIZE" value="5242880" />

       <input type="file" name="song[]" /><br  />
          
		<label for="titre">Titre de la chanson : (seuls les caractères alphanumériques sont autorisés)</label><input type="text" name="titre" id="titre"/><br />
                 <label for="style"> Style musical de la chanson : </label>
                 <select name="style" id="style" >
                                 <option value="blues" > Blues </option>
                                 <option value="chanson_francaise" > Chanson Française </option>
                                 <option value="classique" id="classique" > Classique </option>
                                 <option value="club" > Club </option>
								 <option value="country" > Country </option>
								<option value="dance" > Dance </option>
								<option value="disco" > Disco</option>
								<option value="electro" > Electro</option>
								<option value="electro_rock" >Electro-Rock </option>
								<option value="electro_pop" > Electro-Pop</option>
								<option value="folk" > Folk</option>
								<option value="funk" > Funk</option>
								<option value="garage_rock" > Garage Rock</option>
								<option value="gospel" > Gospel</option>
								<option value="grunge" > Grunge</option>
								<option value="hard_rock" > Hard Rock </option>
								<option value="heavy_metal" > Heavy Metal</option>
								<option value="hip_hop" > Hip Hop</option>
								<option value="house" > House</option>
								<option value="indie_rock" > Indie Rock</option>
								<option value="instrumental" > Instrumental</option>
								<option value="jazz" > Jazz</option>
								<option value="lounge" > Lounge<option>
								<option value="mambo" > Mambo</option>
								<option value="opera" > Opera</option>
								<option value="pop" > Pop</option>
								<option value="pop_rock" > Pop Rock</option>
								<option value="punk" > Punk</option>
								<option value="punk_rock" > Punk Rock</option>
								<option value="rnb" > R'n'B</option>
								<option value="rap" > Rap</option>
								<option value="reggae" > Reggae</option>
								<option value="rock" > Rock</option>
								<option value="salsa" > Salsa</option>
								<option value="slam" > Slam</option>
								<option value="soul" > Soul</option>
								<option value="tango" > Tango</option>
								<option value="techno" > Techno</option>
								<option value="trance" > Trance</option>
						</select><br />
				 <textarea name="description" id="description" /></textarea><label for="description" > Breve description de la chanson (facultatif) : </label>
                 <input type="submit" name = "form1" value="Envoyer le fichier">
 </form>

<?php //affichage des résultats
if (!empty($resultat))
         {
                 echo '<p>';
                         foreach ($resultat as $num)
                                 {
                                         foreach ($num as $value)
                                         echo htmlspecialchars($value).'<br />';
                                 }
                 echo '</p>';
         }
		 
// affichage des erreurs du formulaire
if(count($_SESSION['erreur_form']) > 0)
         {
                  echo '<p>';
                  
                  foreach ($_SESSION['erreur_form'] as $value)
                          {
                                  echo htmlspecialchars($value).'<br />';
                          }
                                          
                  echo '</p>';
                  
                 unset($_SESSION['erreur_form']);
         }
?>
Et aussi au passage, serait -il possible de ne pas afficher le dossier ou a été uploadé la musique dans ce message ?

Merci :D

Re: pb upload (changement : caractère spéciaux et UTF-8)

par AB » 06 oct. 2011, 02:24

Il faut que la ligne "$resultat = $up->Get_Tab_message();"

soit après l'accolade de fermeture de la condition
if (isset($_POST['form1'])) {...}

mais avant l'accolade de fermeture de la condition
if (count($_SESSION['erreur_form']) == 0) {...}

(comme dans l'exemple de mon code en fait).

Quand je parle de la condition if (isset($_POST['form1'])) je parle de la seconde, c'est à dire celle qui se trouve à l'intérieure de la condition "if (count($_SESSION['erreur_form']) == 0)", pas de la première qui se trouve plus haut.

Re: pb upload (changement : caractère spéciaux et UTF-8)

par arthur77 » 05 oct. 2011, 21:18

Sinon je vois pas pourquoi tu as supprimé la ligne header('Content-type: text/html; charset=UTF-8'); je t'en ai parlé pourtant plusieurs fois (ce n'est pas l'origine de ton problème de requête mais cela pourrait te poser de nouveaux problèmes d'affichage ultérieurement).
Je l'ai laissée, mais j'ai indiquer avant de donner mon code a moogli dans mon précédent message que je n'avais pas mit l'entète, et donc pas non plus ce qu'il y a au dessus (donc je n'ai pas copié le "session_start()" et le "header('Content-type: text/html; charset=UTF-8');"), mais ceux ci sont présents dans mon code.
Après un pb d'upload, suivi d'un problème de caractères spéciaux on en est maintenant à un pb de requête ...
Oui mais l'ancien code (pas celui là mais celui d'avant que tu m'avais donné) fonctionnait très bien, tu m'a donné celui là qui est mieux d'après toi alors j'essaye dans cette direction.

pourquoi tu met ces insertions en dehors du test sur $_POST['form1'] ?
Oui c'est une erreur de ma part, j'ai corrigé, mais maintenant j'ai ces erreurs :
Notice: Undefined variable: up in C:\wamp\www\Code\pages\uploadtest.php on line 351
Fatal error: Call to a member function Get_Tab_message() on a non-object in C:\wamp\www\Code\pages\uploadtest.php on line 351
qui correspondent à cette ligne :
$resultat = $up->Get_Tab_message();
J'ai vérifié que la Classe_upload.php était bien dans le bon répertoire et avec le bon nom, mais rien y fait ...

Merci :D

Re: pb upload (changement : caractère spéciaux et UTF-8)

par AB » 05 oct. 2011, 04:03

Oui commence par mettre tes requêtes supplémentaires à la place de la ligne "$insert->closeCursor();" que j'avais oublié d'enlever dans mon code (et donc juste avant la ligne "$up->Get_Reload_page();" toujours par rapport à mon exemple de code).

moogli te l'avais déjà dit mais je précise l'endroit exact, des fois que...

Sinon je vois pas pourquoi tu as supprimé la ligne header('Content-type: text/html; charset=UTF-8'); je t'en ai parlé pourtant plusieurs fois (ce n'est pas l'origine de ton problème de requête mais cela pourrait te poser de nouveaux problèmes d'affichage ultérieurement).

Pour la petite histoire on ne traite généralement qu'un problème par topic. Ce sont les règles du forum, et c'est pas moi qui les ai fixées :wink:

Après un pb d'upload, suivi d'un problème de caractères spéciaux on en est maintenant à un pb de requête ...

On ne traite généralement qu'un problème par topic pour faciliter la recherche et la pertinence des résultats pour les visiteurs qui consultent le forum pour essayer de trouver des réponses à leur problème.
Tu comprends bien qu'avec un topic sur plusieurs sujets et à rallonge comme le tiens, il devient quasiment inutilisable pour de nouveaux visiteurs (comme disent les anciens, une chatte n'y retrouverait pas ses petits :lol: ) Alors qu'avec des questions plus ciblées, en même temps qu'on aide quelqu'un, on peut aider aussi potentiellement d'autres visiteurs.
Cela dit il est vrai qu'il était difficile de trouver un titre à ton nouveau problème puisqu'il provient, au moins pour partie, du fait que tu n'avais mis ton complément de code au bon endroit.

Dernière chose, plutôt que de rechercher l'identifiant que vient d'insérer mysql, tu peux éventuellement essayé d'utiliser PDO::lastInsertId je dis éventuellement car comme dit dans la doc ça ne fonctionne pas avec toutes les bases.
Concernant le code que je t'ai donné en exemple, il peut y avoir de petites erreurs, étant donné que je n'ai pas testé, mais normalement les erreurs fournies par php sont assez explicites pour corriger.

Re: pb upload (changement : caractère spéciaux et UTF-8)

par moogli » 05 oct. 2011, 00:32

pourquoi tu met ces insertions en dehors du test sur $_POST['form1'] ?

si tu ne passe pas dans le if $connexion n'existe pas !

Tu n'a pas besoin de closecursor() après une insertion :)

sinon je ne vois pas pourquoi ce message, dans le cas où l'on passe par le if du dessus.

ajoute de var_dump($connexion); au fur et a mesure du code pour voir où cela peut clocher.

par exemple
- après l'insertion
- après le $insert->closeCursor();
- avant et après $resultat = $up->Get_Tab_message();
- avant $req = $connexion->query($sql);

@+

Re: pb upload (changement : caractère spéciaux et UTF-8)

par arthur77 » 04 oct. 2011, 21:57

Voila toute la partie upload+enregistrement BDD (donc toute la page sauf l'entete et le formulaire, dont on s'en fout non ?)
// Chargement de la classe
require('Classe_upload.php');


// On déclare un tableau pour enregistrer les messages d'erreur du formulaire
$_SESSION['erreur_form'] = isset($_SESSION['erreur_form']) ?  $_SESSION['erreur_form'] : array();

if (isset($_POST['form1']))
         {                       
                                          
                 //on regarde si la description est remplie
                 $description = !empty($_POST['description']) ? $_POST['description'] : '';
                         
                          
                  if (!empty($_POST['style']))
                          {
                                 $style = $_POST['style'];
                          }
                          else
                          {
                                 $_SESSION['erreur_form'][] = "Veuillez sélectionner un style musical.";
                          }
                         
                          
                 if (!empty($_POST['titre']))
                         {
                                 $titre = $_POST['titre'];
                                 
                                 if (!preg_match("#^[a-zA-Z0-9]+$#", $titre))
                                         {
                                                 $_SESSION['erreur_form'][] = "Veuillez n'utiliser que des caractères alphanumériques dans le titre.";
                                         }
                         }
                         else
                         {
                                 $_SESSION['erreur_form'][] = "Veuillez indiquer le titre de la chanson.";
                         }
                         
                         
                 if (count($_SESSION['erreur_form']) > 0)
                 {
                         $_SESSION['erreur_form'][] = 'Aucun fichier n\'a été téléchargé';
                         
                         //reload de la page
                         header('Location: '.$_SERVER['PHP_SELF']);
                         exit;
                 }
         }




if (count($_SESSION['erreur_form']) == 0) 
         {
                 $repertoire_destination = 'Code/musiques';
                 
                 //Déclaration de la classe
                 $up = new Telechargement($repertoire_destination,'form1','song','controle_form');
                 
                 //Extensions autorisées (sans les .)
                 $extensions = array("mp3");
                 $up->Set_Extensions_accepte ($extensions);
                 
                 // Rennommage des fichiers (en mode incrémentiel) si déjà présents sur le serveur.
                 $up->Set_Renomme_fichier('incr');
                 
                 // Téléchargement
                 $up->Upload();
                 
                 
                 // Enregistrement en bdd des valeurs récupérées par le post
                 if (isset($_POST['form1']))
                         {
                         
                                 // Récupération des valeurs du transfert de fichiers
                                 $transfert = $up->Get_Tab_upload();//tableau à plusieurs dimensions (c.f. Doc de la class pour plus de détails)
                                                          
                                 // définition des valeurs par défaut
                                 $fichier = array();
                                 $dossier = array();
                                 
                                 if (isset($transfert['resultat']))
                                         {
                                                 foreach ($transfert['resultat'] as $num => $rep)
                                                         {
                                                                 foreach ($rep as $key => $value)
                                                                         {
                                                                                 if(!empty($value['nom'])) $fichier[] =  $value['nom'];// Nom du fichier transféré
                                                                                 $dossier[] =  $key; // Nom du dossier
                                                                         }                    
                                                         }    
                                         }
                         
                                    
                            if(count($fichier) == 0)
                                    {
                                                 $_SESSION['erreur_form'][] = 'Aucun fichier n\'a été téléchargé';
                                                 $up->Get_Reload_page(); // reload de la page
                                    }
                                 
                                 
                                 // là on est certain que le code qui suit ne s'exécutera que si un fichier à été téléchargé
                                 
                                 // Puisqu'il n'y a qu'un champ de fichier il sera dans $fichier[0], et puisqu'il n'y a pas de redimensionnement multiple il n'y a qu'un dossier de destination donc il sera dans $dossier[0]
                                 
                                                                          
                                 // la récupération des autres variables du post a été faite dans la première condition (haut de page) if (isset($_POST['form1']))

                         
                         
                                 // Connexion à ta bdd
                                 // connexion BDD par PDO
         
                                  $PARAM_hote='localhost';      // le chemin vers le serveur
                                  $PARAM_port='3306';
                                  $PARAM_nom_bd='monsite';          // le nom de votre base de données
                                  $PARAM_utilisateur='root';    // nom d'utilisateur pour se connecter
                                  $PARAM_mot_passe='';          // mot de passe de l'utilisateur pour se connecter
                 
                 
                                  try{
                                                  $connexion = new PDO(
                                                  'mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, 
                                                  $PARAM_utilisateur,
                                                  $PARAM_mot_passe,
                                                  array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
                                                  );

                                                  $connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
                                                  
                                         }
                                  catch(Exception $e){
                                                  
                                                  echo 'Une erreur est survenue !';
                                                  echo 'Erreur : '.$e->getMessage().'<br />';
                                                  echo 'N° : '.$e->getCode();
                                                  die();
                                         }
                                  //   /fin de la connexion BDD par PDO-->
                                  
                                   $artiste = $_SESSION['pseudo'];
                                   $id_artiste = $_SESSION['id'];
                                   $adresse_chanson = $dossier[0].'/'.$fichier[0];
                                   $vues = 0;
                                   $note = 0;
                                  $insert = $connexion->prepare('INSERT INTO chansons(titre, artiste, id_artiste, date_envoi, vues, note, description, adresse_chanson, style) VALUES(:titre, :artiste, :id_artiste, NOW(), :vues, :note, :description, :adresse_chanson, :style)');
                                  
                                 try
                                         {
                                         $insert->execute(array(
                                                 'titre' => $titre,
                                                 'artiste' => $artiste,
                                                 'id_artiste' => $id_artiste,
                                                 'vues' => $vues,
                                                 'note' => $note,
                                                 'description' => $description,
                                                 'adresse_chanson' => $adresse_chanson,
                                                 'style' => $style
                                                 ));
                                         }
                                 catch(Exception $e)
                                         {
                                                 
                                                  echo 'Une erreur est survenue !';
                                                  echo 'Erreur : '.$e->getMessage().'<br />';
                                                  echo 'N° : '.$e->getCode();
                                                  die();
                                         }
                                         
                                 $insert->closeCursor(); // Termine le traitement de la requête
                                 
                                 
                         } 
                 
                         
                 // Récupération des messages d'information de téléchargement
                 $resultat = $up->Get_Tab_message();                                                                                                              
         
			
			//la chanson est enregistréz dans la BDD chansons, on va maintenant récupérer son id créer automatiquement par MySQL
			$id = $_SESSION['id'];
			$sql  = 'SELECT id '.
					'FROM chansons '.
					'WHERE id_artiste='.$connexion->quote($id).' '.
					'and date_envoi= NOW()';
			$req = $connexion->query($sql); 
			$req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
			$data = $req->fetch();
			$id_chanson = $data->id;
			$req->closeCursor(); // Termine le traitement de la requête
			
			//on a récupérer l'id de la chanson, on va l'enregistrer dans la BDD musplay avec les infos correspondantes au compositeur
			$id_playlist = $_SESSION['id_playlist'];
			$id_crea = $_SESSION['id'];
			$type = 1;
			$insert2 = $connexion->prepare('INSERT INTO musplay(id_chanson, id_playlist, type, id_crea) VALUES(:id_chanson, :id_playlist, :type, :id_crea)');
			try 
			{
			$insert2->execute(array(
						'id_chanson' => $id_chanson,
						'id_playlist' => $id_playlist,
						'type' => $type,
						'id_crea' => $id_crea
						));
			}
			catch(Exception $e)
			{
                 /* erreur insertion */
                 echo 'Une erreur est survenue !';
                 echo 'Erreur : '.$e->getMessage().'<br />';
                 echo 'NР: '.$e->getCode();
                 die();
			}
			$insert2->closeCursor(); // Termine le traitement de la requête
			
			//on incrémente de 1 le nombre de chansons du compositeur
			$nb_chanson = $_SESSION['nb_chanson'];
			$nb_chanson = $nb_chanson + 1;
			$id = $_SESSION['id'];
			$update = $connexion->prepare('UPDATE user SET nb_chanson = :nb_chanson WHERE id = :id');
			try 
			{
			$update->execute(array(
						'nb_chanson' => $nb_chanson,
						'id' => $id
						));
			}
			catch(Exception $e)
			{
                 /* erreur insertion */
                 echo 'Une erreur est survenue !';
                 echo 'Erreur : '.$e->getMessage().'<br />';
                 echo 'NР: '.$e->getCode();
                 die();
			}
			$update->closeCursor(); // Termine le traitement de la requête
			
			//on incrémente de 1 le nombre de chansons de la playlist de type 1 (compositeur) du compositeur dans playlist_compo
			$nb_chanson_playlist = $_SESSION['nb_chanson'];
			$nb_chanson_playlist = $nb_chanson_playlist + 1;
			$update2 = $connexion->prepare('UPDATE playlist_compo SET nb_chanson = :nb_chanson WHERE id = :id');
			try 
			{
			$update2->execute(array(
						'nb_chanson' => $nb_chanson_playlist,
						'id' => $id
						));
			}
			catch(Exception $e)
			{
                 /* erreur insertion */
                 echo 'Une erreur est survenue !';
                 echo 'Erreur : '.$e->getMessage().'<br />';
                 echo 'NР: '.$e->getCode();
                 die();
			}
			$update2->closeCursor(); // Termine le traitement de la requête
			
		   $up->Get_Reload_page();
		   }
Merci :)