2010-10-06 5 views
0
$queryString = mysql_real_escape_string($_POST['queryString']); 
list($firstname, $lastname) = array_map('ucfirst', explode(' ', $queryString, 2)); 
$query = mysql_query("SELECT users.firstname, users.lastname, users.id 
FROM users INNER JOIN users_friends ON users.id=users_friends.uID 
WHERE bID=$USER AND type = '$type' AND (users.firstname LIKE '%$queryString%' OR users.lastname LIKE '%$queryString%') 
LIMIT 10; 
"); 
while ($result = mysql_fetch_object($query)) { 
$re_fname='<b>'.$firstname.'</b>'; 
$re_lname='<b>'.$lastname.'</b>'; 
$final_fname = str_ireplace($firstname, $re_fname, $result->firstname); 
$final_lname = str_ireplace($lastname, $re_lname, $result->lastname); 
      echo $final_fname. ' '; 
      echo $final_lname.' '; 
} 

Ceci est mon code pour la partie recherche dans mon menu déroulant autosuggest ..PHP: Gras lastname autosuggest trop

Je veux ce que vous avez cherché obtenir le texte en gras. Exemple si vous tapez "Meg" puis le "Meg" dans Megan, est en gras.

Cela fonctionne très bien sans aucun problème. Mais le nom de famille ne fonctionne pas.

Lorsque je tape "Fo" ou "Fox" ou "F" (Megan Fox), le nom de famille ne s'affiche pas en gras. Pourquoi cela ne fonctionne-t-il pas, et comment puis-je résoudre ce problème? Est-ce parce que $ lastname est le texte après l'espace, mais j'ai même essayé "Megan F" ou le "Megan fox" complet seulement Megan devient gras, pas "Fox".

+0

Quel est le HTML et le code JavaScript qui peuvent en découler? – webbiedave

Répondre

0

Cela fonctionne pour moi:

<?php 
list($firstname, $lastname) = array_map('ucfirst', explode(' ', 'meg f'/*hardcoded*/, 2)); 
if(!$lastname) 
$lastname = $firstname; 
$re_fname='<b>'.$firstname.'</b>'; 
$re_lname='<b>'.$lastname.'</b>'; 
$final_fname = str_ireplace($firstname, $re_fname, 'Megan'/*hardcoded*/); 
$final_lname = str_ireplace($lastname, $re_lname, 'Fox'/*hardcoded*/); 
echo $final_fname. ' '; 
echo $final_lname; 
?> 

Et oui, si vous ne disposez pas d'un espace, vous obtiendrez une valeur uniquement pour $firstname.

Vous devez également prendre en compte les expressions régulières pour les caractères insensibles à la casse, mais en remplaçant la casse.

+0

Je n'ai toujours pas trouvé pourquoi ça ne marcherait pas avec moi. Si j'utilise if ($ $ lastname) $ lastname = $ firstname; et puis tapez "Fo" alors il gras comme il le devrait, mais pas les deux (premier et lastname) – Johnson

+0

Vous voulez dire que vous avez copié collé mon exemple de script et il ne produit pas: * Meg * an * F * ox? –