PHP Rechercher mot dans txt et supprimer

Résolu
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 !
Configuration: Windows XP
Firefox 3.5.3

10 réponses

  1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    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
  2. Nicooo
     
    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
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      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
  3. Nicooo
     
    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
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      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
  4. Nicooo
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Nicooo
     
    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
  7. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Avec quel éditeur tu l'as enregistré? Tu es sûr que l'extension est bien .php ?
    0
  8. Nicooo
     
    Oui absoluement
    Sous bloc note ou Adobe Dreamweaver c'est la même... pourtant les syntaxes on l'air bonne
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      Tu as quoi quand tu regardes la source html depuis le navigateur?
      (Mets le résultat entre balises code)
      0
  9. Nicooo
     
    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
  10. Nicooo
     
    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
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      En ce cas, remplaces ça par
      $fp = fopen(FICHIER, "w") or die("gnagnagna");
      fwrite($fp, $content);
      fclose($fp);
      0
  11. Nicooo
     
    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