Problème de fin de semaine avec substr
Bonsoir à tous,
Fin de semaine chagrin, voila mon souci de fin de semaine:
J'ai un texte format en FULLTEXT dans une base de données.
J'ai une table avec des index type Fc , Mt, Jn.
Mon problème retrouver des bouts de phrase commençant par ces index dans le Texte.
Voila mon script
$Texte étant le texte venant de la première Table en FULLTEXTE
// Appel à la Table des index
$query = "SELECT * FROM `IndexB` ORDER BY IndexB";
$result = mysql_query($query);/* passage de la requette et récupération des pointeurs */
while ($row = mysql_fetch_array($result))/* récupération des valeurs dans un tableau */
{
$IndexR =$row["IndexB"];
//Je positionne le début de la Phrase a sélectionner
$indexR0 = strrpos($Texte, $IndexR);
//Je cré un nouvel indice afin de choisir uen partie plus longue de la phrase commençant par exemple par Jn (7 caractère en plus)
$indexR7=$indexR0+7;
}
/* fermeture de la connection */
mysql_close($connect);
//5144 et 5151 sont respectivement les positions du début de Phrase qui m'intéresse et 5151 la fin du morceau de phrase qui me va bien
$rest = substr ("$Texte", 5144, 5151);
//J'essaye de récupérer ce bout de phrase et là problème
print"$IndexR $indexR0, $indexR7 $rest<br>";
C'est une partie du texte que je récupère et pas ce bout de phrase.
Alors si une âme charitable pouvait m'ouvrir les yeux, qui doivent être fermés, merci par avance à....
Je ne n'ai pas tout compris, mais en gros, tu as un index_debut et un index_fin (qui donnent un nombre de caracteres), et toi, tu veux le texte contenu entre ces deux index, c'est ca ?
Si oui, alors, essaye un :
<?php
$rest = substr ($ta_chaine_entier, $index_depart, $index_fin-$index_depart);
?>
Merci, je suis vraiment fatigué, il y avait aussi la possibilité de faire:
$rest = substr("$Texte",$indexR0, 10);
Mais il me reste a solutionner ma récup de variable je récupère par exemple dans un texte
Gn 1403, 1428 Gaudhtm et spes, n" 10.
Jn 13316, 13341 Jésus est le seul Ami qui
Lc 13487, 13512 Lc 10, 25.
Mc 5215, 5240 Mais au moment de sa jeun
Mt 5275, 5300 Mais au moment de sa jeun
La première récupération et la 3 ème sont bonnes mais les autres sont farfelues puisque Jn ne figure pas dans la deuxième récup et idem pour les 2 dernières, alors que j'ai "1. Cf. : Jn 15,13" dans ce texte.
Par avance merci, inutile de te dire que c'est sur des textes biblique que je travaille.
Je n'ai pas compris en fait.
Si tu fais ton substr dans le while, il le fait à chaque fois non ?
Et pas une fois sur deux.
Il doit y avoir un truc comme cela, mais vu que je peux avoir plusieur indexation de rappel à la Bible, je vois pas comment faire pour couvrir tous les index.
$query = "SELECT * FROM `IndexB` ORDER BY IndexB";
$result = mysql_query($query);/* passage de la requette et récupération des pointeurs */
while ($row = mysql_fetch_array($result))/* récupération des valeurs dans un tableau */
{
$indexR0 = strrpos($Texte, $row["IndexB"]);
$indexR7 = $indexR0+25;
$rest = substr ($Texte, $indexR0, $indexR7-$indexR0);
//$rest = substr("$Texte",$indexR0, 10);
print"$row[IndexB] $indexR0, $indexR7 $rest<br>";
$vB = $rest;
$vB1 = "<span style='color: #000000; background-color: #FFFFFF'><b>$rest</b></span>";
$Texte = str_replace($vB, $vB1, $Texte);
}
/* fermeture de la connection */
mysql_close($connect);
Y'a tellement de variables dans le truc que je comprend rien :/
Tu ne voudrais pas nous expliquer "en francais" ce que tu souhaites faire ?
Complément d'information:
Mon Moteur de recherche trouve en premier lieu plusieurs textes (avec un maximum de 10 mots) dans une Table, ensuite si l'internaute clique sur un texte ayant cette occurence, le texte apparait avec ces mots surligné et si dans ce texte il y a des index en rapport avec l'ancien ou le nouveau testament appel d'une nouvelle table ou son indexé Lc pour évangile selon Luc, Mt évangile selon MATTHIEU etc... et la le passage de texte comportant Jn doit être mis en évidence exemple sélection de Jn 1,25 et va devenir cliquable pour avoir accès à l'évangile selon St Jean 1 chapitre 25 et voila mon usine à gaz.
Mon seul problème c'est de sélectionner un bout de texte en partant d'un index (exemple Jn) sélectionner Jn 1,25 ou Jn 1,25 - 30 etc.. j'y arrive mais la sélection n'est pas 100% optimale, voir mail précédent.
Je crois que je suis sur la voix
Je crois que j'ai trouvais d'où peut provenir le problème l'instruction 'strrpos ' ne doit pas prendre comme indecx de recherche Jn ou Lc mais seulement J ou L. Maintenant il me reste à trouver l'astuce.
Pour ceux que cela intéresse:
$query = "SELECT * FROM `IndexB` ORDER BY IndexB";
$result = mysql_query($query);/* passage de la requette et récupération des pointeurs */
while ($row = mysql_fetch_array($result))/* récupération des valeurs dans un tableau */
{
$rest = str_pad($row["IndexB"], 1 , " ");
//
//$rest = substr("$Texte",$indexR0, 10);
//$last = substr(strrchr($Texte, $row["IndexB"]), 1 );
//$pos= strspn($Texte,$row["IndexB"] );
//$last=stristr($Texte,$row["IndexB"]);
if (preg_match("/\b$rest\b/i", $Texte)) {
$indexR0 = strrpos($Texte, $rest);
$index = substr("$Texte",$indexR0, 10);
print"$row[IndexB] - $rest $index<br>";
$vB = $index;
$vB1 = "<span style='color: #000000; background-color: #FFFFFF'><b>* $index *</b></span>";
$Texte = str_replace($vB, $vB1, $Texte);
}
}
/* fermeture de la connection */
mysql_close($connect);
Dernière chose à rectifié il semblerais que Jn pose un problème de reconnaissance car il m'affiche Jé et J'
Je continu ma réflexion dans la solitude du WEB
Mon problème ne réside pas dans les requêtes, mais dans la sélection d'un Index exemple Jn (pour Jean) dans un texte:
Ces fonctions :
if (preg_match("/\b$rest\b/i", $Texte)) {
$indexR0 = strrpos($Texte, $rest);
$index = substr("$Texte",$indexR0, 10);
print"$row[IndexB] - $rest $index<br>";
$vB = $index;
$vB1 = "<span style='color: #000000; background-color: #FFFFFF'><b>* <a href=\"Bible.php?Lg=$Lg&index=$index\" target=\"_blank\">$index</a> *</b></span>";
$Texte = str_replace($vB, $vB1, $Texte);
}
me renvois
Lc 10, 25 pour LUC
Mais
Je -->Jésus est
Jn -->Jésus est
Alors qu'il y a Jn 15,13 dans le Texte, voila mon problème
A+