Reset fichier texte

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Reset fichier texte

par titerm » 15 nov. 2007, 10:50

Tu fais 3 fopen() de suite sur le même fichier avec w+, tu fais donc truncate de ton fichier, le résultat sera que seul les écritures situés après le 3eme fopen seront dispo dans ton fichier.

Soit tu fais un seul fopen() et tu enchaines les fwrite(), soit tu fais un fopen() en w+ au début, et ensuite, tu fais des fopen() en a+.

Dans l'absolu, y a pas trop d'intérêt a ouvrir et fermer le même fichier comme ça trois fois de suite pour de simple raison de perf. Dans ce cas, autant utiliser file_put_contents() qui fera les fopen() et fclose() a ta place.

par zeus » 14 nov. 2007, 22:00

C'est normal que tu ais un unique nom de fichier pour les 3 fopen() ?

par John_is_alive » 14 nov. 2007, 21:10

Je me suis dis qu'il serait peut-être plus simple pour vous d'avoir mon code en entier sous les yeux, le voici donc :
<?php
require('connexion.php');

if(isset($_POST['titre']))      $titre=$_POST['titre'];
else      $titre="";

if(isset($_POST['contenu']))      $contenu=$_POST['contenu'];
else      $contenu="";

    // on écrit la requête sql
    $sql = "UPDATE table_management SET titre='$titre', contenu='$contenu', emplacement='$fname'";
    
    // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

?> 
<?php
// on crée la requête SQL
$sql2 = 'SELECT titre,contenu,emplacement FROM table_management';

// on envoie la requête
$req = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
    {
	
// On récupère les variables
$titre = $_POST['titre'];
$contenu = $_POST['contenu'];

// on affiche les informations de l'enregistrement en cours
	$FichierTitre = fopen ("../conseil/management/Conseil_Management_1.txt" , "w+");  // Ecriture du titre dans x.txt
	fputs ($FichierTitre , "&titre=");
	fputs ($FichierTitre , $data['titre']);
	fclose ($FichierTitre);

    $FichierContenu = fopen ("../conseil/management/Conseil_Management_1.txt" , "w+");   // Ecriture du contenu dans x.txt
    fputs ($FichierContenu , "&contenu=");
    fputs ($FichierContenu , $data['contenu']);
    fclose ($FichierContenu);

    $FichierEmplacement = fopen ("../conseil/management/Conseil_Management_1.txt" , "w+");    // Ecriture de l'emplacement dans x.txt
    fputs ($FichierEmplacement , "&empl=http://www.**.*.*/files");
    fputs ($FichierEmplacement , $data['emplacement']);
    fclose ($FichierEmplacement);
	}

// on ferme la connexion à mysql
mysql_close();
?> 
Vous remarquerez donc que les informations sont d'abord envoyées en bdd et ensuite appellées et inscrites dans un fichier texte. Seulement, les informations sont stockées les unes à la suite des autres dans ce fichier texte, de telle sorte que le fichier Conseil_Management_1.txt ressemble à ça :

Code : Tout sélectionner

&titre=sss&soustitre=sss&contenu=ddd&empl=http://www.*.be.ma/filesCoucher de soleil.jpg&titre=test&soustitre=test&contenu=testtt&empl=http://www.*.be.ma/filesHiver.jpg&titre=test&soustitre=test&contenu=test&empl=http://www.*.be.ma/filesCoucher de soleil.jpg&titre=qsd&soustitre=qsd&contenu=d&empl=http://www.*.be.ma/files&etc..
Merci à tous ;)

par John_is_alive » 14 nov. 2007, 20:56

Merci beaucoup de ta réponse,
j'ai donc essayé ceci :
	$FichierTitre = fopen ("../conseil/management/Conseil_Management_1.txt" , "w+");  // Ecriture du titre dans x.txt
	fputs ($FichierTitre , "&titre=");
	fputs ($FichierTitre , $data['titre']);
	fclose ($FichierTitre);
Aucune erreur n'apparaît lors de l'intérpretation du script, néanmoins, quand j'ouvre le fichier "Conseil_Management_1.txt", il est vide. Les informations transmises par le formulaire => base de données => fichier texte , n'ont pas été inscrites.

Avant j'utilisais,
	$FichierTitre = fopen ("../conseil/management/Conseil_Management_1.txt" , "a+");  // Ecriture du titre dans x.txt
	fputs ($FichierTitre , "&titre=");
	fputs ($FichierTitre , $data['titre']);
	fclose ($FichierTitre);
Qui inscrivait bien les informations dans mon fichier texte mais qui avait pour inconvénient de les mettre les unes à la suite des autres. Encore une fois, mon but est d'avoir un fichier texte qui redevient vierge avant chaque nouvelle écriture dans celui-ci..

Merci encore Zeus ;)[/php]

par zeus » 14 nov. 2007, 20:41

Dans la doc sur la fonction fopen(), tu as un tableau qui te donne la description des options d'ouverture (Tableau 91).

Regarde bien la description de l'option "w"

Reset fichier texte

par John_is_alive » 14 nov. 2007, 20:22

Bonjour à tous,

j'aurais voulu savoir s'il été possible de "reset" un fichier *.txt via une commande PHP.

Je vous donne le contexte précis :
- j'ai une page "form.html" contenant un formulaire (titre, contenu)
- la page "traitement.php" insère les informations dans la table "table_contenu" et écrit dans le fichier texte "contenu.txt" les valeurs se trouvant dans la table "table_contenu".

Je voudrais faire en sorte que les dérnières informations envoyées via le formulaire soient les seules à être dans le fichier "contenu.txt", en somme :
- je voudrais savoir s'il est possible de rendre un fichier texte vierge avec une commande PHP ?

Merci beaucoup,
John