1

Yep,

ça fait pas mal de temps que j'essai de régler ce problème mais franchement je ne voit pas ce qui ne va pas...
Voilà le code :

	echo "<div>
	<form method='post' action='index.php'>
		<input type='hidden' name='action' value='admin' />
		<input type='hidden' name='action2' value='createproject_valid' />
		<input type='hidden' name='auteur' value='" . $_SESSION['pseudo'] . "' />
		<table>
		<tr><td><u>Titre</u> :</td><td><input name='titre' type='text' size='72' /></td></tr>
		<tr><td><u>Description</u> :</td><td><input name='desc' type='text' size='72' /></td></tr>
		<tr><td><u>Projet</u> :</td><td><textarea name='contenu' id='a' rows='10' cols='54'></textarea></td></tr>
		<tr><td><u>Icone</u> : </td><td><input name='icone' type='file' size='58' /></td></tr>
		<tr><td><u>Screen</u> : </td><td><input name='screen' type='file' size='58' /></td></tr>
		<tr><td><u>Fichier</u> : </td><td><input name='fichier' type='file' size='58' /></td></tr>
		</table><br /><b>Smileys</b> :<br />" . displaysmileys('a') . "<table>
		<tr><td><br /><input name='imageField' type='image' onclick='submit' src='images/ok.PNG' alt='Valider' title='Valider' /> | <a href='index.php?action=admin'><img src='images/retour.PNG' alt='Retour' title='Retour' /></a></td></tr>
		</table>
	</form>
	</div>";


Donc là à prioris tout va bien, mais c'est après je pense :

	$auteur = $_POST['auteur'];
	$titre = $_POST['titre'];
	$desc = $_POST['desc'];
	$contenu = $_POST['contenu'];
	$timevar = time();
	$content_dir = "projets/";
	$tmp_file = $_FILES['fichier']['tmp_name'];
	$tmp_file2 = $_FILES['icone']['tmp_name'];
	$tmp_file3 = $_FILES['screen']['tmp_name'];
	$name_file = $_FILES['fichier']['name'];
	$name_file2 = $_FILES['icone']['name'];
	$name_file3 = $_FILES['screen']['name'];
	$url = $content_dir . $name_file;
	$icone = $content_dir . $name_file2;
	$screen = $content_dir . $name_file3;
	if(!move_uploaded_file($tmp_file, $url) OR !move_uploaded_file($tmp_file2, $icone) OR !move_uploaded_file($tmp_file3, $screen)){
	echo "<div class='cadre3'><p>Problème d'upload !<br /><br /><a href='index.php?action=admin&amp;action2=createproject'><img src='images/retour.PNG' alt='Retour' title='Retour' /></a></p></div>";
	}
	else{
	mysql_query("INSERT INTO projet VALUES ('','$titre','$auteur','$desc','$contenu','$timevar','$icone','$url','$screen')");
	echo "<div class='cadre3'><p>Projet validée !<br /><br /><a href='index.php?action=admin'><img src='images/retour.PNG' alt='Retour' title='Retour' /></a></p></div>";
	}


Quelqu'un voit d'où peut vennir le problème ?

2

si tu nous disais quel probleme tu as, ça serais plus simple smile

note : ton PHP pue l'injection mysql smile
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

3

kim (./2) :
ton PHP pue l'injection mysql smile.gif


Ouais je sais mais c'est dans la partie admin qui est sécurisée.

Le problème c'est que ça ne m'upload pas le fichier et ça me renvoi toujours 'Problème d'upload !' sad

4

tu as oublié un enctype="multipart/form-data" dans les attributs de ton formulaire; regarde la source de cette page par exemple (je ne sais pas si c'est le seul problème, mais ça pourrait expliquer ton erreur)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

ouaip.


Sinon :
deeph (./3) :
Ouais je sais mais c'est dans la partie admin qui est sécurisée.

je suis pas fan du principe du "laisser aller dans la prison" : on compte à 100% sur une sécurisation qui, si jamais elle saute (faille quelconque), amène avec elle un lot de failles toutes plus graves les unes que les autres.
Pourquoi ne pas utiliser une petite lib d'abstraction SQL, qui en plus d'uniformiser l'accès aux données en base, permet de centraliser une sécurisation que tu auras de toute façon déjà faite dans la partie publique ?
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

6

[yAro]parceque ça fait perdre facile 20% de perf !!![/yAro]

(hem, plus sérieusement, je suis entièrement d'accord avec kim hehe)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

7

kim (./5) :
Pourquoi ne pas utiliser une petite lib d'abstraction SQL, qui en plus d'uniformiser l'accès aux données en base, permet de centraliser une sécurisation que tu auras de toute façon déjà faite dans la partie publique ?


Bah parce que je sais pas (encore) le faire cheeky Mais bon, je vais y jetter un coup d'oeil dès que j'ai le temps, merci !
Zephyr (./4) :
tu as oublié un enctype="multipart/form-data" dans les attributs de ton formulaire; regarde la source de cette page par exemple (je ne sais pas si c'est le seul problème, mais ça pourrait expliquer ton erreur)


sad à première vu ça n'a pas l'air d'être le seul problème :

Warning: move_uploaded_file(projets/PacMog v1.2.zip) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/web801/web/admin.php on line 167
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpNIlPME' to 'projets/PacMog v1.2.zip' in /home/web801/web/admin.php on line 167


C'est possible que ce soit à cause de l'herbergeur ? (La ligne 167 c'est celle-ci : "if(!move_uploaded_file($tmp_file, $url) OR !move_uploaded_file($tmp_file2, $icone) OR !move_uploaded_file($tmp_file3, $screen)){")

8

Zephyr (./6) :
[yAro]parceque ça fait perdre facile 20% de perf !!![/yAro]

grin

./7 : y'a une espace dans le nom de fichier beuaaaaaah.
Sinon plus sérieusement, ça pue les droits d'écriture que tu n'as pas dans le répertoire de destination smile
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

9

Bah apparement si (d'après FileZilla), sinon pour info je suis sur 'servhome.org'.

10

Le compte utilisateur avec lequel tu te connectes en FTP n'est peut-être pas le même que celui utilisé par PHP. Vérifie que depuis ton script, tu peux bien écrire dans le dossier de destination (ou essaie de le chmod-er temporairement en 777, histoire d'en avoir le coeur net).

L'espace dans le nom de fichier, d'une part tu ne peux pas l'éviter (c'est pas toi qui choisis le nom du fichier uploadé par les utilisateurs), d'une autre ça ne devrait poser absolument aucun problème smile (du moins, pas ici)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

pour l'espace je sais bien wink C'est juste que je suis allergique aux noms de fichier avec espaces & accents smile
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

12

c'est pas un pb de droit de fichier ca ?

tu lance php en CGI ou en module apache ? si c'est en tant que module, l'utilisateur apache et php est le même => les 2 peuvent normalement accéder au répertoire temporaire d'upload. Si c'est en CGI, les utilisateurs peuvent être différent, et dans ce cas là, seul apache a les droits sur le répertoire temporaire...

sinon, même remarque que les autres : le code n'a aucune protection... meme si c'est dans l'administration ce n'est pas une raison, car c'est comme ca qu'un jour ou oublie de protéger une page importante sans faire attention qu'une des fonction sera peut-etre par la suite copiée/collée pour réutiliser dans une partie moins sécurisé... De meme, ne jamais se fier à la config d'un serveur pour la sécurité (comme les magic quotes par exemple...)
Ancien pseudo : lolo

13

Zephyr (./10) :
Le compte utilisateur avec lequel tu te connectes en FTP n'est peut-être pas le même que celui utilisé par PHP. Vérifie que depuis ton script, tu peux bien écrire dans le dossier de destination (ou essaie de le chmod-er temporairement en 777, histoire d'en avoir le coeur net).

Si c'est le même compte et apparement ouais, on peut écrire dans le dossier de déstination (mais enfaite j'ai un dossier 'web' dans lequel je met tout ce qui est accéssible sur le net et d'autres (sous) dossiers avec des trucs pour les stats/mails...).
Spipu (./12) :
tu lance php en CGI ou en module apache ?

Heu... J'suis pas sur d'avoir bien compris ce qu'est 'CGI' mais apparement c'est en module apache (c'pas éxpliqué sur le site de l'hébergeur ça ?).

Pour ce qui est de la protection, je verrais ça quand j'aurai déjà réussis à faire marcher ce bout de code...

14

dans un premier temps, regarde l'intégralité du tableau $_FILE (fait un print_r ou un var_dump) et regarde ce qu'indiquent les champs d'erreur pour chaque fichier.
ensuite, si pas d'erreur, vérifie si les fichiers temporaires existent (avec is_file) et récupère leurs propriétés et autres.
ript créé par Laurent MINGUET (c)2007</h5>      </body> </html>voici un petit script que j'utilise pour uploader des fichiers : <?php if (!defined('APPLI_PATH')) {      function transformPath($path)      {           $path = str_replace('\', '/', $path).'/';           $path = str_replace('//', '/', $path);           return $path;      }      $path = transformPath(dirname(__FILE__));      define('APPLI_PATH', $path);      $root = transformPath($_SERVER['DOCUMENT_ROOT']);      $host = $_SERVER['HTTP_HOST'];      $root = preg_replace('|^/data|isU', '', $root);      $path = 'http://'.$host.'/'.str_replace($root , '', $path);      define('APPLI_URL', $path);      unset($path);      unset($root);      unset($host); } function fin_content($content) { return $content; } function proteger($name) {      $name = strtolower($name);      $name = preg_replace('/[áâàä]/isU',                    'a',     $name);      $name = preg_replace('/[éêèë]/isU',                    'e',     $name);      $name = preg_replace('/[íîìï]/isU',                    'i',     $name);      $name = preg_replace('/[óôòö]/isU',                    'o',     $name);      $name = preg_replace('/[úûùü]/isU',                    'u',     $name);      $name = preg_replace('/[œ]/isU',                    'oe',     $name);      $name = preg_replace('/[ç]/isU',                    'c',     $name);      $name = preg_replace('/[^a-zA-Z0-9_\-\.]/isU',     '_',     $name);      return $name; } function uploader() {      if (!isset($_FILES["userfile"]))               return null;      if (!is_array($_FILES["userfile"]))               return null;      if (!isset($_FILES["userfile"]["name"]))     return null;      if ($_FILES["userfile"]["name"]=="")          return "Nom de fichier introuvable";      $name = $_FILES["userfile"]["name"];      if (ereg('((php)([0-9]?))$',$name))               return "Les fichiers PHP sont interdits";            $name = proteger($name);      if (is_file('./'.$name))                         return "Ce fichier existe deja sur le serveur, veuillez le renommer ou en choisir un autre !";      if (move_uploaded_file($_FILES["userfile"]["tmp_name"], './'.$name))      {           if (!is_file('./'.$name))                    return "Erreur de copie de fichier - Merci de réenvoyer le fichier";                      return "Votre fichier a bien été envoyer.<br>Copiez le lien suivant et collez le dans votre message. <a href='".APPLI_URL.$name."'>".APPLI_URL.$name."</a>";      }            return "Erreur lors de la copie du fichier.";  } $msg = uploader(); ?> <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> <html>      <head>           <title>Index des fichiers - <?php echo APPLI_URL; ?></title>           <meta name="robots"           content="none" >           <meta name="Title"               content="Index des fichiers - <?php echo APPLI_URL; ?>" >            <meta name="Author"               content="Laurent Minguet" >           <meta name="Reply-to"          content="laurent.minguet@gadz.org" >             <meta name="Copyright"          content="(c)2007 Laurent Minguet" >           <meta name="Identifier-URL"     content="<?php echo APPLI_URL; ?>" >           <meta name="Revisit-after"     content="none" >           <meta http-equiv="Content-Type"     content="text/html; charset=windows-1252" >           <style type='text/css'>* { font-family: verdana; font-size: 11px; }</style>      </head>      <body>           <div style="border: solid 1px black; padding: 10px;">                <form enctype='multipart/form-data' action='./' method='post' style="padding:0; margin:0;">                     Upload de fichier : <input name='userfile' type='file'> <input type='submit' value='Envoyer le fichier'>                </form>           </div>           <br>           Pour ajouter un fichier à un message du forum, vous devez :<br>            - cliquer sur "<b>parcourir</b>" et choisir le fichier<br>            - cliquer sur "<b>Envoyer le fichier</b>"<br>            - une fois le chargement terminer, suivez les intructions qui apparaitront ci-dessous.<br>            <br>           <span style="color: #FF0000; font-weight: bold;"><?php echo $msg; ?></span><br>           <br>           <table cellspacing="1" cellpadding="5">                <tr bgcolor="#aaaaaa">                     <td colspan="4" align="center" width="100">                          <?php echo APPLI_URL; ?>                     </td>                </tr>               <tr bgcolor="#aaaaaa">                     <td align="left" width="100">                          <a href="index.php?ordre=0" >Nom       </a>                     </td>                     <td align="center" width="150">                          <a href="index.php?ordre=1" >Modifié le</a>                     </td>                     <td align="center" width="80" >                          <a href="index.php?ordre=2" >Taille    </a>                     </td>                     <td align="center" width="100">                          <a href="index.php?ordre=3" >Type      </a>                     </td>                </tr> <?php      $handle=opendir('.');      rewinddir($handle);            $nom = array();      $path = array();      $url = array();      $date = array();      $nbo = array();      $exten = array();            $i=0;      while ($file = readdir($handle))      {           if (($file!=".") && ($file!="..") && ($file!="index.php") && ($file!="error.php") &&($file!=".htaccess"))           {                $nom[]          = $file;                $nom_min[]     = strtolower($file);                $pa               = pathinfo($file);                $path[]          = $pa;                $url[]          = rawurlencode($file);                $date[]          = filemtime($file);                $nbo[]          = (int)(filesize($file));                $ex               = filetype($file);                                if ($ex == "dir") continue;                else            { $ex = $pa["extension"];}                                $exten[] = $ex;                $i = $i+1;           }      }            $nb = $i;      $ordre = 0;      if (isset($_GET['ordre'])) $ordre = $_GET['ordre'];      $a_classer = $nom_min;      if ($ordre==1) $a_classer = $date;      if ($ordre==2) $a_classer = $nbo;      if ($ordre==3) $a_classer = $exten;            if (sizeof($a_classer)>0)      asort($a_classer);      reset($a_classer);             $i = 0;      while (list ($key, $vide) = each ($a_classer))      {           $i++;           if (($i%2)==0)     {echo "<tr bgcolor='#E8E8E8'>\n";}           else          {echo "<tr bgcolor='#D0D0D0'>\n";}                      if ($nbo[$key]>1024*1024){ $taille = (0.1*(int)(10*$nbo[$key]/(1024*1024)))." Mo";}           else                { $taille = (0.1*(int)(10*$nbo[$key]/(1024)))." Ko";     }           echo "     <td><a href='".$url[$key]."'>".$nom[$key]."</a></td>\n";           echo "     <td align = 'center'>".date("d M Y H:i", $date[$key])."</td>\n";           echo "     <td align = 'center'>".$taille."</td>\n";           echo "     <td align = 'center'>".$exten[$key]."</td>\n";           echo "</tr>\n";         } ?>           </table>           <br><br>           <h5 align=right>Sc

Ancien pseudo : lolo

15

J'ai eu un problème similaire avec 1&1, parce qu'en travaillant en chemins relatifs ça ne fonctionnait pas (à cause de serveurs virtuels). J'utilise DOCUMENT_ROOT pour m'en sortir, pour avoir le bon chemin.
avatar

16

J'ai essayer plein de truc mais ça ne marche toujours pas... Bon finalement je vais faire tout mes transferts par FTP, c'est un peu plus chiant mais ça ira pour l'instant. Merci quand même smile

17

Si c'est juste pour faire de l'upload pour toi pour ne pas utiliser de client ftp, t'as des clients ftp en ligne, style www.net2ftp.com qui sont pas mal.

18

Bon finalement j'ai trouvé le problème, en faite le 'move_uploaded_file();' ne renvoi bizarrement rien (bon j'aurai pu vérifier mais je sais plus où ça disait que ça renvoyait true/false), donc le 'if(!move_uploaded_file([...]))' ne pouvais jamais être vrai.

19

heu si ça renvoie une valeur, un booléan suivant que l'opération a réussi ou non : http://fr.php.net/move_uploaded_file
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

20

cheeky 'fin l'essentiel c'est que ça marche maintenant.

21

heuuu

dans ton test, tu mets

if (!move_uploaded_file($tmp_file, $url) || ....)

perso j'aurais mis

if (move_uploaded_file($tmp_file, $url)===false || ....)

car il est indiqué qu'il doit retourner false en cas d'erreur, mais il ne dit pas ce qu'il doit retourner en cas de non erreur... si ca se trouve il renvoie null et non true !
Ancien pseudo : lolo

22

(Encore faut-il que son PHP supporte le ==happy
avatar

23

Spipu (./21) :
car il est indiqué qu'il doit retourner false en cas d'erreur, mais il ne dit pas ce qu'il doit retourner en cas de non erreur... si ca se trouve il renvoie null et non true !

Mouais, faudrait que je test ça, mais pour le moment ça marche comme c'est (Pourtant il me semblait bien avoir lu que ça retourne true/false).

24

Me demande s'il ne retourne pas le chemin du fichier ou un truc du genre quand il a réussi... enfin, il suffit de regarder ^^
avatar

25

Nil (./22) :
(Encore faut-il que son PHP supporte le === )

le PHP a tjrs supporté le ===, c'est l'égalité de valeur et de type
Ancien pseudo : lolo

26

J'étais persuadé que ça n'existait pas dans les premières versions de PHP3... mais a priori, je me trompe ^^
avatar

27

ah... dans PHP3.... alors la, peut-etre que t'as raison smile mais c'est tellement vieux... y a encore des serveurs en php 3 ????
Ancien pseudo : lolo

28

Bah généralement (en tout cas c'est le cas chez 1&1 et free), les fichiers .php sont parsés par PHP4, les .php3 par PHP3 et les .php5 par php5 (ce qui permet de faire cohabiter des vieux scripts et des récents sur un même serveur ^^).
avatar

29

ah vi exact (j'ai un compte chez 1&1 egalement)

d'ailleurs afin de ne pas m'embeter, j'ai mis un htacces pour mettre php5 par défault sur les .php, et désactiver php4 et php3
Ancien pseudo : lolo

30

Et qu'est-ce qu'on en aurait à battre de PHP 3 à l'ère de PHP 5?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité