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 !
A voir également:
- Trouver erreur de syntaxe fichier txt
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
10 réponses
Yo!
Explications en commentaire dans le code:
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.
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.
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.
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:
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 ?
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
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
Oui absoluement
Sous bloc note ou Adobe Dreamweaver c'est la même... pourtant les syntaxes on l'air bonne
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
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
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.
<?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.