Problème script de recherche avec fichier

[Résolu/Fermé]
Signaler
-
 Utilisateur anonyme -
Bonjour, j'ai un script qui permet d'écrire un article et qui stocke son contenu dans un fichier, mais je n'arrive pas à voir comment je peux modifier mon ancien code pour qu'il recherche dans le fichier : (j'ai enlever la colonne 'contenu' de ma bdd)
$articleParPage = 5; 
    $articleTotalesReq = $bdd->prepare('SELECT * FROM article_articles WHERE verif = 1 AND CONCAT(titre, contenu) LIKE :queryString');
    $articleTotalesReq->execute(array(':queryString' => '%'.$q.'%'));
    $articleTotales = $articleTotalesReq->rowCount();
    $pagesTotales = ceil($articleTotales/$articleParPage);
    if(isset($_GET['page']) AND !empty($_GET['page']) AND intval($_GET['page']) > 0 AND $_GET['page'] <= $pagesTotales) {
        $_GET['page'] = intval($_GET['page']);
        $pageCourante = $_GET['page'];
    } else {
        $pageCourante = 1;
    }
    $depart = ($pageCourante-1)*$articleParPage;
    $articles = $bdd->prepare('SELECT * FROM article_articles WHERE titre AND verif = 1 LIKE CONCAT("%", :query, "%") ORDER BY id DESC LIMIT :debut, :nombre');
    $articles->bindParam(':debut', $depart, PDO::PARAM_INT);
    $articles->bindParam(':nombre', $articleParPage, PDO::PARAM_INT);
    $articles->bindParam(':query', $q, PDO::PARAM_STR);
    $articles->execute();
    if($articles->rowCount() == 0) {
        $articles = $bdd->prepare('SELECT * FROM article_articles WHERE verif = 1 AND CONCAT(titre, contenu) LIKE CONCAT("%", :query, "%") ORDER BY id DESC LIMIT :debut, :nombre');
        $articles->bindParam(':debut', $depart, PDO::PARAM_INT);
        $articles->bindParam(':nombre', $articleParPage, PDO::PARAM_INT);
        $articles->bindParam(':query', $q, PDO::PARAM_STR);
        $articles->execute();
    }

Juste pour info, les fichiers créés sont sous cette forme : article_numDeLarticle.txt
Merci d'avance
Nils0

1 réponse

Messages postés
33154
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juillet 2021
3 643
Bonjour,


pour qu'il recherche dans le fichier

Pour ça .. tu peux lire le fichier ligne par ligne jusqu'à trouver l'info cherchée
https://www.php.net/manual/fr/function.fgets.php

NB : EN PDO .. on place les requêtes dans des blocs TRY/CATCH pour intercepter les éventuelles erreurs
NB² : EN PDO .. on n'utilise pas ROWCOUNT avec une requête SELECT. A la place on fera un FETCHALL puis un COUT sur la variable

NB" : On récupère PROPREMENT les variables AVANT de les utiliser !
Par exemple :
    if(isset($_GET['page']) AND !empty($_GET['page']) AND intval($_GET['page']) > 0 AND $_GET['page'] <= $pagesTotales) {
        $_GET['page'] = intval($_GET['page']);
        $pageCourante = $_GET['page'];
    } else {
        $pageCourante = 1;
    }

S'écrit plus proprement :
 $pageCourante = !empty($_GET['page']) && intval($_GET['page'])>0 && intval($_GET['page'])<= $pagesTotales ? intval($_GET['page']) : 1;

Utilisateur anonyme
merci de ta réponse, comme j'ai dit, c'est mon "ancien code" que je suis en train de modifier ;)
Utilisateur anonyme
J'ai pas totalement fini, mais pour le moment, j'ai fais ça :
<?php
$mot = 'usb';
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator('groups/contenu/')) as $file){
	if(is_file($file)){
		$handle = fopen($file, 'r');
		if($handle) {
    		while(($buffer = fgets($handle, 4096)) !== false) {
        		if(preg_match("#$mot#", $buffer)){
        			echo $file.' : mot trouvé<br />';
        		}
    		}
    		fclose($handle);
		}
	}
}
?>