PHP Rechercher mot dans txt et supprimer

Résolu/Fermé
nicooo - 10 oct. 2009 à 17:17
 Nicooo - 11 oct. 2009 à 01:12
Bonjour,

Je dispose du script php suivant :

<?php
define('FICHIER', 'noms.txt');

if (!isset($_POST['valider'])) {
?>
<form method="POST">
Mot recherché : <input type="text" name="mot" value=""/><br/>
<input type="submit" value="valider" name="valider"/>
</form>

<?php
} else {
$resultats =array();
@ $fp = fopen(FICHIER, 'r') or die('Ouverture en lecture de "' . FICHIER . '" impossible !');
while (!feof($fp)) {
$ligne = fgets($fp, 1024);
if (preg_match('|\b' . preg_quote($_POST['mot']) . '\b|i', $ligne)) {
$resultats[] = $ligne;
}
}
fclose($fp);
$nb = count($resultats);
if ($nb > 0) {
echo "'$mot' trouvé $nb fois :";

echo '<ul>';
foreach ($resultats as $v) {
echo "<li>$v</li>";

// Je pense que je devrais mettre ma fonction ICI

}
echo '</ul>';
} else {
die("Ce nom n'est pas présent !");
}
}
?>

Le script recherche un mot et l'affiche , après sa j'aimerais que le mot trouver soit supprimer du fichier .txt
J'ai essayer la fonction fopen 'w' mais le fichier s'efface totalement , aidez moi svp sa fait toute une nuit que je cherche sur le net et je galère !
A voir également:

10 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
10 oct. 2009 à 23:01
Yo!

Explications en commentaire dans le code:
<?php
} else {
$resultats =array();

/* Prend le contenu du fichier d'un coup */
$content = file_get_contents(FICHIER);
$pattern = '|\b' . preg_quote($_POST['mot']) . '\b|i';

/* cherche combien de fois il trouve le mot, le tableau de résultat sera dans... $resultats ;-) */
$nb = preg_match_all($pattern, $content, $resultats));
echo "$mot trouvé $nb fois";

/* remplace toutes les occurences de $mot par rien */
$content = preg_replace($pattern, "", $content);

/* Réécris le tout */
file_put_contents(FICHIER, $content);


Voilà.
Bon, tu aurais aussi pu le faire en utilisant fopen/fread/fwrite, mais la démarche aurait été la même: il
aurait fallu réécrire tout le fichier, donc mémoriser tout le fichier, remplacer les occurences, et réécrire
le tout.
2
Bonjour Killian
Je voudrais te remercier énormemen car c'est la première fois qu'on me répond a un sujet sur un forum. et j'ai passer une nuit sans dormir a chercher, je vais utiliser les variables que tu ma donner et essayer de faire fonctionner mon script, si j'arrive a le faire je vais le poster une fois terminé Mille merci de m'avoir aider.
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
10 oct. 2009 à 23:21
et j'ai passer une nuit sans dormir a chercher

Voui, j'avais cru déceler une certaine detresse. On est tous passé par là :-)
0
Sa donnerais quoi mixé avec mon code ? je dois le mettre a la suite du code ou...
Car cela m'affiche une partie du code sur ma page ,j'avoue que j'ai du mal a l'insérer dedans.
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
10 oct. 2009 à 23:42
Attention, je n'ai pas testé, et en plus j'ai pas fait de Php depuis quelques temps
Mais en gros ca donnerait ça:

<?php
define('FICHIER', 'noms.txt');

if (!isset($_POST['valider'])) {
?>
<form method="POST">
Mot recherché : <input type="text" name="mot" value=""/><br/>
<input type="submit" value="valider" name="valider"/>
</form>

<?php
} else {
$resultats =array();
$mot = $_POST['mot'];

/* Prend le contenu du fichier d'un coup */
$content = file_get_contents(FICHIER);
$pattern = '|\b' . preg_quote($mot) . '\b|i';

/* cherche combien de fois il trouve le mot, le tableau de résultat sera dans... $resultats ;-) */
$nb = preg_match_all($pattern, $content, $resultats);

if ($nb > 0) {
	echo "$mot trouvé $nb fois";

	/* remplace toutes les occurences de $mot par rien */
	$content = preg_replace($pattern, "", $content);

	/* Réécris le tout */
	file_put_contents(FICHIER, $content);

	echo '<ul>';
	foreach ($resultats as $v) {
		echo "<li>$v</li>";
	}
	echo '</ul>';
} else {
	die("Ce nom n'est pas présent !");
}
}
?> 
0
Je pensais que oui...mais... non!

voici ce qui reste afficher sur ma page :'(

0) { echo "'$mot' trouvé $nb fois :"; /* remplace toutes les occurences de $mot par rien */ $content = preg_replace($pattern, "", $content); /* Réécris le tout */ file_put_contents(FICHIER, $content); echo '

* '; foreach ($resultats as $v) { echo "$v
"; } echo '

'; } else { die("Ce nom n'est pas présent !"); } } ?>

j'ai essayer de fermer ou ouvrir des {} mais rien ni fait..

est tu sur que ce code peut être fonctionnel ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai remplacer la syntaxe ..
par sa if (0<$nb) {

mais sa bug encore sa maffiche sa sur ma page

# '; foreach ($resultats as $v) { echo "$v
"; } echo ''; } else { die("Ce nom n'est pas présent !"); } } ?>

bon jespere que la premiere syntaxe est la bonne , je vais essayer de reparer le reste
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 oct. 2009 à 00:14
Avec quel éditeur tu l'as enregistré? Tu es sûr que l'extension est bien .php ?
0
Oui absoluement
Sous bloc note ou Adobe Dreamweaver c'est la même... pourtant les syntaxes on l'air bonne
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 oct. 2009 à 00:17
Tu as quoi quand tu regardes la source html depuis le navigateur?
(Mets le résultat entre balises code)
0
J'ai le html qui est normal (les boutton les cases..)
et juste en dessous
j'ai sa

# '; foreach ($resultats as $v) { echo "$v
"; } echo ''; } else { die("Ce nom n'est pas présent !"); } } ?>


et quand j'avais pas modifier la premiere syntaxe javais tout le code a partir de if (0<$nb) {


C'est bizzare quand meme
0
ooops
Sa venais de mon serveur
en fait la seul erreur que genere le code

c sa


Fatal error: Call to undefined function: file_put_contents() in /home/sites/xxxxxxxx/public_html/ip/mot2.php on line 30
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 oct. 2009 à 00:33
En ce cas, remplaces ça par
$fp = fopen(FICHIER, "w") or die("gnagnagna");
fwrite($fp, $content);
fclose($fp);
0
Voici la source complète qui fonctionne maintenant :

<?php
define('FICHIER', 'noms.txt');

if (!isset($_POST['valider'])) {
?>
<form method="POST">
Mot recherché : <input type="text" name="mot" value=""/><br/>
<input type="submit" value="valider" name="valider"/>
</form>

<?php
} else {
$resultats =array();
$mot = $_POST['mot'];

/* Prend le contenu du fichier d'un coup */
$content = file_get_contents(FICHIER);
$pattern = '|\b' . preg_quote($mot) . '\b|i';

/* cherche combien de fois il trouve le mot, le tableau de résultat sera dans... $resultats ;-) */
$nb = preg_match_all($pattern, $content, $resultats);

if ($nb > 0) {
echo "$mot trouvé $nb fois";

/* remplace toutes les occurences de $mot par rien */
$content = preg_replace($pattern, "", $content);

/* Réécris le tout */

$fp = fopen(FICHIER, "w") or die("gnagnagna");
fwrite($fp, $content);
fclose($fp);

echo '<ul>';
foreach ($resultats as $v) {
echo "<li>$v</li>";
}
echo '</ul>';
} else {
die("Ce nom n'est pas présent !");
}
}
?>

Je sais que sur les forums en cherchant sur google, pas mal de monde cherche une solution similaire , je te remercie enorement Killian , c'est pas façile le php quand on débute :)

Je posterai a nouveau la source inchallah quand j'orais tout compléter & terminer.
0