$_FILES petite incompréhension

webamon
Invité n'ayant pas de compte PHPfrance

13 nov. 2012, 22:22

Salut tout le monde,

Alors voila mon problème.
Je débute en PHP et j'essaye de réaliser une page qui me permet d'uploader une vidéo.
Mais je n'arrive pas a récupérer les données du fichier que j'upload.

C'est à dire que quand je clique sur le submit, le fichier se charge mais une fois chargé il ne se passe rien, je n'ai même pas le message qui me dit que l'upload a bien eu lieu.

Le print de $_FILES me retourne array() , il est vide quoi.

Quelqu'un aurait il une idée ?

Code : Tout sélectionner

<?php include 'connexion.php'; ?> <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>NICOUPLOAD</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <?php $message='Choisis un fichier et essayes de taper un nom simple et propre'; if (!empty($_POST['submit'])) { extract($_POST);//permet de récuperer toute les variable du formulaire $nomDossier =date('Y'); #si le fichier n'existe pas on créer le dossier dans le serveur if (!file_exists($nomDossier)){mkdir($nomDossier, 0777);} #copie l'image sur notre serveur move_uploaded_file($_FILES['movie']['tmp_name'], $nomDossier.'/'.$_FILES['movie']['name']); $link = $nomDossier.'/'.$_FILES['movie']['name']; $sql="INSERT INTO fichier (id, nom, link) VALUES ('','$nom','$link')"; #JE LANCE MA REQUETTE SQL mysql_query($sql) or die(mysql_error()); $message='ajout terminé'; } ?> <pre><?php print_r($_FILES); ?></pre> <div id="content" class="upload"> <p><?php echo $message; ?></p> <form action="" method="post" accept-charset="utf-8" enctype="multipart/form-data"> <p>Nom du film</br><input type="text" name="nom" value="" id="nom"></p> <input type="file" name="movie" value="" id="movie"/> <p><input name="submit" type="submit" value="Uploader"></p> </form> </div> </body> </html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 nov. 2012, 22:43

salut,


print, n'affiche que les données simples.

utilise print_r ou var_dump pour voir le contenu.

par exemple var_dump($_FILES);

Oublie extract et utilise $_POST tu va y gagner en lisibilité et en maintenance.

Ton code peux être corriger ainsi
<?php
	include 'connexion.php';
 ?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
   <meta charset="UTF-8">
   <title>NICOUPLOAD</title>
   <link rel="stylesheet" href="css/style.css">
</head>
<body>
	<?php
	$message='Choisis un fichier et essayes de taper un nom simple et propre';
	if (!empty($_POST['submit'])) {
		$nomDossier = date('Y');
		#si le fichier n'existe pas on créer le dossier dans le serveur
		if (!file_exists($nomDossier)){
			mkdir($nomDossier, 0777);
		}
		#copie l'image sur notre serveur
		move_uploaded_file($_FILES['movie']['tmp_name'], $nomDossier.'/'.$_FILES['movie']['name']);
		$link =  $nomDossier.'/'.$_FILES['movie']['name'];

		$sql='INSERT INTO fichier (id, nom, link) VALUES (null,\''.mysql_real_escape_string($_POST['nom']).'\',\''.$link.'\')';
		#JE LANCE MA REQUETTE SQL
		$retour = mysql_query($sql);
		if($retour === false) {
			echo 'Erreur SQL : '.mysql_error();
		}
		$message='ajout terminé';
	}
	?>
    <pre><?php  var_dump($_FILES); ?></pre>
   <div id="content" class="upload">
       <p><?php echo $message; ?></p>
       <form action="" method="post" accept-charset="utf-8" enctype="multipart/form-data">
                <p>Nom du film</br><input type="text" name="nom" value="" id="nom"></p>
                <input type="file" name="movie" value="" id="movie"/>
              <p><input name="submit" type="submit" value="Uploader"></p>
         </form>
      </div>
</body>
</html>
Avant d'effectuer la copie du fichier vérifie l'erreur soit bien 0, sinon vérifie la valeur, expliquée ici


@+
Il en faut peu pour être heureux ......

webamon
Invité n'ayant pas de compte PHPfrance

13 nov. 2012, 22:52

Merci pour cette réponse rapide.

Pour l'erreur j'ai un retour "empty"... Après j'essaye d'uploader mais ça ne me met pas le message upload réussi et le Fichier n'est pas copié dans mon dossier, cela voudrait donc dire qu'il y a un problème au niveau de mon code concernant l'enregistrement du fichier, ou de la requête SQL ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 nov. 2012, 22:59

non, regarde ce qu'il y a dans $_FILES['movie']['error'] et compare avec le lien que je t'ai donné dans ma réponse précédente.


je parie sur : fichier trop gros.


par défaut la taille max des fichiers que l'on peu uploader c'est 2Mo (tu peux le vérifier dans un php.ini) ce qui est surement trop peux suivant le type de vidéo.




@+
Il en faut peu pour être heureux ......

webamon
Invité n'ayant pas de compte PHPfrance

13 nov. 2012, 23:23

Bha des php.ini j'en ai plusieurs, donc je sais pas lequel modifier :s...

ViPHP
AB
ViPHP | 5818 Messages

14 nov. 2012, 03:17

Bha des php.ini j'en ai plusieurs, donc je sais pas lequel modifier :s...
Je ne doute pas que tu aies plusieurs ".ini" mais plusieurs "php.ini" ce serait étonnant.

Sinon fais attention car si tu dépasse la directive "post_max_size" du serveur alors les variables $_POST et $_FILES seront vides. Il y a une explication sur les moyens de gérer cette erreur dans ce tuto.

webamon
Invité n'ayant pas de compte PHPfrance

14 nov. 2012, 11:28

Ok d'ac !

Merci pour vos réponse.
Je regarde ton lien et essaye de modifier le php.ini et je vous tiens au courant ^^

ViPHP
ViPHP | 2577 Messages

14 nov. 2012, 12:57

Pour info, j'ai découvert récemment qu'il y avait plusieurs php.ini sur ma machine : un pour apache et un pour la ligne de commande.

ViPHP
AB
ViPHP | 5818 Messages

14 nov. 2012, 13:55

Pour info, j'ai découvert récemment qu'il y avait plusieurs php.ini sur ma machine : un pour apache et un pour la ligne de commande.
Ah oui, je l'avais oublié celui-là. Je pensais au php.ini accessible depuis l'option configuration du menu du serveur local.