php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit Suchmaschine?


 
jens000
13-06-2003, 18:07 
 
Hallo,

ich habe hier eine Suchmaschine die in einer DB sucht. Aber egal was ich eingebe in den Feldern es wird immer alles gefunden. Dies sollte natürlich nicht so sein. Da umso mehr man angibt so genauer sollen die Treffer werden. Ausser bei plz klappt das nur wenn nur ein Treffer angezeigt wird, wird die id nicht mehr dargestellt. Bin schon langsam am durchdrehen. Habe wirklich alles ausprbiert. Hat jemand eine Idee? Thanx

<?php

// ################## Datenbankanbindung ###############################

$benutzer = "###";
$passwort = "###";
$datenbank = "db";
$host = "localhost";
$tabelle = "###";

// #####################################################################

if ($level == "1") {
$eingabe = ereg_replace("\+", " ", $eingabe);
$eingabe = ereg_replace("-", " ", $eingabe);
$eingabe = ereg_replace(",", " ", $eingabe);
$eingabe = ereg_replace("^[ ]+", "", $eingabe);
$eingabe = ereg_replace("[ ]+$", "", $eingabe);
$eingabe = ereg_replace("[ ]+", " ", $eingabe);
}

if ($level != "1") {

echo"
<form action='suche.php'>
<input type='hidden' name='level' value=1>

<INPUT NAME='suche' SIZE='12'>

<INPUT NAME='strasse' SIZE='12'>

<SELECT NAME='auto' $css_select>
<OPTION></OPTION>
<OPTION VALUE='1e'>1</OPTION>
<OPTION VALUE='2'>2</OPTION>
<OPTION VALUE='3'>3</OPTION>
<OPTION VALUE='4'>4</OPTION>

</SELECT>

<INPUT NAME='plz' size='12'>

<INPUT NAME='ort' size='12'>

<INPUT NAME='suche' TYPE='image' SRC='suchen.gif'>

</form>
";

} else {

@mysql_connect("$host", "$benutzer", "$passwort");
@mysql_select_db ("$datenbank");

$_query = "SELECT * FROM $tabelle WHERE (auto <= 2) ";

if ($plz == 0 ) { $_query .= ""; }
if ($plz != 0 ) { $_query .= "AND plz LIKE $plz "; }

if ($auto == 0) { $_query .= ""; }
if ($auto != 0 ) { $_query .= "AND auto >= $auto "; }

if ($ort == 0) { $_query .= ""; }
if ($ort != 0 ) { $_query .= "AND ort >= $ort "; }

if ($strasse == 0) { $_query .= ""; }
if ($strasse != 0 ) { $_query .= "AND strasse <= $strasse "; }

if ($suche == 0) { $_query .= ""; }
if ($suche != 0 ) { $_query .= "AND suche >= $suche "; }

$_query .= "ORDER BY auto ASC";

$_result = mysql_query ($_query);
$num = mysql_numrows($_result)or die ('mySQL ERROR (' . __LINE__ . '): '.mysql_error());

echo "
<table width=\"435\" border=\"0\">
<tr>
<td colspan=\"4\">
<font class=\"h1\">Ergebnis der Suchanfrage</font><br><br>
</td>
</tr>
</table>

<br>
";
if ($num == 0) { echo "<font class=\"text\">Es wurden <b>keine</b> Eintr&auml;ge in der Datenbank gefunden.</font><br><br>";}
if ($num == 1) { echo "<font class=\"text\">Es wurde <b>$num</b> Eintrag in der Datenbank gefunden.</font><br><br>";}
if ($num >= 2) { echo "<font class=\"text\">Es wurden <b>$num</b> Eintr&auml;ge in der Datenbank gefunden.</font><br><br>";}

if ($num > 0) {echo"
<TABLE WIDTH='435' BORDER='0' CELLSPACING='5' CELLPADDING='0'>
";

for ($i = 0; $i < $num; $i++) {
$row = @mysql_fetch_array($_result);
{
$user_id[$c] = $row["user_id"];
$c++;
}
echo "<td valign=\"top\">";
if ($row[strasse] == 5){echo"<a href=../user/profil.php>$row[strasse] ($row[plz] $row[ort])</a>";
}
echo"
</td>
";
if ($row[auto] == 0){ echo"
<td valign=\"top\" align=\"center\"><font class=\"text\">$row[plz]</font></td>";
}
echo"<td valign=\"top\" align=\"center\"><font class=\"text\">$row[ort]</font></td>";
echo"<td valign=\"top\" align=\"center\"><font class=\"text\">$row[auto]</font></td>";
echo"</tr>";
}

}
echo "</table>";
php.tags by wotan

 
TobiaZ
13-06-2003, 18:16 
 
hast du mal den fertigen QUERY ausgegeben, um mal zu gucken, was da rauskommt?

 
jens000
13-06-2003, 18:42 
 
Ich habe alles mögliche Probiert. Die Suche und Darstellung funktioniert ja soweit schonmal. Nur wird keine detaliertes Ergebnis ausgegeben. Es wird immer alles gefunden. Ausser bei plz. Da wird nur ein Treffer angezeigt. Aber dann ist das Problem das bei einem Treffer die id nicht mitgegeben wird.

Diese meine ich. Aber nur wenn nur ein Treffer angezeigt wird.

for ($i = 0; $i < $num; $i++) {
$row = @mysql_fetch_array($_result);
{
$user_id[$c] = $row["user_id"];
$c++;
}

 
TobiaZ
13-06-2003, 18:56 
 
und ich meine den Query-String, den du an die DB übermittelst!!!

 
jens000
13-06-2003, 19:03 
 
Nicht lachen aber wie mache ich das. Peinlich, peinlich

 
Wurzel
13-06-2003, 19:25 
 
echo $_query;

das will tobiaz sehen, also die ausgabe um genau zu sein.;)

 
jens000
13-06-2003, 19:30 
 
Ach so. Na gut: Ich bekomme das hier ausgespuckt wenn ich nichts in den Feldern eingebe:

SELECT * FROM data WHERE (auto <= 2) ORDER BY auto ASC


Und wenn ich bei plz etwas eingebe kommt:

SELECT * FROM data WHERE (auto<= 2) AND plz >= '419296' ORDER BY auto ASC

Und wenn ich bei allen anderen was eingebe kommt immer

SELECT * FROM data WHERE (auto <= 2) ORDER BY auto ASC

Also werden die anderen gar nicht ausgelesen. An was liegt das?

 
wahsaga
13-06-2003, 20:45 
 
Original geschrieben von jens000
if ($ort == 0) { $_query .= ""; }
if ($ort != 0 ) { $_query .= "AND ort >= $ort "; }

if ($strasse == 0) { $_query .= ""; }
if ($strasse != 0 ) { $_query .= "AND strasse <= $strasse "; }
einen leerstring "" an die query anzuhängen, ist absoluter unsinn.

und was
AND ort >= $ort
AND strasse <= $strasse
sein soll, ist mir auch schleierhaft.

das würde doch nur bei nummerischen werten sinn machen, aber alphanummerische sachen wie ort und strasse mit grösser/kleiner gleich zu vergleichen - welchen sinn siehst du darin?

 
jens000
13-06-2003, 21:09 
 
Hast recht.

if ($strasse == 0) { $_query .= ""; }

habe ich nun rausgelöscht.



if ($strasse != 0 ) { $_query .= "AND strasse <= $strasse "; }

soll ich das einfach so machen

if ($strasse != 0 ) { $_query .= "AND strasse == $strasse "; }

 
wahsaga
14-06-2003, 13:17 
 
Original geschrieben von jens000
soll ich das einfach so machen

if ($strasse != 0 ) { $_query .= "AND strasse == $strasse "; }
nein, immer noch nicht ganz.

string-vergleiche macht man in sql mit LIKE.

WHERE strasse LIKE 'hauptstrasse 15'


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:28 Uhr.