Besoin d'un coup de main avec le fileupload.swf

Forums » Webmaster Répondre

Tipepin10 octobre 2008 à 04h24


Bonjour à tous,

Voilà j'utilise le fileUpload.swf qui est d'ailleurs très efficace =)
Voilà un tuto qui a comblé mes espérances :)
Bref le problème n'est pas la.
J'ai intégrer fileUpload.swf dans un formulaire, cependant quand je poste le formulaire, toutes mes données sont inscrites dans ma base de données exceptées celle requise du fameux fileUpload.swf...

en clair j'ai besoin d'un précieux coup de main :)

Voici mon code pour vous aidez à y voir plus clair...


<?php

if (isset($_FILES['Filedata']['name'])) {



   
$uploadDir "uploads/";

   
$size $_FILES['Filedata']['size'];

   
$uploadFile $uploadDir basename($_FILES['Filedata']['name']);

   
$fichier $_FILES['Filedata']['name'];

   
move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadFile);

}

$date date("d/m/Y");

$heure date("H:i:s");



echo 
"<form name="form1" action="upload.php?action=addfile" met hod="post">



<table width="100%" border="0" cellspacing="2" cellpadding=" 0">

<tr>

<td width="180"><strong>artiste</strong></td>



<td><input id="artiste" maxLength="100" size="45" name ="artiste"></td>

</tr>

<td width="180"><strong>titre</strong></td>



<td><input id="titre" maxLength="100" size="45" name=" titre"></td>

</tr>



<td><object type="application/x-shockwave-flash" data="fileUploa d.swf"> 

<param name="movie" value="fileUpload.swf" /> 

<param name="wmode" value="transparent" /> 

<p>votre naviguateur ne supporte pas cette anim ation flash</p> 

</object></td>



<tr>

<td><B>Publier&nbsp;le:</B>&nbsp;</td>

<td><input type="hidden" id="date" maxLength="100" siz e="45" name="date" value="$date &agrave; $heure"></td&g t;





<tr>

<td valign="top">&nbsp;</td>

<td><input name="Submit" type="submit" value="Envoyer">& lt;/td>



<tr></table></form>"
;





function 
addfile ()

{

$artiste addslashes($_POST['artiste']);

$titre addslashes($_POST['titre']);

$date addslashes($_POST['date']);





mysql_query("INSERT INTO test (id,artiste,titre,date,fichier,size) V ALUES('', '$artiste', '$titre', '$date', '$fichier', '$size' )");



echo 
"<center><strong>file added.</center></strong>< br />
<meta http-equiv="refresh" content="2; url=test2.php">"
;

}







$action $_GET['action'];



switch (
$action)





case
'addfile'

addfile ();

break;

}

?>


Kaio11 octobre 2008 à 10h55

photo de kaio
Salut,
Si tes variables $size et $fichier ne sont pas insérées dans ta bdd, vérifie avant qu'elles existent bien. Est-ce que la condition


<?php  if (isset($_FILES['Filedata']['name'])) { ?>

est bien remplie ?

D'ailleurs ton script est très mal écrit, tu insères ces deux variables sans même vérifier ce qu'elles contiennent... Si la condition écrite plus haut n'est pas remplie tes variables n'existent pas... On pourrait même très facilement faire de l'SQL injection avec ton bout de code.

Regarde le sujet Upload avec barre de progression flash/php ça devrait t'aider.

++

Tipepin11 octobre 2008 à 18h54


Merci pour ta réponse Kaio, cependant je pense que l'on s'est mal compris.
Mes variables $fichier & $size existent bel et bien puisqu'elles sont définies ici :


<?php $size = $_FILES['Filedata']['size'];

$fichier = $_FILES['Filedata']['name'];  ?>



La condition


<?php  <?php  if (isset($_FILES['Filedata']['name'])) { ?> ?>


est bien remplie puisque le fichier est uploadé via fileUpload.swf et apparait bien sur mon ftp.

Pour ce qui est de l'écriture de mon script, du dit sans doute vrai. Je débute en php, donc mes connaissances restent assez restreintes. Peut être pourrais-tu m'aider à l'améliorer ?


Cependent, quand j'ajoute dans ma fonction


<?php  <?php  if (isset($_FILES['Filedata']['name'])) { ?> ?>


cette requête SQL :


<?php mysql_query("INSERT INTO test (fichier,size) VALUES('$fichier', '$size')"); ?>


la requête s'exécute parfaitement et les valeurs entrées correspondent également, seulement ces informations sont insérées dans une ligne différente des données du formulaire qui suit, en l'occurrence $artiste, $titre et $date.

Ce que je cherche à faire, c'est pouvoir insérer dans ma table $artiste, $titre, $date, $fichier et $size dans une seule et même ligne, donc avec le même id.
J'ai essayer tout un tas de choses, mais sans succès...
Peut être pourrais-tu éclairer ma lanterne à ce sujet?

Merci encore.

[edit] Jette un coup d'oeil sur ce post, il se rapproche beaucoup de ce que j'aimerais faire : http://flash.mediabox.fr/lofiversion/index.php/t66895.html

(édition: 11 octobre 2008 à 19h01)

Kaio12 octobre 2008 à 12h25

photo de kaio
Salut,

Pour ton problème de variables, tu les définies bien mais il y a une condition. Il faut toujours initialiser tes variables, cela t'éviteras des problèmes de sécurité et/ou d'erreurs php. Donc tu peux les initialiser avant le if ou dans un else..

Donc d'après ce que tu dis, tu as vérifié que l'upload s'est bien passé et tu veux juste insérer tes variables dans ta base de données.

Si tu écris :


<?php mysql_query("INSERT INTO test (fichier,size) VALUES('$fichier',  ;'$size')"); ?>


c'est normal que ces données soient insérées dans une nouvelle ligne. Tu dois préciser l'id si tu veux mettre à jour ta base.

D'abord tu récupères le bon identifiant, soit en faisant une requete SELECT soit directement après le INSERT tu peux récupérer l'id avec la fonction :


<?php $id=mysql_insert_id() ?>



Voir mysql_insert_id

Ensuite tu mets à jour la table...


<?php mysql_query("UPDATE test SET fichier='$fichier', size='$size' W HERE id='$id' ") or die(mysql_error());  ?>



++

Tipepin12 octobre 2008 à 19h05


Salut Kaio,

J'ai suivi tes instructions mais il y a un petit hic..
Je te laisse jetter un coup d'oeil à mon nouveau code :


<?php if (isset($_FILES['Filedata']['name'])) {

   $uploadDir = "uploads/";

   $uploadFile = $uploadDir . basename($_FILES['Filedata']['name']);

   $size = $_FILES['Filedata']['size'];

   $fichier = $_FILES['Filedata']['name'];

   move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadFile);

mysql_query("INSERT INTO test (id,fichier,size) VALUES('', '$fichier', '$size')"< span style="color: #006600">);

}





// Donnons la date et l'heure

$date = date("d/m/Y");

$heure = date("H:i:s");



echo "<form name="form1" action="upload.php?action=addfile" method="post">



<table width="
100%" border="0" cellspacing="2" cellpadding="0">

<tr>

<td width="
180"><strong>artiste</strong></td>



<td><input id="
artiste" maxLength="100" size="45" name="artiste"></td>

</tr>

<td width="
180"><strong>titre</strong></td>

<td><input id="
titre" maxLength="100" size="45" name="titre"></td>

</tr>

<td><object type="
application/x-shockwave-flash" data="fileUpload.swf"> 

<param name="
movie" value="fileUpload.swf" /> 

<param name="
wmode" value="transparent" /> 

<p>votre naviguateur ne supporte pas cette animation flash</p> 

</object></td>

<tr>

<td><input type="
hidden" id="date" maxLength="100" size="45" name="date" value="$date &agrave; $heure"></td>

<tr>

<td valign="
top">&nbsp;</td>

<td><input name="
Submit" type="submit" value="Envoyer"></td>



<tr></table></form>"
;







function addfile ()

{

$id = mysql_insert_id();

$artiste = addslashes($_POST['artiste']);

$titre = addslashes($_POST['titre']);

$date = addslashes($_POST['date']);

mysql_query("UPDATE test SET artiste='$artiste', titre='$titre', date='$date' WHERE id=' $id'") or die(mysql_error());

echo "<center><strong>file added.</center></strong>";

}





$action = $_GET['action'];



switch ($action)

{
 

case'addfile': 

addfile 
();

break;

}

?> ?>



Le nom de fichier ($fichier) et le poids ($size) sont biens inscrits dans ma table, ce qui indique que :


<?php mysql_query("INSERT INTO test (id,fichier,size) VALUES('', '$fichier', '$size')"< span style="color: #006600">);
 ?>


fonctionne.

Malheureusement le reste du formulaire qui est envoyé par ma fonction addfile () n'apparait pas. J'en déduis que :


<?php mysql_query("UPDATE test SET artiste='$artiste', titre='$titre', date='$date' WHERE id=' $id'") or die(mysql_error()); ?>


ne fonctionne pas? Mais je n'ai aucune erreur.

Je ne comprends pas... Merci encore pour cette réponse

(édition: 12 octobre 2008 à 19h10)

Kaio12 octobre 2008 à 22h46

photo de kaio
As-tu vérifié que l'id que te renvoie mysql_insert_id() est bon?

D'ailleurs tu écris plus haut :

mysql_query("INSERT INTO test (id,fichier,size) VALUES('', '$fichie r', '$size')")  


Tu inséres un id vide? perplexe

Vérifies dans ta base de données que tu as bien mis la valeur du champ id à autoincrémentable et tu n'as pas besoin d'insérer un id dans cette requête..

++

(édition: 12 octobre 2008 à 22h48)

Tipepin12 octobre 2008 à 23h12


En effet mon id est en auto increment..
Quand je rajoute


<?php echo "$id"; ?>


dans ma fonction addfile (), il me renvoi 0.
Voilà d'où vient le problème mais comment le résoudre? :(
C'est donc le mysql_insert_id qui ne fonctionne pas.
Surement parce qu'il ne passe pas du isset à addfile () ?

(édition: 12 octobre 2008 à 23h15)

Forums » Webmaster Répondre