PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : suche soll gross/kleinschreibung ignorieren, aber wie ?



laminar
07-02-2003, 13:44
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

laminar
07-02-2003, 14:16
<?
// ************************************************** *****************
// 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 .= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(";
$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>&nbsp;&nbsp;" . $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\">&nbsp;<a class=\"slide\"";
$htmlsrc .= "href=\"index.php?" . session_name() . "=" . session_id() . "&amp;ns=1&amp;logic=or&amp;maximum=10&amp;term=";
$htmlsrc .= $pt_rows[Term] . "\">" . $pt_rows[Term] . "</a>(";
$htmlsrc .= $pt_rows[Count] . ")&nbsp;&nbsp;&nbsp;&nbsp;</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\">&nbsp;&nbsp;";
/*-------
$htmlsrc .="<a class=\"slide\" ";
$htmlsrc .= "target=\"_blank\" href=\"index.php?" . session_name() . "=";
$htmlsrc .= session_id() . "&amp;logic=or&amp;maximum=10&amp;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&amp;maximum=10&amp;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);
}

?>

Gaert
07-02-2003, 16:43
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.

laminar
07-02-2003, 17:07
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...

Gaert
07-02-2003, 17:57
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

laminar
07-02-2003, 18:10
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 ?

Gaert
07-02-2003, 20:28
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

laminar
08-02-2003, 11:22
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

Gaert
08-02-2003, 11:51
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);

laminar
08-02-2003, 12:12
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"...

Gaert
08-02-2003, 12:23
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]%'";

laminar
08-02-2003, 12:40
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...

laminar
08-02-2003, 13:23
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 ..

Gaert
08-02-2003, 13:46
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.