Page 1 sur 1

[RESOLU]Formulaire de mofication de fichier texte

Posté : 01 nov. 2010, 13:04
par lovebzh
Bonjour,

Je suis sur un projet de création d'une interface web pour administrer un service linux ( squid ou dansguardian ).
Je bute sur un problème de modification d'un fichier texte.

j'ai donc créé le formulaire suivant :
$arrayblanc=file("dans/exceptionsitelist",'r+');


echo "<form action='' method='post'>";
	for($i=0;$i<sizeof($arrayblanc);$i++) // tant que $i est inferieur au nombre d'éléments du tableau...

    		{

		echo "<p>

			<input name='urlblanc' type='radio' id='urlblanc' value='".$arrayblanc[$i]."' />".$arrayblanc[$i]."
			
			</p>";    		

    		} 

	echo "<p><input type='submit' name='Submit' value='Enlever' /></form>";
Apres validation du formulaire, j'obtiens bien un $_POST['urlblanc'] contenu le contenu de la ligne à supprimer.
Je souhaite donc maintenant, enlever cette fameuse ligne de mon fichier texte.

Je suis donc parti sur une condition basique :
if (isset($_POST['urlblanc'])) 
{
	$quoi=addslashes($_POST['urlblanc']);
	$fichier=file("dans/exceptionsitelist",'r+');
	unset($fichier[array_search($quoi, $fichier)]);
	foreach ($fichier as $i => $value) 
     {
     fputs($fichier,"$fichier[$i]\n");
    }
}
Et comme vous pouvez vous en douter, cela ne fonctionne pas.
J'avais opté pour l'utilisation d'un textearea au debut, ca simplifiait beaucoup les choses, mais c'était encore plus laid que mon html au milieu du php :-|

Merci de votre attention.
Je suis bien entendu ouvert à toute suggestion conseil.

Re: Formulaire de mofication de fichier texte

Posté : 01 nov. 2010, 14:14
par moogli
Salut

Ton 2eme argument de file n'est pas bon la Doc de file

Ce que je te suggere
Pour l'affichage
- ouverture du fichier avec file ok
- parcourt du tableau avec foreach (foreach($fichier as $clef => $valeur)) avec ca tu affiche le meme formulaire sauf que tu met en value l'index du tableau ($clef dans mon exemple)
Idée : pourquoi pas de checkbox pour une suppression multiple ?

Validation du formulaire :
- file pour avoir le contenu du fichier
- unset($fichier[$_POST['bouton radio']]);
- utilisation de fil_put_contents couplé a un implode pour remettre le tout dans le fichier d'origine ;)
http://php.net/file_put_content

Dans le cas d'une checkbox le unset sera dans un foreach pas d'autre modif ;)

@+

Re: Formulaire de mofication de fichier texte

Posté : 01 nov. 2010, 14:35
par lovebzh
J'ai oublié de préciser que j'avais tout de même une contrainte : les serveurs ou sera mise en place cette interface tournent avec du php 4.3.9 donc sauf erreur, je ne peux me servir de file_put_contents.

C'est effectivement la que je bloque.

Récrire le contenu de $fichier dans mon fichier en respectant la mise en page:
http://www.toto.fr
http://www.tata.fr

Au mieux, j'ai reussi à remplacer ma ligne à supprimer par une ligne blanche, ce qui n'est pas le but recherche.

Re: Formulaire de mofication de fichier texte

Posté : 01 nov. 2010, 15:57
par moogli
Ha effectivement il s'agit d'une contrainte qui ne m'etait pas venue a l'esprit ;)

Il faut faire comme ton code mais il manque le fopen en w+

Donc une fois la suppression des lignes faite
<?php
$f=fopen($fichier, 'w+');
foreach ($fichiertableau as $ligne){
fwrite($f, $ligne);
}
?>
Le w+ permet l'ouverture du fichier en ecriture et vide le fichier.
File garde les retours chariot c'est pour cela que je ne les ai pas mis

@+

Re: Formulaire de mofication de fichier texte

Posté : 02 nov. 2010, 07:45
par lovebzh
Je m'en suis enfin sorti, merci de ton aide moogli.

J'ai corriger mon problème de version php en ajoutant la fonction
if(!function_exists('file_put_contents')) {
 function file_put_contents($filename, $data, $file_append = false) {
  $fp = fopen($filename, (!$file_append ? 'w+' : 'a+'));
  if(!$fp) {
   trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR);
   return;
  }
  fputs($fp, $data);
  fclose($fp);
 }
}
Une astuce glanée sur "je ne sais plus quel site".

Voici dit le code final et fonctionnel :
<form action='' method='post'><h2>Liste Noire</h2>
	<?php if(isset($_GET['listenoire_suppr']) && ($_GET['listenoire_suppr'] == "ok")) { // Affiche l'erreur  ?>

    <div class="reussite"><img src="images/tick.png" title="valide" alt="valid" />&nbsp;Le site a &eacute;t&eacute; effac&eacute; de liste !<br />Il sera d&eacute;bloqu&eacute; d'ici quelques minutes</div>

    <?php }

	if (isset($_POST['urlnoire'])) 
		{
		$nom_fichier='dans/bannedsitelist';
		$liste=file($nom_fichier);
		unset($liste[array_search($_POST['urlnoire'], $liste)]);
		file_put_contents($nom_fichier, implode("",$liste));
		echo '<meta http-equiv="refresh" content="0;URL=accueil.php?listenoire_suppr=ok">';
		}
	$linesn=file('dans/bannedsitelist');

	foreach($linesn as $linesnum => $line) 

    		{ ?>
		<p><input name='urlnoire' type='radio' id='urlnoire' value='<?php echo htmlspecialchars($line) ?>' /><?php echo htmlspecialchars($line) ?></p>							
 		<?php } ?>
	<p><input type='submit' name='Submit' value='Enlever' /></p>

</form>
Il est surement améliorable mais pour le moment ma priorité est qu'il soit fonctionnel.

En espérant que cela puisse servir quelqu'un.

Merci encore