Archiv verlassen und diese Seite im Standarddesign anzeigen : suche soll gross/kleinschreibung ignorieren, aber wie ?
ich habe eine fertiges script mit suchfunktion, leider unterscheidet die suche
gros-und kleinschreibung, was wenig sinnvoll ist.
wie kann ich das ändern, bzw. nach was muss ich im script suchen ??
joey.brunner
07-02-2003, 14:11
script posten bitte
<?
// ************************************************** *****************
// include/results.php
// ************************************************** *****************
if(isset($term) && strlen($term)>0){
if(!isset($sr)){
$sr=0;
}
if($logic == "phrase"){
$st[0] = $term;
} else {
$term = eregi_replace("\+", " ", $term);
$st = explode(" ", $term);
$cst = sizeof($st);
if($cst > 1){
$sterm .= $st[0];
for($p=1; $p<$cst; $p++){$sterm .= "+" . $st[$p];
}
} else {
$sterm .= $st[0];
}
}
$i = 0;
while($st[$i]){
if(strlen($st[$i]) > 2){
$split_term[] = $st[$i];
} else {
$removed[] = $st[$i];}
$i++;
}
$i = 0;
while($split_term[$i]){
if(strlen($split_term[$i]) > 2){
$new_term .= $split_term[$i]." ";
}
$i++;
}
$i = 0;
if(strlen($new_term)>2){
if($ns!=1){
$record_term = sql_query("
insert into $tb_terms(
ID,
Term
) values (
'',
'$new_term'
)
");
}
}
while($removed[$i]){
$removed_term .= $removed[$i];
if($removed[$i+1]) {$removed_term .= ",";
}
$i++;
}
$removed_html = stripslashes($new_term);
if($removed_term){
$removed_html .= " (";
$removed_html .= trim($removed_term).") " . $results_1;
}
if($logic == "or"){
$sites_sql = "
select
$tb_links.ID as site_id,
$tb_links.SiteName as site_name,
$tb_links.SiteURL as site_url,
$tb_categories.Category as category_name,
$tb_categories.ID as cat_id,
$tb_links.Added as added,
$tb_links.LastUpdate as last_update,
$tb_links.Description as site_description,
$tb_links.Country as country,
$tb_links.HitsIn as hits_in,
$tb_links.HitsOut as hits_out,
count($tb_reviews.ID) as total_reviews
from
$tb_links
left join
$tb_categories
on
$tb_links.Category=$tb_categories.ID
left join
$tb_reviews
on
$tb_links.ID=$tb_reviews.SiteID
where (";
if(isset($search_cat) && $search_cat != 0){
$sites_sql .= "(";
}
$i = 0;
while($split_term[$i]){
$sites_sql .= "$tb_links.SiteURL like '%$split_term[$i]%'";
if($split_term[$i+1]){
$sites_sql .= " or ";
}
$i++;
}
$sites_sql .= ") or (";
$i = 0;
while($split_term[$i]){
$sites_sql .= "$tb_links.Description like '%$split_term[$i]%'";
if($split_term[$i+1]){
$sites_sql .= " or ";
}
$i++;
}
$sites_sql .= ") or (";
$i = 0;
while($split_term[$i]){
$sites_sql .= "$tb_links.SiteName like '%$split_term[$i]%'";
if($split_term[$i+1]){
$sites_sql .= " or ";
}
$i++;
}
$sites_sql .= ") ";
if(isset($search_cat) && $search_cat != 0){
$sites_sql .= ") and ($tb_links.Category = '$search_cat') ";
}
$total_sql = $sites_sql . "group by site_id";
$sites_sql .= "group by site_id limit $sr, $pp";
} else {
$sites_sql = "
select
$tb_links.ID as site_id,
$tb_links.SiteName as site_name,
$tb_links.SiteURL as site_url,
$tb_categories.Category as category_name,
$tb_categories.ID as cat_id,
$tb_links.Added as added,
$tb_links.LastUpdate as last_update,
$tb_links.Description as site_description,
$tb_links.HitsIn as hits_in,
$tb_links.HitsOut as hits_out,
count($tb_reviews.ID) as total_reviews
from
$tb_links
left join
$tb_categories
on
$tb_links.Category=$tb_categories.ID
left join
$tb_reviews
on
$tb_links.ID=$tb_reviews.SiteID
where (";
$i = 0;
while($split_term[$i]){
$sites_sql .= "$tb_links.SiteURL like '%$split_term[$i]%'";
if($split_term[$i+1]){
$sites_sql .= " and ";
}
$i++;
}
$sites_sql .= ") or (";
$i = 0;
while($split_term[$i]){
$sites_sql .= "$tb_links.Description like '%$split_term[$i]%'";
if($split_term[$i+1]){
$sites_sql .= " and ";
}
$i++;
}
$sites_sql .= ") or (";
$i = 0;
while($split_term[$i]){
$sites_sql .= "$tb_links.SiteName like '%$split_term[$i]%'";
if($split_term[$i+1]){
$sites_sql .= " and ";
}
$i++;
}
$sites_sql .= ") ";
$total_sql = $sites_sql . "group by site_id";
$sites_sql .= "group by site_id limit $sr, $pp";
}
if(isset($term) && strlen($term)>0){
if($logic == "or"){
$cats_sql = "
select
$tb_categories.ID as category_id,
$tb_categories.Category as category_name,
$tb_categories.PID as category_pid
from
$tb_categories
where (";
$i = 0;
while($split_term[$i]){
$cats_sql .= "$tb_categories.Category like '%$split_term[$i]%'";
if($split_term[$i+1]){
$cats_sql .= " or ";
}
$i++;
}
$cats_sql .= ") ";
} else {
$cats_sql = "
select
$tb_categories.Category as category_name,
$tb_categories.ID as category_id,
$tb_categories.PID as category_pid
from
$tb_categories
where (";
$i = 0;
while($split_term[$i]){
$cats_sql .= "$tb_categories.Category
like '%$split_term[$i]%'";
if($split_term[$i+1]){
$cats_sql .= " and ";
}
$i++;
}
$cats_sql .= ") ";
}
}
$mtime1 = getmicrotime();
$site_results = sql_query($sites_sql);
$cat_results = sql_query($cats_sql);
$total_results = sql_query($total_sql);
$total = sql_num_rows($total_results);
$mtime2 = getmicrotime();
$search_time = $mtime2 - $mtime1;
$htmlsrc .= $table2 . "<tr>";
$htmlsrc .= "\r\n\t<td width=\"100%\" class=\"whatText\">" . $results_2;
$htmlsrc .= "<font class=\"slide\">" . $removed_html;
$htmlsrc .= "</font> " . $results_3;
$htmlsrc .= "<font class=\"slide\">" . substr($search_time, 0, 6);
$htmlsrc .= "</font>" . $results_4 . "...<br />";
$htmlsrc .= "</td>\r\n</tr>\r\n</table>\r\n";
echo whattable("100%","center","",$htmlsrc);
unset($htmlsrc);
$htmlsrc = $table2 . "<tr><td width=\"100%\" ";
$htmlsrc .= "class=\"whatText\">" . $results_5 . "</td></tr></table>";;
echo whattable("100%","center","",$htmlsrc);
unset($htmlsrc);
$x=0;
$htmlsrc = $table2;
while($x<25){
$htmlsrc .= "<tr>";
$pop_terms = sql_query("
select
Term,
count(*) as Count
from
$tb_terms
group by
Term
order by
Count desc
limit
$x,5
");
while($pt_rows = sql_fetch_array($pop_terms)){
$htmlsrc .= "<td class=\"slide\"> <a class=\"slide\"";
$htmlsrc .= "href=\"index.php?" . session_name() . "=" . session_id() . "&ns=1&logic=or&maximum=10&term=";
$htmlsrc .= $pt_rows[Term] . "\">" . $pt_rows[Term] . "</a>(";
$htmlsrc .= $pt_rows[Count] . ") </td>";
}
$htmlsrc .= "</tr>";
$x=$x+5;
}
$htmlsrc .= "</table>";
echo table("99%","center","",$htmlsrc);
unset($htmlsrc);
if($cp<=1){
echo draw_search_categories($cat_results, $split_term);
}
echo draw_search_sites($total, $site_results, $split_term);
$htmlsrc = $table2 . "<tr><td class=\"whatText\">" . $results_6 . "</td></tr></table>";
echo whattable("100%","center","",$htmlsrc);
unset($htmlsrc);
$htmlsrc = $table2 . "<tr><td class=\"searchEngineText\"> ";
/*-------
$htmlsrc .="<a class=\"slide\" ";
$htmlsrc .= "target=\"_blank\" href=\"index.php?" . session_name() . "=";
$htmlsrc .= session_id() . "&logic=or&maximum=10&term=";
$htmlsrc .= $sterm . "\">" . $site_title . "</a> - ";
if($SERVER_NAME != "phplinks.org" && $SERVER_NAME != "dev.phplinks.org"){
$htmlsrc .= "<a class=\"slide\" href=\"http://phplinks.org/";
$htmlsrc .= "phplinks/index.php?logic=or&maximum=10&term=" . $sterm;
$htmlsrc .= "\">phpLinks</a> - ";
}
--------*/
$htmlsrc .= "<a class=\"slide\" target=\"_blank\" ";
$htmlsrc .= "href=\"http://www.altavista.digital.com/cgi-bin/query?pg=q&what=web&q=";
$htmlsrc .= $sterm . "\">Alta Vista</a> - <a class=\"slide\"";
$htmlsrc .= "target=\"_blank\" href=\"http://www.hotbot.com/?MT=" . $sterm;
$htmlsrc .= "&DU=days&SW=web\">HotBot</a> - <a class=\"slide\" ";
$htmlsrc .= "target=\"_blank\" href=\"http://www.infoseek.com/Titles?qt=" . $sterm;
$htmlsrc .= "\">Infoseek</a> - <a class=\"slide\" target=\"_blank\" ";
$htmlsrc .= "href=\"http://www.google.de/search?q=$term&ie=UTF-8&oe=UTF-8&hl=de&btnG=Google-Suche&meta=lr%3Dlang_de\"";
$htmlsrc .= "\">Google</a> - <a class=\"slide\" target=\"_blank\" ";
$htmlsrc .= "href=\"http://www.lycos.com/cgi-bin/pursuit?query=" . $sterm;
$htmlsrc .= "&maxhits=20\">Lycos</a> - <a class=\"slide\" target=\"_blank\" ";
$htmlsrc .= "href=\"http://search.yahoo.com/bin/search?p=" . $sterm;
$htmlsrc .= "\">Yahoo</a></td></tr></table>";
echo table("99%","center","",$htmlsrc);
unset($htmlsrc);
} else {
$htmlsrc = $table2 . "<tr><td class=\"errorText\" align=\"center\"><br /><br />" . $results_7;
$htmlsrc .= "<br /><br /></td></tr></table>";
echo table("100%","center","",$htmlsrc);
unset($htmlsrc);
}
?>
Hallo!
Ich hab mir das Skript jetzt nicht genau angesehen, aber wenn du Vergleiche machen willst, ohne auf Groß- und Kleinschreibung einzugehen, dann würd ich den Suchterm und den zu durchsuchenden Text einfach mit ucase() in Großbuchstaben umwandeln, und dann vergleichen.
aber dann klappt es doch auch nicht, oder ?
ich will dass die eingabe:
"hans mueller"
sowohl Hans Mueller als auch hans Mueller oder alle kombinationen findet
es fehlt die funktion "ignore_case" oder sowas...
Sorry, hatte mich bei der funktion geirrt :rolleyes:
Die funktion heisst strtoupper() und macht aus
hans Müller => HANS MÜLLER
HANS mÜllEr => HANS MÜLLER
...und aus dem Text
Der Hans Müller war ein toller mann, der hatte immer latschen an!
wird
DER HANS MÜLLER WAR EIN TOLLER MANN, DER HATTE IMMER LATSCHEN AN!
Also ist es vollkommen wurscht wie du Hans Müller schreibst... es wird immer HANS MÜLLER draus
dann HANS MUELLER habe, wird doch trotzdem nur HANS MUELLER
gefunden und nicht hans mueller, Hans Mueller etc.. nicht gefunden ????
stehe ich auf dem schlauch ?
Ja du stehst auf dem Schlauch!
Du musst den Text in dem du suchst natürlich auch komplett in Großbuchstaben umwandeln!
jwebworks
08-02-2003, 06:41
ähm, ich denke in dem script
oben will er eine mysql-select
abfrage machen und dabei eine
like %<suche>% suche machen.
da dürfte str_toupper nicht viel
bringen.
cu, stop.h
es muss doch eine möglichkeit geben, die gross/kleinschreibung nicht zu beachten..??
da es sich um technische bezeichnungen handelt , würde ich sogar gerne leerzeichen ignorieren.
ct 4 = CT4 = Ct 4
Ok...
Wie gesagt ich hatte das Skript nicht ganz gelesen!
Bei einer Abffage mit WHERE feld LIKE '%suchterm%' wird die Groß / Kleinschreibung sowieso nicht berücksichtigt... ich verstehe also das Problem nicht.
Bei einer Abfrage mit WHERE feld='suchterm' wird Groß / Kleinschreibung übrigens ebenfalls nicht berücksichtigt.
Im übrigen:
da dürfte str_toupper nicht viel
bringen.
Logisch in nem SQL bringt das natürlich nichts... ich bin davon ausgegangen, dass sich sowohl Suchterm, als auch Suchtext bereits in einer Variable befinden.
Dann hättest du die Inhalte beider Variablen mit strtoupper() in Großbuchstaben umwandeln können und dann vergleichen / durchsuchen können.
Bei MySQL gibt es dafür übrigens die Funktionen UPPER und UCASE für diesen Zweck.
Lehrzeichen aus dem Suchterm löschen:
$suchterm = str_replace(' ','',$suchterm);
wenn das
$sites_sql .= "$tb_links.SiteURL like '%$split_term[$i]%'"; die
entscheidende stelle ist, ist an der theorie wohl etwas falsch, denn "mueller" findet "mueller", aber nicht "Mueller"...
Merkwürdig, denn es ist keine Theorie, bei mir ist es so...
Vorschlag:
$split_term[$i] = strtoupper(str_replace(' ','',$split_term[$i]));
$sites_sql .= "UCASE($tb_links.SiteURL) like '%$split_term[$i]%'";
danke für deine mühe;
wenn ich das so ändere, wird nur noch "MUELLER" gefunden;
"ct 4" findet CT4, nicht aber ct 4, Ct 4, usw..
eigentlich auch logisch.
das brächte alles nur etwas, wenn ich es fallweise machte, nach dem motto:
wenn leerzeichen, dann suche nach beiden varianten.
das mit dem leerzeichen ist auch nicht so wichtig, wie die sache mit gross/klein
ich habe mal direkt in sql die abfrage getestet
select * from yp_links where description like'%mueller%'
findet wirklich nur "mueller", aber nicht "Mueller"!
evtl. gibt es da eine sql "ini" einstellung, die das verursacht...
falls jemand mal das gleiche problem hat:
die sql feld art BLOB ist immer case sensitive, VARCHAR, TEXT nicht.
ändern in TEXT löste das problem.
eigentlich sollte es in sql auch so gehen:
SELECT LCASE('*') FROM `yp_links` WHERE description like LCASE('%MUelLeR%')
tut´s aber nicht ..
naja, eagl ..
Tja... jetzt wo du´s sagst, fällts mir auch wieder ein!
-> hatte ich hier (http://www.mrunix.de/forums/showthread.php?s=&threadid=30910) ja auch schonmal geschrieben!
Was lernen wir daraus? Erstmal Doku lesen (und sich das was drinsteht merken) :rolleyes: ...
mehlvogel
10-02-2003, 09:32
Zur not gibt es auch noch sql-regcase (http://www.php.net/manual/en/function.sql-regcase.php). Muss man bei der Where Clause nen Regex übergeben.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.