Probleme de code. Pourquoi????

Signaler
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007
-
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007
-
Bonjour tout le monde,



alors voila mon probleme: j'essaye d'envoyer un fichier dans un
répertoire, et j'ai l'erreur Undefine index... Je comprend pas car le
code est copier coller d'une autre partie de mon site qui marche
parfaitement. Donc si quelqu'un a une explication, ce serait gentil.



Voila le code:







$repertoireDestination = "Concours/test/";




$nomDestination =
$_FILES["xls"]["name"]; //erreur ici




// Si un fichier comporte une
extension .php ou .php3


// on le renome en *.txt pour des
raisons de sécurité


if (eregi(".php",
$nomDestination)) {



$nomDestination .= ".txt";

}




if
(is_uploaded_file($_FILES["xls"]["tmp_name"])) { // et ici


if
(rename($_FILES["xls"]["tmp_name"],




$repertoireDestination.$nomDestination)) {

}


Merci

8 réponses

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



tu n'as pas uploadé de fichier donc ça n'existe pas, c'est normal.



if(!empty($_FILES['xls']['tmp_name']))

{

//ton code

}

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

J'ai plus d'erreur mais l'envoie ne marche pas... Je comprend pas
pourquoi la, j'ai le meme code dans une autre page et ca marche
parfaitement!
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Bah tu n'uploades pas ton fichier dans ce cas... En même temps nous dire que ça "marche pas" sans donner de code ni d'erreur...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Bah le code tu l'as, il est dans le premier message, et il n'y a pas
d'erreur. C'est juste que le fichier n'est pas envoyé, mais je sais pas
pourquoi
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
mais il faut le code xhtml du formulaire...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Voila tout le code!

Sinon j'ai pas mis le if(!empty($_FILES['xls']['tmp_name'])) parce que
l'envoie ne peut pas se faire si le champs xls est vide (fonction
javascript)



<form method="post" action="prochain_concours.php" name="fichier" onSubmit="return verifyform()">

<center>Concours <select name="concours">


<option
title="selected">S&eacute;lectionner...</option>

<?php

$req =
mysql_db_query("$sql_bdd","SELECT DISTINCT nom FROM t_albums ORDER BY
nom DESC");

while ($rec=mysql_fetch_array($req))

{

$date=$rec[0];


echo
"<option>".$date."</option>";

} ?>

</select></center>


<center>Fichier excel : </center>





<center></center>

</form>



<?php



if (isset($_POST["envoyer"]))

{

if($_POST["envoyer"] == "Envoyer")

{


$date_concours =
$_POST['concours'];




$repertoireDestination =
"Concours/".$date_concours."/";




$nomDestination =
$_FILES["xls"]["name"];




// Si un fichier comporte une
extension .php ou .php3


// on le renome en *.txt pour des
raisons de sécurité


if (eregi(".php",
$nomDestination)) {



$nomDestination .= ".txt";

}




if
(is_uploaded_file($_FILES["xls"]["tmp_name"]))

{



if (rename($_FILES["xls"]["tmp_name"],




$repertoireDestination.$nomDestination)) {



}



}

else

{


echo "Le fichier n'a pas &eacute;t&eacute;
envoy&eacute;.";

die;



mysql_close();

}


echo "Le fichier a
bien &eacute;t&eacute; envoy&eacute;.
";



}

} // fin du if (isset($_POST["envoyer"]))
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Tu as oublié enctype="multipart/form-data" dans les attributs du formulaire...

Ensuite on te donne une condition à rajouter tu ne la mets pas sous prétexte d'une vérification en javascript (n'importe qui peut donc faire sauter ta vérification). Ensuite essaie de coder ça en XHTML.

Voici le code corrigé :

<form method="post" action="prochain_concours.php" enctype="multipart/form-data">
<label for="concours">Concours :</label><select name="concours" id="concours">
<option selected="selected">Sélectionner...</option>
<?php
mysql_connect('hote','user','passe');
mysql_select_db('base');
$req = mysql_query('SELECT DISTINCT nom FROM t_albums ORDER BY nom DESC');
mysql_close();
while ($rec=mysql_fetch_row($req))
{
echo '<option>',$rec[0],'</option>';
}
?>
</select>
<label for="fe">Fichier excel :</label>




</form>





<?php

if (isset($_POST['envoyer']))
{
$date_concours = $_POST['concours'];
$repertoireDestination = 'Concours/'.$date_concours.'/';

$nomDestination = $_FILES['xls']['name'];

if (str_pos('.php', $nomDestination)) {
$nomDestination .= '.txt';
}
//etc...
}


Et encore ta vérification est bancale, tu peux mettre des caractères spéciaux dans les noms de fichiers, etc... y'a pas mal de failles de sécurité dans ce script.
Messages postés
279
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
6 août 2007

Je te remercie beaucoup, c'etait bien le enctype. Sinon
pour les caracteres speciaux je le sais, sauf que le fichier ne
comportera jamais de caracteres speciaux normalement, donc c'est pour
ca que je fais pas la vérification, et pour la vérif en javascript,
c'est vrai qu'on peut la faire sauter donc je vais mettre le code par
précaution.



Sinon j'ai un autre souci de code, cette fois-ci dans l'affichage de ce fichier uploadé.

Voila mon code:



if (is_dir($nomRepertoire))

{

$dossier = opendir($nomRepertoire);

while ($Fichier = readdir($dossier))

{

if ($Fichier != "." AND $Fichier != "..")

{

// Récupération de l'extension du fichier

$format = strrchr($Fichier,".");



//
Vérification du
format


if ($format == ".xls")

{


echo "<center>, \";

echo
\"----
T&eacute;l&eacute;charger au format
excel
</center>";

}

else

{


echo "<center>Il n'y a aucune informations
suppl&eacute;mentaires pour le
moment.</center>";

}

}

}

closedir($dossier);

}




Donc si le fichier porte une extension en xls cela me l'affiche bien, sauf que ca m'affiche Il n'y a aucune informations suppl&eacute;mentaires pour le moment. autant
de fois ou il y a d'autres fichiers dans le répertoire, ce qui est
logique vu qu'on est dans la boucle while. Mais comment je pourrait
faire pour palier à ce probleme, moi je voudrai que des qu'il y a un
fichier excel ca me l'affiche et s'il y a pas de fichier excel ca
m'affiche cette phrase, et une seule fois bien sur



Merci