Upload avec barre de progression flash/php

Forums » Webmaster 1 2 Répondre

Onyrik11 mars 2008 à 22h15


Bonjour j'ai lu le tutoriel visant a créer un formulaire d'envoi avec barre de progression a cette adresse :
Upload en PHP avec Flash

Mais lorsque j'execute le script il m'indique cette erreur :

Notice: Undefined index: Filedata in d:webnews_2upload.php on line 6

j'ai des connaissances moderées en php et actionscript... ou definiton ce Filedata ?


(édition: 12 mars 2008 à 21h17)

Kaio12 mars 2008 à 21h14

photo de kaio
Salut,

J'ai corrigé le code PHP dans l'article. La variable $_FILES['Filedata'] n'existe pas quand tu charges ta page php ce qui provoque cette erreur.
Donc tu dois mettre :


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


...


Si tu écris le résultat dans un fichier texte tu verras que le tableau $_FILES contient cela :

Array
(
[Filedata] => Array
(
[name] => photo.jpg
[type] => application/octet-stream
[tmp_name] => c:/wamp/tmpphp6F.tmp
[error] => 0
[size] => 49401
)

)



Ce Filedata existera donc seulement quand tu auras uploadé ton fichier.

J'ai également modifié le fichier swf. Il envoie maintenant les données vers la page upload.php.
Tu peux modifier ce nom et les autres paramètres en éditant le fichier .fla


++

Onyrik13 mars 2008 à 11h47


merci bien, tout fonctionne.

J'ai juste un probleme lorsque j'envoi un fichier qui depasse 2mo. le transfert sous flash s'execute correctement mais l'image n'est pas uploadé sur le serveur.

Ou indiquer la taille maximale limite ?

(édition: 13 mars 2008 à 11h49)

Kaio13 mars 2008 à 19h21

photo de kaio
Cette limitation vient de la directive upload_max_filesize dans le fichier de configuration php.ini de ton serveur web.

Par défaut elle est limitée à 2 Mo.

Onyrik16 mars 2008 à 22h49


merci c'est exactement ce que je cherchais.

J'ai encore une dernière question :

comment donner une valeur d'un echo de la page upload.php au name_txt.text du script flash ?

par exemple si dans ma page php j'ai : echo "erreur" pour l'afficher dans la texbox de mon script flash je devrais ecrire name_txt.text = load("upload.php"); ?!

merci de m'éclairer...

(édition: 16 mars 2008 à 22h49)

Onyrik19 mars 2008 à 11h05


Désolé d'insister.... mais personne n'a eu une idée ?

Peut être je me fais mal comprendre...

Kaio19 mars 2008 à 20h41

photo de kaio
Salut,
Si j'ai bien compris ce que tu veux faire, c'est à dire récupérer des données depuis un script php pour les utiliser dans ton application flash, tu peux essayer cette fonction :

// charger des variables depuis PHP
myData = new LoadVars()
myData.load("http://127.0.0.1/upload/upload.php?start")
myData.onLoad = function(succes){
if(succes){
name_txt.text = this.txt
} else trace("Error loading data")
}



Dans mon fichier upload.php, j'ai écris ça :


<?php function envoi($var$val)

{

    echo 
$var."=".utf8_encode($val);

}



if(isset(
$_GET['start']))

{

    
envoi('txt','contenu PHP');

    die();

}  
?>



Evidemment tu peux envoyer plusieurs variables, en faisant une boucle dans la fonction envoi()


Avec tout ça, lorsque tu lances ton appli flash dans ta page html, elle se charge avec la valeur "contenu PHP"...

++

Onyrik20 mars 2008 à 08h19


oui c'est exactement ce que je veux faire mais j'ai comme une erreur a cause du $_FILES, est-ce le fait que je melange du POST et du GET ??


Voici mon code de la page "upload.php" :

<?PHP

$target_path = "uploads/";
$name_file = $_FILES['Filedata']['name'];

$target_path = $target_path . basename( $name_file);


function envoi($var, $val)
{

echo $var."=".utf8_encode($val).$i;

}
if(move_uploaded_file($_FILES['Filedata']['tmp_name'], $target_path))

{

if(isset($_GET['start']))
{
envoi('txt',' envoi reussi');
die();
}

}

else

{

envoi('txt','erreur');
die();

} ?>



et mon code flash....

myData = new LoadVars()
myData.load("upload.php?start")
myData.onLoad = function(succes){
if(succes){
name_txt.text = this.txt
} else trace("Error loading data")
}



(édition: 20 mars 2008 à 12h24)

Onyrik20 mars 2008 à 12h24


Enfait j'aimerais tout passer en post...

(édition: 20 mars 2008 à 12h25)

Kaio20 mars 2008 à 13h28

photo de kaio
Que tu fasse une requête en POST ou GET ne changera rien au problème. Si tu y tiens vraiment, il doit y avoir un paramètre dans la fonction load() de flash que tu peux mettre à 'GET' ou 'POST'.

Une fois que le fichier est uploadé sur le serveur, en fait tu voudrais vérifier via PHP qu'il a bien été envoyé, et l'afficher dans l'application flash, si j'ai bien compris.

Il te suffit de rajouter une ligne de code dans la source flash pour modifier cette fonction:

// Action when upload is finished
list_obj.onComplete = function(){
//name_txt.text = "Le colis est livré.";
// verification sur le serveur via PHP
myData.load("http://127.0.0.1/upload/upload.php?verif="+name_txt.text)
my_pb._visible = false;
}



Dans ta page php, tu rajoute également la fonction qui vérifie l'existence du fichier sur le serveur local, ce qui donne :


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

{

   
$uploadDir "./";

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

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

}



function 
envoi($var$val)

{

    echo 
$var."=".utf8_encode($val);

}



if(isset(
$_GET['start']))

{

    
envoi('txt','Sélectionner votre fichier');

    die();

}



if(isset(
$_GET['verif']))

{

    
// on verifie l'existence du fichier 

    
if(file_exists(utf8_decode($_GET['verif'])))

    {
envoi('txt','Le colis est arrivé.');}

    die();

}  
?>



++

(édition: 20 mars 2008 à 13h33)

Forums » Webmaster 1 2 Répondre