Page 1 sur 2

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

Posté : 25 oct. 2006, 18:32
par jojolapine
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

Posté : 25 oct. 2006, 18:42
par Vikchill
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.

Posté : 26 oct. 2006, 11:03
par jojolapine
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

Posté : 26 oct. 2006, 11:21
par Ryle
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 :))

Posté : 26 oct. 2006, 11:51
par jojolapine
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 ...

Posté : 26 oct. 2006, 11:57
par Ryle
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) :?:

Posté : 26 oct. 2006, 12:03
par jojolapine
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:

Posté : 26 oct. 2006, 12:14
par Ryle
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 ?

Posté : 26 oct. 2006, 13:57
par jojolapine
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...

Posté : 26 oct. 2006, 16:23
par jojolapine
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?

Posté : 29 oct. 2006, 22:10
par jojolapine
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 :-# )

Posté : 04 nov. 2006, 12:28
par jojolapine
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

Posté : 04 nov. 2006, 20:38
par Ryle
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 ?

Posté : 04 nov. 2006, 20:48
par jojolapine
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 ?

Posté : 04 nov. 2006, 21:09
par Ryle
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 :))