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.
Oui ça c'était une erreur de ma part. Essaies ça :
[php]<?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']);
}
?>[/php]
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.