Hej gruppe.
Jeg er ved at lave et kundesystem, hvor at man kan søge efter kunder.
Ved søgningen vil jeg bare have et enkelt tekstfelt, hvori man kan
skrive fornavn, efternavn, telefonnummer eller whatever, hvorefter den
så finder det, ud fra en søgning i en MySQL-database.
Når kunden er fundet via. navn, vil jeg have den til at udskrive navnet,
med teksten i tekstfeltet markeret.
Jeg replacer derfor det indtastede ud med:
"<font style="background-color: blue; color: white;">Indtastet
tekst</font>".
Problemet er så, at hvis der er skrevet flere ord (jeg laver split() på
mellemrum), så kan den jo komme til at replace min HTML-kode (altså hvis
den allerede har markeret noget, vil der allerede være HTML i det den
replacer, og jeg kan få et tilfælde lignende dette:
Indtast:
<font style="background-<font style="background-color: blue; color:
white;">color</font>: blue; color: white;">lala</font>la
Her har den altså erstattet HTML'en ud med HTML, så der står to tags
oven i hinanden.
Lige umiddelbart har jeg svært ved at tænke mig frem til en løsning.
Er der nogen der har nogen forslag?
Koden til søgningsscriptet kan ses her:
<script language="JavaScript">
ar_ids = new Array();
ar_fornavn = new Array();
ar_efternavn = new Array();
ar_telefon_hjem = new Array();
ar_telefon_arbejde = new Array();
ar_telefon_mobil = new Array();
tex_search = document.getElementById("texsearch");
div_result = document.getElementById("divresult");
tex_search.focus();
<?
$count = 0;
$f_gk = mysql_query("SELECT * FROM ebs_kunder WHERE aboid =
'$in_abo[nr]' ORDER BY fornavn, efternavn") or die(mysql_error());
while($d_gk = mysql_fetch_assoc($f_gk)){
$count++;
?>
ar_ids[<?=$count?>] = "<?=$d_gk[nr]?>";
ar_fornavn[<?=$d_gk[nr]?>] = "<?=$d_gk[fornavn];?>";
ar_efternavn[<?=$d_gk[nr]?>] = "<?=$d_gk[efternavn];?>";
ar_telefon_hjem[<?=$d_gk[nr]?>] = "<?=$d_gk[telefon_hjem]?>";
ar_telefon_arbejde[<?=$d_gk[nr]?>] = "<?=$d_gk[telefon_arbejde]?>";
ar_telefon_mobil[<?=$d_gk[nr]?>] = "<?=$d_gk[telefon_mobil]?>";
<?
}
?>
function search_change(){
div_result.innerHTML = "";
count_found = 0;
if (tex_search.value.length > 0){
mysplit = tex_search.value.split(" ");
for(i_ids in ar_ids){
tha_found = true;
tha_string = ar_fornavn[i_ids] + " " + ar_efternavn[i_ids];
tha_origstring = tha_string;
for(i_words in mysplit){
tha_word = mysplit[i_words];
tha_word_found = false;
if (tha_word.length > 0){
if (tha_word_found == false &&
ar_fornavn[i_ids].toLowerCase().indexOf(tha_word.toLowerCase()) > -1){
tha_word_found = true;
}
if (tha_word_found == false &&
ar_efternavn[i_ids].toLowerCase().indexOf(tha_word.toLowerCase()) > -1){
tha_word_found = true;
}
if (tha_word_found == false &&
ar_telefon_hjem[i_ids].toLowerCase().indexOf(tha_word.toLowerCase()) > -1){
tha_word_found = true;
}
if (tha_word_found == false &&
ar_telefon_arbejde[i_ids].toLowerCase().indexOf(tha_word.toLowerCase())
> -1){
tha_word_found = true;
}
if (tha_word_found == false &&
ar_telefon_mobil[i_ids].toLowerCase().indexOf(tha_word.toLowerCase()) > -1){
tha_word_found = true;
}
if (tha_word_found == true){
tha_start = tha_string.toLowerCase().indexOf(tha_word.toLowerCase());
if (tha_start >= 0){
tha_end = tha_word.length;
tha_marked = tha_string.substr(tha_start, tha_end);
tha_startstring = tha_string.substr(0, tha_start);
tha_endstring = tha_string.substring(tha_start + tha_end);
tha_string = tha_startstring + "<font style=\"background-color:
#316AC5; color: white;\">" + tha_marked + "</font>" + tha_endstring;
}
}else{
tha_found = false;
}
}
}
if (tha_found == true){
div_result.innerHTML = div_result.innerHTML + "<br>" + tha_string;
count_found++;
}
}
if (count_found == 0){
div_result.innerHTML = "<i>Der blev ikke fundet nogle resultater.</i>";
}
}else{
div_result.innerHTML = "<i>Indtast noget i søgningsfeltet.</i>";
}
}
</script>
--
Med venlig hilsen
Kasper Johansen
|