Et bien voila *S'allonge sur le divan* Je bloque depuis 4 bonnes heures sur un formulaire et j'ai besoin d'aide.
En effet, je cherche à upload un fichier et celui-ci de retrouve visiblement pas mon $_FILES... Handicapant n'est-ce pas?
Voyez plutôt mes deux fichiers
Dans un premier temps le HTML: "musique.php"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>StarBox - Musique</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="style/css/style.css" />
</head>
<body>
<?php
session_start();
require_once('db.php');
include("header.php");
if (!isset($_SESSION['login'])) {
echo '<div class="error"><p>Vous devez vous connecter pour accéder à cette page.</p></div>';
session_destroy();
header ("Refresh: 2;URL=index.php");
}
else {
?>
<div class="starbox">
<?php echo "Bonjour " . $_SESSION['login'] . "."; ?>
<form class="starbox" name="addmusic" method="post" action="business_addmusic.php" enctype="multipart/form-data" OnSubmit="return Send()">
<a href="home.php"><< Accueil</a> <br />
<h1>Ajouter une musique</h1>
<table class="addmusic">
<tr colspan="2">
<td>Fichier à ajouter:<br />
<input name="addmusic_path" type="file" />*<br /><br /></td>
</tr>
<tr>
<td>Titre:<br />
<input type="text" name="addmusic_titre" />*<br /><br /></td>
<td>Artiste: <i>(Laisser vide si inconnu)</i><br />
<input type="text" name="addmusic_artiste" /><br /><br /></td>
</tr>
<tr>
<td>Numéro de piste: <i>(Laisser vide si inconnu)</i><br />
<input type="text" name="addmusic_number" /><br /><br /></td>
<td>Nom de l'album: <i>(Laisser vide si inconnu)</i><br />
<input type="text" name="addmusic_album" /><br /><br /></td>
</tr>
<tr>
<td>Année:<i>(Laisser vide si inconnu)</i><br />
<input type="text" name="addmusic_annee" /><br /><br /></td>
</tr>
<tr>
<td colspan="2">Genre(s):<br />
<?php
$genresmusic=$database->query('SELECT GENRE_ID, GENRE_NOM FROM genre WHERE GENRE_TYPE = 1 ORDER BY GENRE_NOM');
while($val = $genresmusic->fetch())
{
echo '<input type="radio" name="genre" value="'.$val['GENRE_NOM'].'" id="'.$val['GENRE_ID'].'" /> <label for="'.$val['GENRE_ID'].'">'.$val['GENRE_NOM'].'</label>';
}
?>
<br /><br /></td>
</tr>
<tr>
<td>Confidentialité:<br />
<input type="checkbox" id="private" name="confidentialite" value="Privé"/><label for="private">Privé</label><br /><br /></td>
</tr>
</table>
<input type="submit" value="Ajouter la musique" />
</form>
</div>
<?php
}
?>
</body>
</html>
Et dans un second temps le PHP: "business_addmusic.php"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Redirection...</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="style/css/style.css" />
</head>
<body>
<?php
session_start();
require_once('db.php');
include("header.php");
if (!isset($_SESSION['login'])) {
echo '<div class="error"><p>Vous devez vous connecter pour accéder à cette page.</p></div>';
session_destroy();
header ("Refresh: 2;URL=index.php");
}
else {
if ($_FILES['addmusic_path']['name'] != "" and $_POST['addmusic_titre'] != "") {
if ($_POST['addmusic_artiste'] == "") {
$_POST['addmusic_artiste'] = "Inconnu";
}
if ($_POST['addmusic_number'] == "") {
$_POST['addmusic_number'] = "NA";
}
if ($_POST['addmusic_album'] == "") {
$_POST['addmusic_album'] = "Inconnu";
}
if ($_POST['addmusic_annee'] == "") {
$_POST['addmusic_annee'] = "Inconnue";
}
if (!isset($_POST['genre'])) {
$_POST['genre'] = "Divers";
}
if (isset($_POST['confidentialite'])) {
$_POST['confidentialite'] = 1;
}
else {
$_POST['confidentialite'] = 0;
}
$idgenre=$database->prepare('SELECT GENRE_ID FROM genre WHERE GENRE_NOM = "'.$_POST['genre'].'" AND GENRE_TYPE = 1');
$idgenre->execute();
$data = $idgenre->fetch();
$_SESSION['idgenre'] = $data['GENRE_ID'];
echo $_SESSION['idgenre'].'<br />';
echo $_SESSION['user_id'].'<br />';
echo $_FILES['addmusic_path']['name'].'<br />';
echo $_POST['addmusic_titre'].'<br />';
echo $_POST['addmusic_artiste'].'<br />';
echo $_POST['addmusic_number'].'<br />';
echo $_POST['addmusic_album'].'<br />';
echo $_POST['addmusic_annee'].'<br />';
echo $_POST['genre'].'<br />';
echo $_POST['confidentialite'].'<br />';
$addmusic=$database->prepare('INSERT INTO fichier(GENRE_ID, TYPE_ID, FICHIER_NOM, FICHIER_CHEMIN, FICHIER_ANNEE, FICHIER_ARTISTE, FICHIER_ALBUM, FICHIER_PRIVE, FICHIER_PROPRIO, FICHIER_NUMERO) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$addmusic->execute(array($_SESSION['idgenre'], 1, $_POST['addmusic_titre'], $_FILES['addmusic_path']['name'], $_POST['addmusic_annee'], $_POST['addmusic_artiste'], $_POST['addmusic_album'], $_POST['confidentialite'], $_SESSION['user_id'], $_POST['addmusic_number']));
$dossier = 'upload/';
$fichier = basename($_FILES['addmusic_path']['name']);
$taille = filesize($_FILES['addmusic_path']['tmp_name']);
$extensions = array('.mp3', '.ogg', '.wav', '.aac', '.m4a', '.flac', '.wma');
$extension = strrchr($_FILES['addmusic_path']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez envoyer une musique de type mp3, ogg, wav, aac, m4a, flac ou wma.';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
if(move_uploaded_file($_FILES['addmusic_path']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo '<div class="success">Musique ajoutée.</div>';
unset($_SESSION['idgenre']);
unset($_FILES['addmusic_path']['name']);
unset($_POST['addmusic_titre']);
unset($_POST['addmusic_artiste']);
unset($_POST['addmusic_number']);
unset($_POST['addmusic_album']);
unset($_POST['addmusic_annee']);
unset($_POST['genre']);
unset($_POST['confidentialite']);
header ("Refresh: 2;URL=musique.php");
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Échec de l\'upload !';
}
}
else
{
echo $erreur;
}
}
else {
echo '<div class="error">Merci de remplir tous les champs obligatoires.</div>';
unset($_SESSION['idgenre']);
unset($_FILES['addmusic_path']['name']);
unset($_POST['addmusic_titre']);
unset($_POST['addmusic_artiste']);
unset($_POST['addmusic_number']);
unset($_POST['addmusic_album']);
unset($_POST['addmusic_annee']);
unset($_POST['genre']);
unset($_POST['confidentialite']);
header ("Refresh: 2;URL=musique.php");
}
}
?>
L'erreur que j'obtiens est un magnifique "Undefined index: addmusic_path" à chaque fois que j'essaye d'utiliser $_FILES['addmusic_path'] dans mon fichier "business_addmusic.php".
Voila voila... J'ai cherché sur plusieurs forums et tous les problèmes qui ce posent son souvent dus au enctype="multipart/form-data" qui est ici bel et bien présent ou bien alors au php.ini. J'ai modifié le mien car l'appli web va a terme fonctionner uniquement en local.
Infos utiles:
- navigateur Firefox (mais je vous "rassure" ça fonctionne pas non plus sous IE -_-)
php.ini:
- file_uploads = On
- post_max_size = 2050M
- upload_max_filesize = 2048M (c'est très gros car je compte par la suite pouvoir upload des films)
En tout cas je vous remercie par avance des conseils avisés que vous pourrez me donner !!
Bonne journée à vous. (ou plutôt nuit.)
PS: je me doute que ça doit être codé un peu crade :s, je suis dans l'ingénierie réseau, pas en dev' ^^"
