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

ViPHP
ViPHP | 3607 Messages

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?

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

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é ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

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:

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

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" ?

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

05 nov. 2006, 13:32

merci pour ces précisions!