traitement de formulaire, c'est à n'y rien comprendre....

ViPHP
ViPHP | 3607 Messages

25 oct. 2006, 18:32

Bonjour!
alors pour aujourd'hui, J'ai chopé la migraine :lol: !
Bon je vous explique pourquoi, j'essaye depuis ce matin de faire un script d'upload de fichiers sur mon serveur, et je ne comprend pas pourquoi, je n'arrive jamais dans la partie de traitement du formulaire...

Code : Tout sélectionner

<?php if(isset($_POST['envoi'])){ echo "ha"; } echo '<?xml version="1.0" encoding="iso-8859-2"?>'; echo "\n"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" /> <link rel="stylesheet" type="text/css" href="./css/styles.css" media="screen" /> </head> <body> <h3>Upload</h3> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data"> <label>Photo 1: <input type="file" name="img1" id="img1" /></label> <input type="hidden" name="MAX_FILE_SIZE" value="1048576" /> <input type="submit" name="envoi" value="Envoyer" /> </form> </body> </html>
bon voilà la page simplifiée, je n'arrive jamais à voir mon "ah"...
je comprend pas comment faire
merci d'avance

Eléphant du PHP | 193 Messages

25 oct. 2006, 18:42

Sauf erreur, c'est tout simplement que ton formulaire n'envoie pas de variable "envoi" (tu as associé "envoi" au bouton "Envoyer"). Teste plutôt $_POST['MAX_FILE_SIZE'] pour voir.

ViPHP
ViPHP | 3607 Messages

26 oct. 2006, 11:03

grrr je ne comprend rien, j'ai fait ce que tu m'as conseillé, et rient, toujours rien...
Dans le doute, je vais mettre ma page "non-simplifiée":
<?php
session_start();
include('./include/fonctions.php');
if(!user_ok($_SESSION['user']['date_connec'])){
	header('Location: auth.php');
	exit();
}

include('./config/config.inc.php');
include('./include/mysql.classe.php');


function upload($index,$destination,$maxsize=FALSE,$extensions=FALSE)
{
   //Test1: fichier correctement uploadé
     if (!isset($_FILES[$index]) OR $_FILES[$index]['error'] > 0) {
        echo "Erreur de transfert du fichier ".$index; return false;
    }
   //Test2: taille limite
     if ($maxsize !== FALSE AND $_FILES[$index]['size'] > $maxsize) {
        echo "La taille du fichier ".$index." est trop importante"; return false;
    }
   //Test3: extension
     $ext = substr(strrchr($_FILES[$index]['name'],'.'),1);
     if ($extensions !== FALSE AND !in_array($ext,$extensions)) {
        echo "Le type de fichier n'est pas autorisé"; return false;
    }
   //Déplacement
     return move_uploaded_file($_FILES[$index]['tmp_name'],$destination);
}


$connec=new SqlConnect();
$sql="SELECT * FROM `users` WHERE `id`=".$_SESSION['user']['id'];
$connec->query($sql);
$donnees=array();
while($value=$connec->fetchNextRow(MYSQL_ASSOC)) array_push($donnees,$value);


if(isset($_POST['user'])){
echo "ha";
$upload=upload('img1',$donnees[0]['repertoire_photos_big'].time().'.jpg',15360, array('jpg','jpeg') );
        print_r($upload);
        if ($upload) "Upload img1 réussi!<br />";
        else "Upload img1 échoué!<br />";
}
echo '<?xml version="1.0" encoding="iso-8859-2"?>';
echo "\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
	<link rel="stylesheet" type="text/css" href="./css/styles.css" media="screen" />
	<title>Upload Islande - Mon compte</title>
</head>
<body>
	<div id="center">
		<h1>Mon compte</h1>
		<div id="content">
            <h2><a href="galerie.php?userid=<?php echo $_SESSION['user']['id'];?>" title="accéder à ma galerie">Ma galerie</a>&nbsp;-&nbsp;<a href="deco.php" title="déconnexion">Déconnexion</a>&nbsp;-&nbsp;Gestion de mes images</h2>
            <div id="contenu">
                <h3>Upload</h3>
                <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data">
                    
                <?php
                for($i=1;$i<21;$i++){
                    echo "<label>Photo ".$i.": <input type=\"file\" name=\"img".$i."\" id=\"img".$i."\" /></label><br />";
                }
                ?>
                    <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
                    <input type="hidden" name="user" value="<?php echo $_SESSION['user']['id'];?>" />
                    <input type="submit" name="envoi" value="Envoyer" />
                </form>
            </div>
        </div>
	</div>
</body>
</html>
bon et bien voilà, je m'en remet encore à vous parce que là ça commence à me ....!
merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 oct. 2006, 11:21

Un petit print_r($_POST) pour voir ce qu'il contient ? (un au début de ta page et un au niveau de ton if pour voir si cela change quelque chose :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

26 oct. 2006, 11:51

bon j'ai fait le test, ça ne change rien que se soit au début de la page, ou juste avant le if:
printr du début:
Array ( )
printr du milieu:
Array ( )
bouhou.... :cry: pourquoi qu'il est vide mon $_POST ...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 oct. 2006, 11:57

T'as bien cliqué sur le bouton ? (ouais je sais, c'est une question bête, mais bon... je pourrais aussi te demander de vérifier si ton ordi est allumé ;))

T'as quelle version de php ?
print_r($HTTP_POST_VARS) :?:
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

26 oct. 2006, 12:03

oui j'ai cliqué sur le bouton...
oui mon ordi est allumé, oui le petit ione de wamp est tout blanc
j'ai php5 et le print_r($HTTP_POST_VARS) me donne aussi un array vide
Sinon j'ai restesté d'autres script avec fomulaires en local, et ça passe...
par contre j'ai pas déjeuné ce matin, c'est peut-être ça ? :roll:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 oct. 2006, 12:14

QUOI ?! :shock:
T'as pas mangé ce matin ?! T'es pas un peu fou !! Tu sais bien que c'est le repas le plus important de la journée !!! ... hum...

le print_r au début tu l'as essaye avant le session_start() ? (quitte à avoir un message d'erreur)

si tu changes le "method" du formulaire en get (tant pis pour le fichier, c'est juste pour tester) et que tu regardes ce que content $_GET, même résultat ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

26 oct. 2006, 13:57

pardon je savais pas je le referai plus :oops:
sinon pour mon problème, je croit que je tient une piste, je viens de mettre en commentaire la partie qui génère les input de type file, et paf, toutes mes $_POST et autres HTTP_POST_VAR sont remplis, donc je vais regarder ce qui va pas dans les input généré,
voici le code généré:

Code : Tout sélectionner

<label>Photo 1: <input type="file" name="img1" /></label><br /> <label>Photo 2: <input type="file" name="img2" /></label><br /> etc...

ViPHP
ViPHP | 3607 Messages

26 oct. 2006, 16:23

bon décidément, j'ai beau chercher, je trouve, j'ai essayer de changer/enlever l'id, et ça ne fait rien de plus...
quelqu'un aurait une idée?

ViPHP
ViPHP | 3607 Messages

29 oct. 2006, 22:10

bon je me décide à faire un petit rappel... comme quoi mon problème n'est toujours pas résolu.... (c'est un UP ça non... [-X :-# )

ViPHP
ViPHP | 3607 Messages

04 nov. 2006, 12:28

bon alors me revoilà avec un code le plus simple possible:
<?php


echo "printr du début";
print_r($_POST);

function upload($index,$destination,$maxsize=FALSE,$extensions=FALSE)
{
   //Test1: fichier correctement uploadé
     if (!isset($_FILES[$index]) OR $_FILES[$index]['error'] > 0) {
        echo "Erreur de transfert du fichier ".$index; return false;
    }
   //Test2: taille limite
     if ($maxsize !== FALSE AND $_FILES[$index]['size'] > $maxsize) {
        echo "La taille du fichier ".$index." est trop importante"; return false;
    }
   //Test3: extension
     $ext = substr(strrchr($_FILES[$index]['name'],'.'),1);
     if ($extensions !== FALSE AND !in_array($ext,$extensions)) {
        echo "Le type de fichier n'est pas autorisé"; return false;
    }
   //Déplacement
     return move_uploaded_file($_FILES[$index]['tmp_name'],$destination);
}


if(isset($_POST['user'])){
echo "ha";
echo $donnees[0]['repertoire_photos_big'].time().'.jpg';
$upload = upload('img1',$donnees[0]['repertoire_photos_big'].time().'.jpg',15360, array('jpg','jpeg') );
        print_r($upload);
        if ($upload) "Upload img1 réussi!<br />";
        else "Upload img1 échoué!<br />";
}
echo '<?xml version="1.0" encoding="iso-8859-2"?>';
echo "\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
	<link rel="stylesheet" type="text/css" href="./css/styles.css" media="screen" />
	<title>Upload Islande - Mon compte</title>
</head>
<body>
	<div id="center">
		<h1>Mon compte</h1>
		<div id="content">
            <h2><a href="galerie.php?userid=<?php echo $_SESSION['user']['id'];?>" title="accéder à ma galerie">Ma galerie</a>&nbsp;-&nbsp;<a href="deco.php" title="déconnexion">Déconnexion</a>&nbsp;-&nbsp;Gestion de mes images</h2>
            <div id="contenu">
                <h3>Upload</h3>
                <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data">
                    <input type="file" name="img1" />
                    <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
                    <input type="hidden" name="user" value="<?php echo $_SESSION['user']['id'];?>" />
                    <input type="submit" name="envoi" value="Envoyer" />
                </form>
            </div>
        </div>
	</div>
</body>
</html>
et bien voilà, je n'arrive jamais dans ma partie de traitement du formulaire... :cry: :cry: :cry: :cry:
est-ce qu'il existe une configuration php, qui empecherai de faire de l'upload de fichier ?
je m'en remet vous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 nov. 2006, 20:38

C'est à dire ? tu affiches tout sauf le "ha" ?
$_POST est toujours vide ? et $_FILES ?

Bon sinon ça n'a rien à voir, mais juste une petite remarque/question : je ne vois pas l'intérêt de mettre un champ hidden MAX_FILE_SIZE (à part que tout les tutoriaux le font) Php ne fait aucun contrôle dessus (tu es obligé de le faire toi même, et tu le fais avec une autre valeur qui plus est) je vois pas ce que ca apporte ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

04 nov. 2006, 20:48

c'est à dire que POST, FILES, HTTP_POST_VARS,REQUEST et tout ce qu'on veut ... tout est vide.
et vu que tout est vide, ben on rentre pas dans le traitement et à fortiori, "ha" ne s'affiche pas...
je suis désespéré, c'est pourtant pas si compliqué comme code....
ps: pour le maxfilesize, c'est justement parceque j'ai lu un tuto avant de commencer mon script, mais c'est vrai quil sert pas vraiment... quoique, et les utilisateurs honêtes qui font pas exprès de mettre un fichier trop gros, ça ne leur dit rien ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 nov. 2006, 21:09

J'ai essayé ton code et j'ai la ligne
echo '<?xml version="1.0" encoding="iso-8859-2" ?>';
Qui me met un souk pas possible quand je valide le formulaire (La page XML ne peut pas être affichée...)

J'ai les short tags activé ça doit lui jouer des tours... donc j'ai retiré la ligne (même commenté elle coinçait) et tout passe bien, j'ai bien $_POST['user'] (à noter que même si la session n'est pas présente, il est défini grace au formulaire, il est juste vide :)

Sait on jamais, si ça peut te donner une piste... personnellement j'avais galeré avec IE qui me zappait le premier champ d'un formulaire dans $_POST (tout y était sauf le premier, quel qu'il soit) et c'est en virant le <meta http-equiv="content-type"> que tout à refonctionné (la question est toujours ouverte dans le forum d'ailleurs :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...