Calculer le nombre de mots clés trouvés dans plusieurs tableaux

Eléphanteau du PHP | 12 Messages

26 juin 2020, 12:23

Salut;

Encore une fois je me vois contraint de revenir aux experts pour trouver le bon script à afficher reliant PHP et Base de donnée.

je développe une recherche par mots clés dont le résultat sera affiché dans 03 tables Article, Auteurs et Titres. le script ci-dessous concerne le résultat sur une table , il sera développé aux 2 autres si je réussis à le faire afficher ds la 01 table, pour cela j'ai utilisé 02 (code différents) que je recherche à développer pour en retenir un seul :

1 - soit que le résultat concerne les mots clés trouvés dans les 03 tables ensemble ( objectif idéal de ma présentation, il sera affiché en haut de la page) voilà le code utilisé mais qui ne fonctionne pas :^o

Code : Tout sélectionner

<?php if (isset ( $_POST['submit-search'])){ $search = mysqli_real_escape_string ($conn, $_POST['search']); $qry =("SELECT COUNT(*) AS 'count' FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' GROUP BY 4_etat.id_etat "); $qry_result = mysqli_query ($conn, $qry ); while($rows = mysql_fetch_assoc($qry_result)){ $output = "Total scor tem". " ". $rows['count']; } } ?>
Voilà le résultat de la requete :

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, object given in C:\wamp64\www\MAWSUAT1\21_22_rmc.php on line 8 :oops:

2 - soit que le résultat concerne les mots clés trouvés dans chaque tableau, solution moins agréable à mes yeux, que j'ai réussi à obtenir grace au code suivant appliqué pour chaque tableau (ex 01 tabeau) :

Code : Tout sélectionner

<?php if (isset ( $_POST['submit-search'])){ $search = htmlspecialchars ($_POST['search']); $search = trim ($_POST['search']); $search = stripslashes ($_POST['search']); $search = strip_tags ($_POST['search']); $search = mysqli_real_escape_string ($conn, $_POST['search']); $query =("SELECT * FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' "); $result =mysqli_query ($conn, $query ); if ($queryResult = $_POST['search']){ $queryResult = mysqli_num_rows($result); echo "<p style = 'font-weight:bold; '>Nombre de résultats ".$queryResult."</p>"; while ($queryResult = mysqli_fetch_array( $result)){ ?> <tr> <td><?php echo $queryResult['Supleta'];?></td> <td><?php echo $queryResult['extr'];?></td> <td><?php echo $queryResult['infopub'];?></td> </tr> <?php } } else { echo "<p style = 'font-weight:bold; '>Vous n'avez pas écrit de mot </p>";} } ?>
l'inconvénient avec cette 02ème méthode s'est qu'elle donne le résultat par nombre de lignes ainsi si le mot recherché se répète 02 fois dans la même ligne il sera compté 1 fois et non 02 fois. #-o

Merci de m'accompagner à résoudre ce script assez complexe =P~

Eléphanteau du PHP | 25 Messages

27 juin 2020, 15:53

Bonjour,

Dans le premier exemple il faut changer ce passage là :

Code : Tout sélectionner

while($rows = mysql_fetch_assoc($qry_result)){
par :

Code : Tout sélectionner

while ($rows = $qry_result->fetch_assoc()) {

Eléphanteau du PHP | 12 Messages

27 juin 2020, 20:01

Salut ;
- le bout de code que tu m'as conseillé à certes fait disparaitre le Warninig, mais rien d'autre .
- pour ce qui est de ma 02 ème méthode, je viens de constater qu'il est normal que le nombre de réponse soit afficher par ligne du moment que ma requete prévoit le search sur un seul champs
 $query =("SELECT * FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' ");
j'augmente le nombre de champ à rechercher ds ma requete pour pouvoir obtenir "02 search" sur une même ligne comme suite:
$query =("SELECT * FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' OR 4_etat.autre LIKE '%{$search}%' ");
- je modifie ma BDD pour ajouter le même mot , mais le résultat est tjr le même 8-|
Toute autre assistance est la bien venue

Eléphanteau du PHP | 12 Messages

02 juil. 2020, 11:41

Salut;

je préfère me concentrer sur la 01 ère méthode car elle permet de donner des résulter sur + eurs tableaux. le souci c'est qu'elle affiche ce résultat par ligne et non par occurrence du mot clé (répétition).
on m'a conseillé l'utilisation de
 substr_count()
mais je ne sais comment l'inclure dans le code suivant (résultat sur 02 tables )
code : voilà comment obtenir le Count des tables dans lequel je dois inclure
 substr_count()
:

Code : Tout sélectionner

<?php if (isset ( $_POST['submit-search'])){ $search = mysqli_real_escape_string ($conn, $_POST['search']); $qry =("SELECT COUNT(*) AS 'count' FROM 4_etat JOIN 5_edition ON 5_edition.id_edit = 4_etat.id_etat WHERE 4_etat.titre LIKE '%{$search}%' OR 4_etat.autre LIKE '%{$search}%' OR 5_edition.titredt LIKE '%{$search}%' "); $qry_result = mysqli_query ($conn, $qry ); while($rows = $qry_result->fetch_assoc()){ echo "nombre "." ". $rows['count']; } } ?>
voilà code pour avoir le mot clés sur les 02 tables

Code : Tout sélectionner

<table border ="1" cellpadding = "7" align = "center" style="font-weight: bold; text-align:center;"> <?php if (isset ( $_POST['submit-search'])){ $search = mysqli_real_escape_string ($conn, $_POST['search']); $query =("SELECT * FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' OR 4_etat.autre LIKE '%{$search}%' "); $result =mysqli_query ($conn, $query ); if ($queryResult = $_POST['search']){ $queryResult = mysqli_num_rows($result); echo "<p style = 'font-weight:bold; '>Nombre de résultats ".$queryResult."</p>"; while ($queryResult = mysqli_fetch_array( $result)){ ?> <tr> <td><?php echo $queryResult['autre'];?></td> <td><?php echo $queryResult['titre']; ?></td> </tr> <?php } } ?> <table/> <table border ="1" cellpadding = "7" align = "center" style="font-weight: bold; text-align:center;"> <?php if (isset ( $_POST['submit-search'])){ $search = mysqli_real_escape_string ($conn, $_POST['search']); $query =("SELECT * FROM 5_edition JOIN 4_etat ON 5_edition.id_edit = 4_etat.id_etat WHERE 5_edition.titredt LIKE '%{$search}%'"); $result = mysqli_query ($conn, $query ); if($queryResult = ($_POST['search'])) { $queryResult = mysqli_num_rows($result); echo "<p style = 'font-weight:bold; '>Nombre de résultats ".$queryResult."</p>"; while ( $queryResult = mysqli_fetch_array($result)){ ?> <tr> <td><?php echo $queryResult['titredt']; ?></td> </tr> <?php } } } ?> <table/>
j'ai besoin d'inclure
 substr_count()
dans le 01 code :?

Avatar du membre
Mammouth du PHP | 1609 Messages

02 juil. 2020, 23:53

Salut, dans l'idée c'est je pense quand tu parcours les résultats. Tu peux faire un substr_count(queryResult['titre'], $search); pour déterminer combien de fois le mot est présent dans la chaîne.

Attention toutefois : Notez que needle est sensible à la casse. Ce qui n'est pas le cas du sql LIKE, il me semble.
https://www.php.net/manual/fr/function.substr-count.php
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1564 Messages

07 juil. 2020, 10:28

Bonjour,

Dans le premier exemple il faut changer ce passage là :

Code : Tout sélectionner

while($rows = mysql_fetch_assoc($qry_result)){
par :

Code : Tout sélectionner

while ($rows = $qry_result->fetch_assoc()) {
Pas du tout, il travail en style procédural donc c'est bon ;)

Par contre j'apporte ma pierre à l'édifice, tu ne fait aucune vérification du $_POST['search'] seulement du submit-search, il serait bon de faire une condition comme le submit-search pour éviter les erreurs ;)


Dans ton premier post de ce sujet, les parenthèses pour la variable suivante sont inutiles:
$qry =("SELECT COUNT(*) AS 'count' FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' GROUP BY 4_etat.id_etat ");
De plus il me semble pas qu'il faille mettre des apostrophes autour d'une "désignation": 'count' doit être count seulement, sans apostrophe (je me trompe peut être mais j'ai jamais vue l'utilisation d'apostrophe)

Les fermetures des tables HTML dans ton dernier post sont incorrecte, c'est

Code : Tout sélectionner

</table>
pas

Code : Tout sélectionner

<table/>
:wink:

Eléphanteau du PHP | 12 Messages

17 juil. 2020, 11:26

Salut;
j'ai repris la fonction

Code : Tout sélectionner

strlen
pour voir le résultat sur 02 tables, mais j'ai tjrs le résultat par nombre de lignes et non par (occurrence) de MC recherchés, voilà mon nouveau script :
<?php 
     if (isset ( $_POST['submit-search'])){
     $search = mysqli_real_escape_string ($conn, $_POST['search']);
     $qry =("SELECT COUNT(*) AS 'count' FROM (4_etat JOIN 5_edition ON 5_edition.id_edit = 4_etat.id_etat) JOIN 6_transl ON 6_transl.id_trsl = 5_edition.id_edit WHERE 4_etat.titre LIKE '%{$search}%' OR 4_etat.autre LIKE '%{$search}%' OR 5_edition.titredt LIKE '%{$search}%' OR 5_edition.refedt LIKE '%{$search}%'");
	 $qry_result = mysqli_query ($conn, $qry );
	  while($rows = $qry_result->fetch_assoc()){
		  
         strlen($search);
       echo "nombre "." ". $rows['count'];
	 
	  }
	 }
 ?>
Merci de me corriger le script

Avatar du membre
Mammouth du PHP | 1564 Messages

17 juil. 2020, 12:14

"Merci de me corriger le script"

Merci de lire un minimum la doc concernant strlen, il suffit de l'afficher avec echo...

Pour info la doc est ici: https://www.php.net/manual/fr/

fonction strlen: https://www.php.net/manual/fr/function.strlen.php