ecrire dans un fichier txt

.Steff

Membre expert
Club iGen
6 Septembre 2005
1 294
104
Afin de faire inscrire des membres à une newsletter, un champ sur un site est déstiné a envoyer l'adresse mail saisie dans un fichier texte.

le petit script php.
Bloc de code:
<?php
$mail = $_POST["mail"];

	$handle = @fopen("dossier/letter.txt", "a+");
	/*Ouverture du fichier en A+ pour pouvoir écrire à la suite des éléments déja présents.*/
	if ($handle) {
		fputs($handle, "\n");
		fwrite($handle, $mail);
		fclose($handle);	
		echo ("Op&eacute;ration effectu&eacute;e<br />");

	}
	else {
		echo ("D&eacute;sol&eacute;, l'enregistrement n'est pas possible pour le moment.");
	}
echo ('<a href="groupe.html">Retour au site</a>');

?>

Le probleme, c'est que ce n'est pas compatible avec tout les naviguateur j'ai l'impression... Quelqu'un pourrait m'aider a écrire dans un fichier texte de maniere fiable sur tout les naviguateurs?
d'avance merci.
 
Le fait que PHP &#233;crive dans un fichier ne d&#233;pent pas du navigateur :confused:, mais du serveur.
 
le probleme ne vient pas du serveur car je suis sur que ca fonctionne sur ce serveur.
En effet ca fonctionne avec safari, firefox mac, firefox pc. Mais pas IE, ni opera... alors ca m'embete un peu quand m&#234;me.
 
le probleme ne vient pas du serveur car je suis sur que ca fonctionne sur ce serveur.
En effet ca fonctionne avec safari, firefox mac, firefox pc. Mais pas IE, ni opera... alors ca m'embete un peu quand m&#234;me.
t'es s&#251;r de ce que tu dis ?

c'est pas tr&#232;s possible en fait...

Le php est interpr&#233;t&#233; par le serveur, quelque soit le navigateur, il re&#231;oit la m&#234;me chose (ici le navigateur n'est m&#234;me pas au courant que tu utilise un fichiers...
 
Le code présent dans les pages html
Bloc de code:
	  <form id="form1" method="post" action="letter.php">
           <p class="texte"> 
            <label>Inscription &agrave; la newsletter du groupe: 
              <input name="mail" type="text" value="votre e-mail" />
            </label>
           	            <input type="submit" value="Valider l'inscription" />
           </p> 
      </form>

Le code php de letter.php

Bloc de code:
<?php
$mail = $_POST["mail"];

	$handle = @fopen("dossier/letter.txt", "a+");
	/*Ouverture du fichier en A+ pour pouvoir écrire à la suite des éléments déja présents.*/
	if ($handle) {
		fputs($handle, "\n");
		fwrite($handle, $mail);
		fclose($handle);	
		echo ("Op&eacute;ration effectu&eacute;e<br />");

	}
	else {
		echo ("D&eacute;sol&eacute;, l'enregistrement n'est pas possible pour le moment.");
	}
echo ('<a href="groupe.html">Retour au site</a>');

?>

Et oui je suis sur de ce que je dis. Je viens encore de re essayer pour la 20 ème fois.
Ca me dit bien opération effectué, mais rien selon les naviguateurs...
Les droits d'accès au fichier texte sont pourtant bon ainsi que ceux du dossier dans lequel il se trouve, et donc je séche ainsi qu'une bonne partie de mes potes...
Rho ben ca c'est fort quand même :mouais:
 
Ton code PHP n'est pas interprété par le browser coté client, donc a priori ce n'est pas à cause de ça, après je ne sais pas, ton code à l'air bon…
 
oui je sais bien que c'est le serveur qui interprete le php.
J'en fais d&#233;ja depuis un peu de temps, avec souvent des fonctions plus avanc&#233;es que d'ecrire dans un fichier texte.... :)
Bon mais sinon je vais essayer autre chose comme code.
 
Est-ce que le mode "a+" est r&#233;ellement justifi&#233; dans la mesure ou tu ne souhaites qu'&#233;crire dans ce fichier ? Le mode "a" ne suffirait-il pas ?

De plus, fputs et fwrite ont la m&#234;me fonction &#224; savoir &#233;crire dans un fichier ; il me semble qu'il y a un probl&#232;me ici. Ne serait-il pas plus orthodoxe de r&#233;unir ces deux op&#233;rations en une seule ?

Enfin, je en saurais que trop te conseiller de v&#233;rifier la validit&#233; du mail (sa conformation) avant de l'&#233;crire dans ton fichier.

On ne sait toujours pas :
1 - si la variable $mail passe bien
2 - si l'information ($mail) est r&#233;ellement &#233;crite dans ton fichier. Un petite v&#233;rification...
 
  • J’aime
Réactions: .Steff
et en mettant label de facon plus conforme?

Bloc de code:
<label for="mail">Inscription &agrave; la newsletter du groupe :</label>
<input name="mail" id="mail" type="text" size="30" value="votre e-mail" />

<input type="submit" value="Soumettre" />


quand tu dis que ca ne fais rien, ca n'&#233;cris vraiment rien dans le fichier?

fais afficher $_POST sur ta 2eme page.

++

EDIT : au fait pas tr&#233;s bien de ne pas v&#233;rifier ce qu'on t'envoit dans la variable mail
 
  • J’aime
Réactions: .Steff
oui bonne idée, remplace juste pour tester le code de la seconde page par
Bloc de code:
<?php
echo '<html><pre>';
print_r($_POST);
echo '</pre></html>';
?>
et dis nous ce que ça donne :)

J'ai bien essayer cela.
Et je recoit bien le resultat de la variable mail dans la page php sans problème. Par contre je confirme que l'écriture ne se fait pas toujours...

Ensuite pour la vérification de la conformité du mail, je vais bien sur le faire, mais si je n'arrive déja pas à ecrire dans le fichier, je peut toujours vérifiez.:)

Bref j'ai aussi essayé en W, W+, A, A+ et rien n'y fait.
Je doit mettre le site en ligne dans le week end, mais bon, je pense que je vais mettre la newsletter en suspens pour le moment!
 
Allez savoir ce qui se passe....
Ca fonctionne. En fait ca fonctionne avec tout les navigateurs..J'ai en fait remplacé le fputs par un simple fwrite et hooop....
Bon enfin voilà merci a tous en tout cas :) :zen:
 
Allez savoir ce qui se passe....
Ca fonctionne. En fait ca fonctionne avec tout les navigateurs..J'ai en fait remplacé le fputs par un simple fwrite et hooop....
Bon enfin voilà merci a tous en tout cas :) :zen:
c'est pas un peu ce que t'avais propos&#233; fredmac75 ? :)
 
Et bien non pas tout &#224; fait en fait :)
parce que je n'ai pas r&#233;uni les deux, j'en ai laiss&#233; deux, mais j'au juste chang&#233; la syntaxe :zen:
 
Et bien non pas tout &#224; fait en fait :)
parce que je n'ai pas r&#233;uni les deux, j'en ai laiss&#233; deux, mais j'au juste chang&#233; la syntaxe :zen:

les form prennent des enctypes ...


Bloc de code:
define('__SUCCES_MESSAGE__',"Op&eacute;ration effectu&eacute;e<br />",true);
define('__ERROR_MESSAGE__',"D&eacute;sol&eacute;, l'enregistrement n'est pas possible pour le moment.<br />",true);
define('__ERROR_POST_VAR_MESSAGE__',"D&eacute;sol&eacute;, l'enregistrement n'est pas possible pour le moment.<br />",true);

function isEmail($str,$dns='')
{
    $mask= (strlen($dns) > 0 ) ? '^[0-9a-z]([-_.]?[0-9a-z])*@'.$dns.'$' : '^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$';
    
    return ereg($mask,$str);
}

$status = 0;

if(isset($_POST['mail']))
{
    $mail_str = $_POST['mail'];
    $mess = (string) "";
    
    if (isEmail($mail_str) )
    {
        $fp = @fopen("dossier/letter.txt",'a+');
        if($fp)
        {
            fwrite($fp,$mail_str);
            fclose($fp);    
            $mess = __SUCCES_MESSAGE__;
        } else {
            $mess = __ERROR_MESSAGE__;
            $status = 1;
        }
    } else {
        $mess = __ERROR_POST_VAR_MESSAGE__;
        $status = 1;
    }
    
    echo $mess;
}

exit($status);
il y a forcement un lf avec un a+ ...