Problème variable $_POST

scalsan
Invité n'ayant pas de compte PHPfrance

29 nov. 2007, 17:19

Bonjour,

sur les servers avec register_globals sur off le script suivant me renvoie "erreur serveur":
<?php 
clearstatcache(); 
        $filename=$xmlToSave; 
        $fp=@fopen($filename,"w"); 
         
    $rec=$xmlContent; 
     

   fwrite($fp,$rec); 
        fclose($fp); 
        chmod($filename, 0775 ); 
        if ($fp) { 
                            echo ("&erro=NONE&statusText=Enregistrement dans la base OK !"); 
        } else { 
                echo ("&erro=OK&statusText=Erreur serveur !                                                      "); 
    exit(); 
        } 
?>


quand je remplace "$xmlToSave" par "$_POST['xmlToSave']" j'ai le message "enregistrement dans la base OK" mais mon xml modifié en ligne se retrouve vide (0 octets).

Pouvez-vous m'indiquer une piste. Merci d'avance.

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

29 nov. 2007, 17:29

Et la variable $xmlContent que tu stockes dans $rec, elle viendrait pas de $_POST également ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

29 nov. 2007, 17:38

Houlala suis nul en php à pas compris la question la....

Le script fonctionne sur les serveurs register_globals off, le reste du programme est ds un fichier swf incompréhensible.

j'ai essayé de contourner le problème avec $_POST['xmlToSave']. J'ai plus d'erreur mais ça m'écrit un xml à 0 octets.

Désolé mes piètres connaissances en php s'arrête là.

:roll:

Invité
Invité n'ayant pas de compte PHPfrance

29 nov. 2007, 17:41

J'ai corrigé comme cela mais ça change rien:
clearstatcache();
        $filename=$_POST['xmlToSave'];
        $fp=@fopen($filename,'w');
		
	$rec=$_POST['xmlContent'];
	

   fwrite($fp,$rec);
		fclose($fp);
		chmod($filename, 0775 );
		if ($fp) {
                            echo ("&erro=NONE&statusText=Enregistrement dans la base OK !");
        } else {
                echo ("&erro=OK&statusText=Erreur serveur !                                                      ");
	exit();
        }


Eléphant du PHP | 445 Messages

29 nov. 2007, 17:49

Fais un var_dump de $_POST et donnes nous le resultat.

Invité
Invité n'ayant pas de compte PHPfrance

29 nov. 2007, 18:04

Holalalala vous ai dit j'y comprend rien.
Aprés une improvisation j'ai tapé ça:

clearstatcache();
$filename=$_POST['xmlToSave'];
$fp=@fopen($filename,'w');
$rec=$_POST['xmlContent'];
var_dump($_POST);

fwrite($fp,$rec);
fclose($fp);
chmod($filename, 0775 );

if ($fp) {
echo ("&erro=NONE&statusText=Enregistrement dans la base OK !");
} else {
echo ("&erro=OK&statusText=Erreur serveur !");
exit();
}

Et ça maaarrcheee!!!!

Alors j'ai rien compris à ce $_POST et ce var_dump.
Je vous remercie beaucoup pour votre aide.
C'est possible une petite explication de pourquoi maintenant ça marche ?

Cordialement.

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

29 nov. 2007, 18:06

En fait, ce qu'il te faut savoir c'est que le paramètre register globals, quand il est activé, te permet d'utiliser des variables sans te soucier de savoir d'où elles viennent, cad si elles ont été passée par l'url ($_GET), via un formulaire avec la méthode post ($_POST), si elles se trouvent dans la session ($_SESSION), etc.

C'est une faille de sécurité (voir la FAQ) et il est donc recommandé de désactiver ce paramètre pour forcer les développeurs à toujours spécifier d'où proviennent les variables qu'ils utilisent...

Dans le premier code que tu nous a donné, tu ouvres un fichier (fopen), définie une variable $rec à laquelle tu affectes la valeur de $xmlContent, et tu enregistre dans le fichier le contenu de ta variable $rec :
   $fp=@fopen($filename,"w");  
   $rec=$xmlContent;  
   fwrite($fp,$rec); 
Or, à aucun moment dans ton code on ne voit définie de variable $xmlContent. Du coup php considère que cette variable est vide (puisque tu ne précises pas si elle provient de $_GET, $_POST, ...), et le résultat est donc que ton fichier est rempli par une valeur vide, d'où sa taille de 0ko :)

Il te faut donc trouver d'où provient cette variable pour que son contenu soit utilisé :)

HTH
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...