Remplir une base

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Remplir une base

Re: Remplir une base

par cmoi » 22 déc. 2009, 17:19

if(isset($_FILES['photo']))      $photo=$_FILES['photo'];
else      $photo="";
$uploaddir = '/www/upload/';
$uploadfile = $uploaddir . basename($_FILES['photo']['name']);
if (empty($_FILES)) {
   echo 'Rien !';
}
else {
   echo '<pre>';
   var_dump($_FILES);
   echo '</pre>';
}
echo '<pre>';
if (move_uploaded_file($_FILES['photo']['tmp_name'], $uploadfile)) {
    echo "Le fichier est valide, et a été téléchargé
           avec succès. Voici plus d'informations :\n";
} else {
    echo "Attaque potentielle par téléchargement de fichiers.
          Voici plus d'informations :\n";
}

echo 'Voici quelques informations de débogage :';
print_r($_FILES);

echo '</pre>';

Voici le code complet ; j'ai mis un / mais cela ne change rien.

Re: Remplir une base

par macgawel » 22 déc. 2009, 16:55

Warning: move_uploaded_file(www/upload/n3.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /homez.99/sudnetwo/www/add.php on line 67
Y'a du progès :? Maintenant, tu uploades bien le fichier...
A priori, je dirais que tu essaye de créer ton fichier dans un répertoire qui n'existe pas.
Tu n'as pas mis de '/' au début de ta chaine www/upload. du coup, c'est un chemin relatif.
Il y a un répertoire www dans le répertoire d'éxécution de ton script ?

Si on respecte les "normes" habituelles, www est à la racine. Du coup, il faudrait faire :
$uploaddir = '/www/uploads/';

Re: Remplir une base

par cmoi » 22 déc. 2009, 16:04

j'ai modifié le formulaire ainsi
 <input type="hidden" name="MAX_FILE_SIZE" value="500000" /><input type="file" name="photo" size="20" value="photo">
voici le nouveau message !
array(1) {
["photo"]=>
array(5) {
["name"]=>
string(6) "n3.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(14) "/tmp/phpGrpZjp"
["error"]=>
int(0)
["size"]=>
int(78443)
}
}



Warning: move_uploaded_file(www/upload/n3.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /homez.99/sudnetwo/www/add.php on line 67



Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpGrpZjp' to 'www/upload/n3.jpg' in /homez.99/sudnetwo/www/add.php on line 67

Attaque potentielle par téléchargement de fichiers.
Voici plus d'informations :
Voici quelques informations de débogage :Array
(
[photo] => Array
(
[name] => n3.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpGrpZjp
[error] => 0
[size] => 78443
)

)

Vos infos on été modifiées.

Problème ligne 67 ??
la voici et suivantes :
if (move_uploaded_file($_FILES['photo']['tmp_name'], $uploadfile)) {
    echo "Le fichier est valide, et a été téléchargé
           avec succès. Voici plus d'informations :\n";
} else {
    echo "Attaque potentielle par téléchargement de fichiers.
          Voici plus d'informations :\n";
}

echo 'Voici quelques informations de débogage :';
print_r($_FILES);

Re: Remplir une base

par macgawel » 22 déc. 2009, 15:26

le fichier téléchargé fait 76 ko pour 3000 autorisé dans le formulaire !
Je ne vois pas de ligne limitant la taille à 3000 dans ton formulaire (premier post).

Tu peux essayer avec un fichier de moins de 20 ko ?
Sinon, tu as un truc de ce genre, dans ton formulaire ?
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />

Re: Remplir une base

par cmoi » 22 déc. 2009, 12:51

le fichier téléchargé fait 76 ko pour 3000 autorisé dans le formulaire !

Re: Remplir une base

par macgawel » 22 déc. 2009, 12:45

Voici ce que j'obtiens

Code : Tout sélectionner

array(1) { ["photo"]=> array(5) { ["name"]=> string(6) "n3.jpg" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(2) ["size"]=> int(0) } }
Code erreur => 2.
Explication du manuel PHP :
UPLOAD_ERR_FORM_SIZE
Valeur : 2. Le fichier téléchargé excède la taille de MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML.
Tu envoies un fichier trop volumineux !

Re: Remplir une base

par cmoi » 22 déc. 2009, 12:24

Voici ce que j'obtiens

Code : Tout sélectionner

array(1) { ["photo"]=> array(5) { ["name"]=> string(6) "n3.jpg" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(2) ["size"]=> int(0) } } Attaque potentielle par téléchargement de fichiers. Voici plus d'informations : Voici quelques informations de débogage :Array ( [photo] => Array ( [name] => n3.jpg [type] => [tmp_name] => [error] => 2 [size] => 0 ) ) Vos infos on été modifiées.

Re: Remplir une base

par macgawel » 22 déc. 2009, 12:09

Mets ça au début de ton script, c'est un début pour identifier le problème...
// On commence par regarder le contenu de $_FILES pour debuggage
// A faire avant tout traitement...
if (empty($_FILES)) {
   echo 'Rien !';
}
else {
   echo '<pre>';
   var_dump($_FILES);
   echo '</pre>';
}

Re: Remplir une base

par cmoi » 22 déc. 2009, 12:01

J'ai remplacé ['userfile'] par ['photo'], mais j'en suis au même point !
if(isset($_FILES['photo']))      $photo=$_FILES['photo'];
else      $photo="";
$uploaddir = 'www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['photo']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['photo']['tmp_name'], $uploadfile)) {
    echo "Le fichier est valide, et a été téléchargé
           avec succès. Voici plus d'informations :\n";
} else {
    echo "Attaque potentielle par téléchargement de fichiers.
          Voici plus d'informations :\n";
}

Re: Remplir une base

par shizu » 21 déc. 2009, 17:13

Tu devrais essayer avec $_FILES['photo'] plutot que $_FILES['userfile'] (photo étant le nom de ton champ d'upload)

Les copié/collé c'est bien mais faut bien vérifié ^^

Re: Remplir une base

par macgawel » 21 déc. 2009, 16:02

Tu devrais essayer d'afficher les erreurs :
echo $_FILES['userfile']['error'];
Tu trouveras ICI la signification des différents messages...

Re: Remplir une base

par cmoi » 21 déc. 2009, 15:48

j'ai modifié le fichier php ainsi
if(isset($_FILES['photo']))      $photo=$_FILES['photo'];
else      $photo="";
$uploaddir = 'www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "Le fichier est valide, et a été téléchargé
           avec succès. Voici plus d'informations :\n";
} else {
    echo "Attaque potentielle par téléchargement de fichiers.
          Voici plus d'informations :\n";
}

echo 'Voici quelques informations de débogage :';
print_r($_FILES);

echo '</pre>';
et le formulaire

Code : Tout sélectionner

<input type="hidden" name="MAX_FILE_SIZE" value="30000" /><input type="file" name="photo" size="20" value="photo">
Mais je n'ai toujours rien de mieux que "array" dans ma base et strictement rien dans le répertoire "upload" créé.

Et voici ce qui s'affiche à l'écran

Code : Tout sélectionner

Attaque potentielle par téléchargement de fichiers. Voici plus d'informations : Voici quelques informations de débogage :Array ( [photo] => Array ( [name] => n3.jpg [type] => [tmp_name] => [error] => 2 [size] => 0 ) ) Vos infos on été modifiées.

Re: Remplir une base

par macgawel » 21 déc. 2009, 15:20

Merci pour le lien, mais franchement, j'ai rien compris !!
Le code que tu m'indiques je dois le marquer où ? Je dois renseigner tous les champs ? Le chemin ... vers où ça ?
Dans la page qu'il te donne, il y a un lien vers Chargements de fichiers par méthode POST, qui est plus clair.

Côté client : je remplis mon formulaire, en remplissant le champ "file". J'envoie le formulaire (et le fichier).
Côté serveur : je stocke le fichier envoyé dans un répertoire temporaire. La variable $_FILES contient les informations nécessaires pour le traitement :
- Le nom original du fichier
- Le nom temporaire
- La taille
- Le type MIME

Re: Remplir une base

par cmoi » 21 déc. 2009, 15:03

C'est parce que $_FILES est un tableau :
Array
        (
            [name] => Le nom du fichier
            [type] => le type mime du fichier
            [tmp_name] => le chemin vers où a été uploadé le fichier (temporaire)
            [error] => code erreur
            [size] => la taille du fichier
        )
Plus d'infos http://www.php.net/manual/fr/reserved.v ... .files.php
Merci pour le lien, mais franchement, j'ai rien compris !!
Le code que tu m'indiques je dois le marquer où ? Je dois renseigner tous les champs ? Le chemin ... vers où ça ?

Re: Remplir une base

par shizu » 21 déc. 2009, 13:14

C'est parce que $_FILES est un tableau :
Array
        (
            [name] => Le nom du fichier
            [type] => le type mime du fichier
            [tmp_name] => le chemin vers où a été uploadé le fichier (temporaire)
            [error] => code erreur
            [size] => la taille du fichier
        )
Plus d'infos http://www.php.net/manual/fr/reserved.v ... .files.php