un "notice" à effacer

Eléphant du PHP | 250 Messages

05 mars 2010, 17:10

Bonjour,

Je suis sur un listing de mon bouquin et en vérifiant mon code je n'ai pas fait d'erreur. En recherchant sur le forum, j'ai trouvé que je pouvais désactiver le error_reporting = E_ALL ^ E_NOTICE, mais c'est pas bien.

J'ai aussi trouvé la solution de mettre des @ là ou ya ça me gène, mais c'est s'en doute pas bien aussi. Mais j'aime bien les choses pas jolie jolie :mrgreen:

Donc, j'ai cette petite erreur :
Notice: Undefined index: fichier in C:\UwAmp\www\Php\2Jean Engels\9formulaires3.php on line 26

Notice: Undefined index: fichier in C:\UwAmp\www\Php\2Jean Engels\9formulaires3.php on line 29
 <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
   <fieldset>
    <input type="hidden" name="MAX_FILE_SIZE" value="900000"/>
    <legend>Transfert de fichier</legend>
    <input type="file" name="fichier" accept="image/jpeg" />
    <input type="submit" value="Uploader"/>
    </fieldset>
   </form>
<?php

if (isset($_FILES['fichier']))
{
    echo'Taille max authorisée :'.$_POST['MAX_FILE_SIZE'].' octets<br/>';
    echo'clés & valeurs du tableau: ';
    foreach($_FILES['fichier'] as $cle=>$val)
    {echo '<ul><li>'.$cle.' = '.$val.'</li></ul>';}
  
}
$result=move_uploaded_file($_FILES['fichier']['tmp_name'],'imagephp.jpg');  (erreur ici)
if ($result==true)
{echo '<br/><big>Transfert Ok!</big><br/>';}
else {echo'<br/> Erreur de tranfert ! n°:'.$_FILES['fichier']['error'];}   (erreur ici)

?>
Je pense que ça vient que ma variable $_FILES['fichier'] est vide car quand je réalise l'upload les "notices" s'en vont.

merci
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

05 mars 2010, 17:20

Quand tu affiches la page sans poster, eh bien il n' existe aucune variable $_POST.

Donc, faut les vérifier avec un isset():
(de préférence avant tout autrechose)
if (isset($_POST['MAX_FILE_SIZE']))
De plus ton accolade qui ferme ton premier if (celui avec les isset()) est bien trop haute à mon avis...
Sinon effectivement, tes variables pourront ne pas être définis étant en dehors de ton isset()...

Et ton move_uploaded_file s'exécuter malgré qu'aucun poste ne soit effectué...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

05 mars 2010, 17:45

Alors donc c'est une question d'emplacement:
if (isset($_FILES['fichier']))
{
    echo'Taille max authorisée :'.$_POST['MAX_FILE_SIZE'].' octets<br/>';
    echo'clés & valeurs du tableau: ';
    foreach($_FILES['fichier'] as $cle=>$val)
    {echo '<ul><li>'.$cle.' = '.$val.'</li></ul>';}
$result=move_uploaded_file($_FILES['fichier']['tmp_name'],'imagephp.jpg');
if ($result==true)
{echo '<br/><big>Transfert Ok!</big><br/>';}
else {echo'<br/> Erreur de tranfert ! n°:'.$_FILES['fichier']['error'];}
}
?>
Là ça fonctionne bien. Ya aucun message.
Merci bien :wink:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

05 mars 2010, 17:57

Sauf que tu ne fais aucune vérification isset() sur $_POST['MAX_FILE_SIZE'].

Tu me diras, cela n'est pas grave, car je te conseille vivement de l'enlever de ton formulaire.
Donc enlève ceci:
<input type="hidden" name="MAX_FILE_SIZE" value="900000"/>
Car un utilisateur mal intentionné pourrait facilement modifier cette donnée.

Tu peux par exemple utiliser une constante:
define('MAX_FILE_SIZE' 900000);
De plus tu ne fais aucune vérification de la taille du fichier dans ton script.
Tu devrais donc ensuite comparer la taille du fichier avec la constante MAX_FILE_SIZE.
if ($_FILES['fichier']['size'] <= MAX_FILE_SIZE) // si la taille est inférieur au maximum autorisé
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Mammouth du PHP | 568 Messages

05 mars 2010, 18:01

Et utiliser

ini_set ( "upload_max_filesize", "20M");

C'est pas mieux?

Mammouth du PHP | 985 Messages

05 mars 2010, 18:04

Si aussi, le principal ici, est de ne pas se fier à un champ INPUT pour la taille maximale du fichier.

Puis la modification des php.ini n'est pas toujours possible.

De plus si tu as plusieurs scripts Upload ou plusieurs types de fichiers a uploader suivant une taille définie pour chaque type, au lieu de modifier le php.ini au risque de faire bugguer l'upload d'un autre utilisateur....
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

05 mars 2010, 18:40

Ha oui effectivement on peut bidouiller le Hidden, c'est marqué dans la suite de mon livre.

Juste que le code n'était pas bien tourné et ça m'a donné ces "notices" alors je me suis affolée.

Donc le Hidden, je le supprime, faut tout le temps se remettre en question, c'est pénible :roll:

J'ai modifié:
define('MAX_FILE_SIZE',90000);//constante taille max upload
if (isset($_FILES['fichier']) && $_FILES['fichier']['size'] <= MAX_FILE_SIZE)
{
    echo'Taille max authorisée :'.$_FILES['fichier']['size'].' octets<br/>';
    echo'clés & valeurs du tableau: ';
    foreach($_FILES['fichier'] as $cle=>$val)
    {echo '<ul><li>'.$cle.' = '.$val.'</li></ul>';}
$result=move_uploaded_file($_FILES['fichier']['tmp_name'],'imagephp.jpg');
if ($result==true)
{echo '<br/><big>Transfert Ok!</big><br/>';}
else {echo'<br/> Erreur de tranfert ! n°:'.$_FILES['fichier']['error'];}
}
J'ai juste un petit hic, si la taille du fichier est >90 000 mon else "erreur $_FILES...[error] ne s'affiche pas. Et si je le met à l'extérieur de mon IF, je vais ravoir mes "notices" #-o
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

05 mars 2010, 18:48

Bon désolé, en fait tu peux le laisser, car la majorité des navigateurs et php sont censés le prendre en compte.
Donc cela peut aider.

La seule chose a savoir, c'est que ce n'est pas une valeur à laquelle il faut te fier.

Donc ensuite:
Si tu peux modifier ton fichier php.ini, et bien fais comme disait Yosh mais en mettant ta propre valeur maximale de taille.

Si tu ne peux pas le modifier, et bien prends exemple sur mon post, pour vérifier la taille dans ton script, mais en utilisant une constante et donc en utilisant pas la valeur du champ hidden..
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

05 mars 2010, 19:00

Le ini_set ( "upload_max_filesize", "20M");

ça modifie la valeur par defaut du php.ini ?

J'ai essayé : ini_set ( "upload_max_filesize", "5K");

mais ça n'a pas changer dans mon Phpinfo() :
upload_max_filesize 2M 2M
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 250 Messages

05 mars 2010, 19:13

j'ai essayé comme ça : ( "upload_max_filesize", "90000"); ou ( "upload_max_filesize", "0.9M");

ça fait rien du tout !

Donc c'est inutile de modifier cette directive. Le PHP est plus judicieux.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

05 mars 2010, 19:19

Oui,
ini_get() pour lire le php.ini
http://php.net/manual/fr/function.ini-get.php

in_set() pour modifier le php.ini
http://php.net/manual/fr/function.ini-set.php

Tu peux tester:
<?php
echo 'Ancienne valeur: ' . ini_get('upload_max_filesize') . '<br>';
ini_set('upload_max_filesize', '20M');
echo 'Nouvelle valeur: ' . ini_get('upload_max_filesize');
?>
PS:
900000 c'est beaucoup beaucoup trop :wink:


http://www.manuelphp.com/php/ini.upload ... lesize.php
En octets, donc à moins que je me montre mais 90000 = 90M
Et donc: 900000 = 900M
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

05 mars 2010, 19:45

oui mais chez moi, ça ne marche pas.
Je crois que ça vient de ça : http://www.php.net/manual/fr/configuration.changes.php
Soit le PHP est executer via Apache avec un module ou en CGI ,j'espère que jdit pas de conneries :roll:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

05 mars 2010, 19:49

Non :wink:

Donc , tu pourrais peut-être utiliser le fichier htaccess mais bon, autant ne pas se compliquer la vie.
Fais ta vérification en php comme j'expliquais dans mes premiers posts, ensuite il faut toujours tester, tu mets un petit maximum et tu essayes d'envoyer plus gros, dans un premier temps sans la balise hidden.
Quand tout fonctionne bien, tu remets la balise hidden avec la même valeur que ta vérification en php :wink:

[EDIT]
Désolé je corrige:
Tu laisses la balise hidden mais pour bien tester ta vérification en php, tu mets une plus grosse valeur dans la balise hidden.
Ensuite t'essayes d'uploader un fichier plus gros que ta vérification php mais plus petit que ton hidden.
Quand tout fonctionne, remets la même valeur dans la balise hidden.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

05 mars 2010, 20:04

oui, je vais pas trop me compliquée la vie sinon j'avancerai jamais :mrgreen:

Merci bien, je prends note :wink:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

05 mars 2010, 20:54

Tout en gardant à l'esprit que si tu désires permettre l'upload de fichiers avec des tailles plus importantes que celle définit dans ton fichier php.ini, tu seras obligé dans ce cas de modifier le php.ini pour que cela fonctionne.

Le plus simple à mon avis serait de demander au support de ton hébergeur si cela est possible et comment...

Mais dans la majorité des cas, cela n'est pas nécessaire et pas forcément une bonne idée.
En général, cela ce limite plutôt a diminuer cette valeur en fonction des fichiers qui sont censés être uploadés.
Et donc dans ce cas, la méthode que je te montrais plus haut, fonctionnera :wink:

PS:
Sinon je n'avais pas vue mais il y a un tutoriel intéressant ici:
faq-tutoriels/upload-fichiers-par-http-t545.html
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.