PHP Rechercher mot dans txt et supprimer
Résolu
nicooo
-
Nicooo -
Nicooo -
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 !
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 !
Configuration: Windows XP Firefox 3.5.3
10 réponses
-
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. -
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. -
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.-
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 !"); } } ?>
-
-
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 ? -
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 -
Avec quel éditeur tu l'as enregistré? Tu es sûr que l'extension est bien .php ?
-
Oui absoluement
Sous bloc note ou Adobe Dreamweaver c'est la même... pourtant les syntaxes on l'air bonne -
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 -
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 -
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.