on va reprendre le code depuis le début (enfin le dernier code entier), après remise en forme ça donne ceci (histoire que l'on parle de la même chose)
<?php
// 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();
// Si un fichier a été transférer
if (!empty ($transfert)){
// Récupération du non du fichier transféré
$resultat = $transfert['resultat'];//tableau à trois dimensions (c.f. Doc de la class pour plus de détails)
foreach ($resultat as $num => $rep){
foreach ($rep as $key => $value){
$fichier = $value['nom'];// Nom du fichier transféré
$dossier = $key; // Nom du dossier
}
}
// Récupération de tes autres valeurs
//on regarde si la description est remplie
if ((isset($_POST['description'])) AND (!empty($_POST['description'])))
{
$description = $_POST['description'];
}
else
{
$description = '';
}
if ((isset($_POST['style'])) AND (!empty($_POST['style'])))
{
$style = $_POST['style'];
}
else
{
$style = '';
$_SESSION['info_style'] = 0;
}
// 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.';dbvalue='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
/* BDD connectee */
}
catch(Exception $e){
/* erreur connection */
echo 'Une erreur est survenue !';
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
die();
}
// /fin de la connexion BDD par PDO-->
//exemple de requête avec mysql (protéger les valerurs par mysql_real_escape_string) ou utiliser PDO --> j'utilise PDO
$artiste = $_SESSION['pseudo'];
$id_artiste = $_SESSION['id'];
$vues = 0;
$note = 0;
$adresse_chanson = $dossier.'/'.$fichier;
$sql = "INSERT INTO chansons(titre, artiste, id_artiste, date_envoi, vues, note, description, adresse_chanson)
VALUES('".$connexion->quote($fichier)."',
'".$connexion->quote($artiste)."',
'".$connexion->quote($id_artiste,PDO::PARAM_INT)."', NOW(), 0,0,
'".$connexion->quote($adresse_chanson)."')";
// Ligne temporaire pour vérification
echo $sql;
// exécution de la requête
$connexion->exec($sql);
// Rechargement de la page pour éviter un multi upload
$up->Get_Reload_page();
}
}
?>
donc ligne 11 à 16 il y a un foreach qui est prévue pour traiter les infos de sortie de la classe
<?php
foreach ($resultat as $num => $rep){
foreach ($rep as $key => $value){
$fichier = $value['nom'];// Nom du fichier transféré
$dossier = $key; // Nom du dossier
}
}
?>
or quelque soit le nombre de fichier uploadé avec la classe il est certain que tu n'aura qu'un seul retour vu que tu écrase à chaque fois $fichier et $dossier !
pour un fichier cela ne pose pas de problème, mais dans ce cas autant virer le foreach
Connexion au sgbd :
<?php
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbvalue='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
?>
le port est facultatif car le 3306 est le port par défaut pour mysql.
ce n'est pas dbvalue mais dbname
exemple
<?php
$db = new PDO('mysql:host=localhost;dbname=test','root');
$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
?>
le mot de passe est optionnel car vide, ceci dit je ne pense pas que cela soit le cas sur ton hébergement en ligne donc le mieux c'est de le garder

la ligne setattribute, sert a indiquer le mode d'erreur, plus d'info
sur la doc
Pourquoi warning ? parce que tu n'utilise pas de try / catch pour le query donc autant prendre les devants

ta table :
lorsque le vois artiste et id_artiste dans la même table j'y vois une redondance, c'est a éviter, supprime la colonne artiste, je suppose que ceci est récupérable via l'id_artiste qui fait la jointure avec une quelconque table utilisateur ?
$vue et $note étant fixe pas la peine d'utiliser des variables utilise directement la valeur dans la requête.
vue qu'il s'agit de nombre pas besoin de ' ce ne sont pas des chaine de caractère.
//exemple de requête avec mysql (protéger les valerurs par mysql_real_escape_string) ou utiliser PDO --> j'utilise PDO
Pas du tout d'accord PDO c'est pas la boite à miracle si tu ne l'utilise pas correctement, il existe un "équivalent" à mysql_real_escape_string qui est la
méthode quote.
lorsque tu utilise une requête préparée (à la limite justifiable en cas d'upload multiples, bien qu'une requete insert correctement formulée fait la même chose en utilisant moins de ressource (pour 400 insertions on utilise prépare hein, mais 3 ou 4 pas la peine ^^).
au final cela donne
<?php
// 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();
// Si un fichier a été transférer
if (!empty ($transfert)){
// Récupération du non du fichier transféré
$resultat = $transfert['resultat'];//tableau à trois dimensions (c.f. Doc de la class pour plus de détails)
foreach ($resultat as $num => $rep){
foreach ($rep as $key => $value){
$fichier = $value['nom'];// Nom du fichier transféré
$dossier = $key; // Nom du dossier
}
}
// Récupération de tes autres valeurs
//on regarde si la description est remplie
if ((isset($_POST['description'])) AND (!empty($_POST['description'])))
{
$description = $_POST['description'];
}
else
{
$description = '';
}
if ((isset($_POST['style'])) AND (!empty($_POST['style'])))
{
$style = $_POST['style'];
}
else
{
$style = '';
$_SESSION['info_style'] = 0;
}
// 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);
$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
/* BDD connectee */
}
catch(Exception $e){
/* erreur connection */
echo 'Une erreur est survenue !';
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
die();
}
// /fin de la connexion BDD par PDO-->
//exemple de requête avec mysql (protéger les valerurs par mysql_real_escape_string) ou utiliser PDO --> j'utilise PDO::quote
$artiste = $_SESSION['pseudo'];
$id_artiste = $_SESSION['id'];
$adresse_chanson = $dossier.'/'.$fichier;
$sql = "INSERT INTO chansons(titre, artiste, id_artiste, date_envoi, vues, note, description, adresse_chanson)
VALUES('".$connexion->quote($fichier)."',
'".$connexion->quote($artiste)."',
'".$connexion->quote($id_artiste,PDO::PARAM_INT)."', NOW(), 0,0,
'".$connexion->quote($adresse_chanson)."')";
// Ligne temporaire pour vérification
echo $sql;
// exécution de la requête
$nbAffect = $connexion->exec($sql);
if ($nbAffect === 0 ) {
//message d'erreur il ne pas y avoir zéro insertion !
}
else {
// Rechargement de la page pour éviter un multi upload
$up->Get_Reload_page();
}
}
}
?>
pour info, lorsque l'on debug il faut virer tout ce qui est redirection et die car dans ce cas on ne peux pas forcément voir les éventuels messages d'erreurs.
je pense que ton soucis est, au final, le mauvais "dsn" de PDO ! (le test a part comme l'indique AB l'aurais indiqué je pense).
@+
Il en faut peu pour être heureux ......