Page 1 sur 1

Ecrire des variables dans un fichier avec fwrite

Posté : 27 janv. 2008, 22:59
par supercanard
Bonsoir.
Petit soucis pour écrire le contenu de variables avec fwrite :
<?php

$fichier = fopen ('../config.php','w+');
	fwrite ($fichier, "
<?php
mysql_connect ('".$_POST["serveur"]."', '".$_POST['identifiant']."', '".$_POST['passe']."') OR DIE ('<p>'.$serveur_erreur.'</p>'.mysql_error());
mysql_select_db ('".$_POST['base']."') OR DIE ('<p>'.$serveur_erreur.'</p>'.mysql_error());
?>
");
J'ai bien testé avec echo les variables envoyées mais quand j'ouvre le fichier à tous les endroits ou devraient être le contenu es variables je n'ai rien...

J'ai foiré quelque part ? :(

PS : pour $serveur_erreur, je veut bien écrire $serveur_erreur et non le contenu d'une variables (ce n'est pas une erreur)

Posté : 27 janv. 2008, 23:11
par h0_noMan
Essayes d'echapper les caractères speciaux.

Code : Tout sélectionner

< par \< ? par \? > par \>

Posté : 27 janv. 2008, 23:54
par supercanard
Essayes d'echapper les caractères speciaux.

Code : Tout sélectionner

< par \< ? par \? > par \>
Oula en échappant c'est l'anarchie :
\<\?php
mysql_connect ('', '', '') OR DIE ('<p>'..'</p>'.mysql_error());
mysql_select_db ('') OR DIE ('<p>'..'</p>'.mysql_error());
\?\>
Et sinon sans échapper ça donne ça :
<?php
mysql_connect ('', '', '') OR DIE ('<p>'..'</p>'.mysql_error());
mysql_select_db ('') OR DIE ('<p>'..'</p>'.mysql_error());
?>
:roll:

Posté : 28 janv. 2008, 00:07
par Truc
J'ai l'impression que tu ne t'y prends pas de la bonne manière.

Apparemment tu es en train d'écrire un script de modification des identifiants de connexion un peu comme dans ce sujet.

Tu ne dois pas aller modifier un fichier complet mais juste les données concernées donc les identifiants qui peuvent être placés dans un fichier xml.

Posté : 28 janv. 2008, 00:21
par supercanard
En fait c'est pas tout à fait ça.
Ce n'est pas un script de modification mais de création. Une fois qu'il est fait on y touche plus.

Posté : 28 janv. 2008, 00:26
par Truc
idem... tu crées ton script qui va lire le fichier xml avec ces données et affectes les variables avec ce qui a été lu :)

Posté : 28 janv. 2008, 00:35
par supercanard
Je vais regarder ça alors :wink:
Mais conçernant le pourquoi la variable ne s'écrit pas dans le fichier ça me turlupine quand même :D

Posté : 28 janv. 2008, 00:42
par Truc
les variables POST sont vides :-k

Posté : 28 janv. 2008, 00:54
par supercanard
Non ça serait trop facile :lol:
J'ai testé avec un echo
<?php
switch($etape) {
	default :
	$contenu = '
<form method="post" action="index.php?etape=1">
<label>Serveur SQL : </label><input type="text" name="serveur" />
<label>Identifiant SQL : </label><input type="text" name="identifiant" />
<label>Passe : </label><input type="text" name="passe" />
<label>Base : </label><input type="text" name="base" />
<input type="submit" value="Valider" />
</form>
';
	break;
	case 1 : echo $_POST['serveur'];
	$fichier = fopen ('../config.php','w+');
	fwrite ($fichier, "
<?php
mysql_connect ('".$_POST['serveur']."', '".$_POST['identifiant']."', '".$_POST['passe']."') OR DIE ('<p>'.$serveur_erreur.'</p>'.mysql_error());
mysql_select_db ('".$_POST['base']."') OR DIE ('<p>'.$serveur_erreur.'</p>'.mysql_error());
?>
");
}

echo $contenu;
?>

Posté : 28 janv. 2008, 02:23
par h0_noMan
1. A quoi est affecté $etape ?
2. Que donnes un var_dump($_POST) en debut de code ?
3. $serveur_erreur est interpreté comme une variable et on pas comme du texte.
4. A quoi servent les . et les ' apres les OR DIE ?

Posté : 28 janv. 2008, 11:10
par supercanard
1. A quoi est affecté $etape ?
2. Que donnes un var_dump($_POST) en debut de code ?
3. $serveur_erreur est interpreté comme une variable et on pas comme du texte.
4. A quoi servent les . et les ' apres les OR DIE ?
1) Alors $etape c'est juste par rapport à ce qui doit s'afficher, regarde quand on entre dans le switch, par défaut c'est le formulaire qui s'affiche. Quand étape = 1 on traite les données du formulaire, et le code n'est pas complet ici mais on affichera un message et on continuera les étapes. Bref ça n'a rien à voir avec le problème, c'est juste pour m'éviter de faire 40 pages.

2) J'ai pas essayé var_dump mais j'ai fait des echo de ms variables avant fwrite, elles s'affichent bien et ne sont pas vides.

3) Exact... d'habitude j'utilise les apostrophes et la j'ai utilisé les guillemets donc je n'ai pas besoin d'échapper en fait ? Je crois que le problème est ici :lol:

4) '<p>'.$serveur_erreur.'</p>'.mysql_error()); -> C'est ce que je veut écrire dans le fichier
mysql_connect (' --> Dans le fichier on attaque avec des primes

En fait je cherche à écrire exactement ça dans le fichier :
<?php
mysql_connect ('monserveur', 'mon identifiant', 'mon pass') OR DIE ('<p>'..'</p>'.mysql_error());
mysql_select_db ('ma base') OR DIE ('<p>'..'</p>'.mysql_error());
?>
Ou mon serveur, mon identifiant etc... sont les valeurs des POST

Posté : 28 janv. 2008, 11:59
par Ryle
Il ne te manquerait pas quelque chose à concatener entre les '<p>'..'</p>' ? Le résultat que tu souhaite ne serait pas plutôt :

Code : Tout sélectionner

<?php mysql_connect ('monserveur', 'mon identifiant', 'mon pass') OR DIE ('<p>'.$serveur_erreur.'</p>'.mysql_error()); mysql_select_db ('ma base') OR DIE ('<p>'.$serveur_erreur.'</p>'.mysql_error()); ?>
Première chose à faire, passer en chaine et extraire celles à remplacer par des variables
<?php
$str = "<?php
mysql_connect ('" . "monserveur" . "', '" . "monidentifiant" . "', '" . "monpass" . "') OR DIE ('<p>'.\$serveur_erreur.'</p>'.mysql_error()); 
mysql_select_db ('" . "ma base" . "') OR DIE ('<p>'.\$serveur_erreur.'</p>'.mysql_error());
?>";
?>
Il est peut être nécessaire d'échapper les "?" en "\?" je ne sais plus, il est indispensable d'échapper le $ de $serveur_erreur, par contre il n'y a pas de soucis avec les "<", ">"

Nota : comme pour une requête sql, faire les choses par étape et commencer par stocker le résultat dans une chaine permet de l'afficher et de voir si le résultat correspond à ce que l'on attend avant de le coller dans un fichier :)
<?php
$str = "<?php 
mysql_connect ('" . $_POST['serveur'] . "', '" . $_POST['identifiant'] . "', '" . $_POST['passe'] . "') OR DIE ('<p>'.\$serveur_erreur.'</p>'.mysql_error()); 
mysql_select_db ('" . $_POST['base'] . "') OR DIE ('<p>'.\$serveur_erreur.'</p>'.mysql_error()); 
?>";
echo '<pre>'.$str.'</pre>';
$fichier = fopen ('../config.php','w+'); 
fwrite ($fichier, $str); 
?>

Posté : 28 janv. 2008, 12:19
par h0_noMan
Perso, j'utiliserais les simple quote afin d'eviter toute interpretation.

J'ai teste ceci et aucune erreur.
<?php

$crnl  = "\r\n" ;
$data  = '<?php'.$crnl ;
$data .= 'mysql_connect(\''.$_POST['serveur'].'\',\''.$_POST['identifiant'].'\',\''.$_POST['passe'].'\')';
$data .= ' or die(\'<p>\'.$serveur_erreur.\'</p>\'.mysql_error());'.$crnl ;
$data .= 'mysql_select_db(\''.$_POST['base'].'\')';
$data .= ' or die(\'<p>\'.$serveur_erreur.\'</p>\'.mysql_error());'.$crnl ;
$data .= '?>'.$crnl ;
	
$handle = fopen('../config.php','w+') or die('Erreur : Ouverture Fichier.');
fwrite($handle,$data) or die('Erreur : Ecriture Fichier');
fclose($handle);

?>