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

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 : traitement de formulaire, c'est à n'y rien comprendre....

par jojolapine » 05 nov. 2006, 13:32

merci pour ces précisions!

par Cyrano » 05 nov. 2006, 13:22

Le terme de "code métier" est issu essentiellement de la POO (Programmation Orientée Objet), c'est à dire en général un code générique de traitement qui manipule des données et retourne des valeurs sans afficher directement quoique ce soit. On retrouve les classes objet ou des fonctions dans ce terme. Ainsi, ta fonction exécute un traitement et retourne un booléen, mais n'affiche rien directement. Ce type de fonction est directement utilisable sans modification particulière dans d'autres applications ou encore pourrait être externalisée sans affecter la page en tant que telle, un peu comme tes fonctions d'accès à une base de données sont externes.

par jojolapine » 05 nov. 2006, 12:36

bon je vais peu-être vous décevoir, mais en fait c'est pas la faute à php ni à personne d'autre, (même avec mon premier code ça marche), en fait je faisait roujours mes tests avec la même image... qui est buggée, j'ai essayer avec d'autres ça fonctionne...
donc bon maintenant que je reçoit bien les données, je met ce sujet résolu, je reviendrait sur un autre sujet si le traitement ne fonctionne pas :wink:
en tout cas merci à ryle pour ta percévérence... et à cyrano pour ce beau code tout propre!

EDIT:
qu'entends tu cyrano par "code métier" ?

par Cyrano » 05 nov. 2006, 12:22

Au lieu de tout enlever, mets donc un peu d.ordre dans ton code :
-1- le session_start() ne changera rien, laisse-le;
-2- le code "métier" peut suivre sans problème, il n'est pas utilisé au chargement de la page, donc on peut mettre la fonction;
-3- l'en-tête HTML, lui sera toujours là quel que soit le contenu;
-4- Le contenu variant selon le cas (formulaire envoyé ou non) avec des tests et affichages de débuggage;
-5- le pied de page HTML.

Ce qui donne (sur la base de ton dernier code) :
<?php
session_start();
function upload($index, $destination, $maxsize = false, $extensions = false)
{
    //Test1: fichier correctement uploadé
    if (!isset($_FILES[$index]) || $_FILES[$index]['error'] > 0)
    {
        echo "Erreur de transfert du fichier ".$index;
        return false;
    }
    //Test2: taille limite
    if ($maxsize !== false && $_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 && !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);
}
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
    <title>Upload Islande - Mon compte</title>
    <link rel="stylesheet" type="text/css" href="./css/styles.css" media="screen" />
  </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">
<?php
if(isset($_POST['envoi']))
{
    echo("<pre>\n");
    var_dump($_POST);
    echo("</pre>\n");
    echo("<pre>\n");
    var_dump($_FILES);
    echo("</pre>\n");

    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);
    echo (false !== $upload) ? "Upload img1 réussi!<br />" : "Upload img1 échoué!<br />";
}
else
{
    ?>
          <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="user" value="<?php echo $_SESSION['user']['id'];?>" />
            <input type="submit" name="envoi" value="Envoyer" />
          </form>
    <?php
}
?>
        </div>
      </div>
    </div>
  </body>
</html>
De mon coté, j'ai des erreurs à l'affichage parce que certaines variables ne sont pas définies, mais complète avec les parties manquantes et fais le test, puis reviens avec le résultat.

par jojolapine » 05 nov. 2006, 11:53

je n'ai même plus de sessions dans mon code, j'ai tout enlevé:
<?php
echo "printr du début";
print_r($_POST);
print_r($_FILES);

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['envoi'])){
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 />";
}
?>
<!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>
	
	<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="user" value="<?php echo $_SESSION['user']['id'];?>" />
                    <input type="submit" name="envoi" value="Envoyer" />
                </form>
            </div>
        </div>
	</div>
</body>
</html>
:cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:

par Ryle » 05 nov. 2006, 11:46

Bah le code qui fonctionne chez moi, c'est scrupuleusement le tiens sans la ligne <?xml ... ?>, j'ai juste fait un copier coller...

La différence que je peux avoir, c'est que je n'ai pas de session, donc pas d'id user, mais puisqu'il y a un champ "user" dans ton formulaire, le isSet() renvoi quand même vrai.. faudrait tester s'il n'est pas vide également

Tu n'as pas de session_start() soit dit en passant... Si tu l'ajoutes et que tu fais un print_r() de $_SESSION, est ce que celui là au moins est renseigné ?

par jojolapine » 05 nov. 2006, 11:36

c'est à ni plus rien comprendre, j'enlève les metas la déclaration xml, et ... toujours rien, je me dit que c'est peut-être à cause du maxfilesize, je l'enlève et .............. et non t'y a cru... zobby :cry:
peux-tu me donner le code que tu as essayé qui marchait chez toi?

par Ryle » 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 :))

par jojolapine » 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 ?

par Ryle » 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 ?

par jojolapine » 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

par jojolapine » 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 :-# )

par jojolapine » 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?

par jojolapine » 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...

par Ryle » 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 ?