Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
PHP Suchscript [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
PHP Suchscript


 
call
05-03-2002, 08:56 
 
Hi

ich baste gerade an einem Suchscript für meine Datenbank nur will das nicht so richtig laufen.

Ich beschreibe das ganz mal. Das Script hat drei Eingabefelder bei denen der User seine Strasse, seinen Ort und die Art von Müll eingeben kann (dient dazu damit jeder sehen kann wann bei ihm welcher müll abgeholt wird).

Dann hab ich die drei suchvariablen zu einer zusammengefasst und kann nun auch in der DB suchen nur leider nicht 2/3 Begriffe. Ich kann nur entweder die Strasse suchen oder die Art oder den Ort. Ist aber noch nicht so sinvoll da nun keiner eine genaue Angabe bekommt.

---scriptcode---
<?php
$suche = $suche . $suche1 . $suche2 . $suche3;
if ($suche != "") {
$conn_id = mysql_connect("localhost","****","****");
$query = "select * from Abfuhrart where LOCATE(lower(\"$suche\"), lower(Stadt)) != 0 or LOCATE(lower(\"$suche\"), lower(Strasse)) != 0 or LOCATE(lower(\"$suche\"), lower(Art)) != 0 or LOCATE(\"$suche\", Region) != 0";
$result = mysql("muell",$query, $conn_id );
$num = mysql_numrows($result);

---scriptcode---

ich hoffe das mir jemand bei meinem Problem helfen kann.

Bis dann Call

 
Berni
05-03-2002, 09:02 
 
wrum mit LOCATE? In deinem Fall ist ein Like mehr als ausreichend!

 
call
05-03-2002, 09:28 
 
Hi

>warum mit LOCATE?

ich hab keine Ahnung warum.

danke für deinen Hinweis mit Like

habs jetzt mal geändert

---schnipp---
$query = ("select * from Abfuhrart where Stadt LIKE '%$suche%' OR Strasse LIKE '%$suche%' OR Art LIKE '%$suche%'");
$result = mysql("muell",$query, $conn_id );
$num = mysql_numrows($result);
if ($num > 0) {
---schnipp---

nur das bringt mir noch immer nicht die gewünschte 3 Feldersuche. Bei einer Eingabe findet er jedoch alles.

[Editiert von call am 05-03-2002 um 12:00]

 
Titus
05-03-2002, 20:08 
 
willst die Datensätze finden, bei denn alle Suchkriterien gleichzeigtig zutreffen? Dann ersetze die OR durch AND, und alles wird gut. Außerdem wird die Query dann auch schneller abgearbeitet!

 
call
05-03-2002, 21:23 
 
genau das hatte ich schon probiert aber dann kommt garkeine Ausgabe - weder bei nur einer Eingabe noch bei mehreren.
ich poste nochmal den ganzen code - vielleicht ist der fehler ja wonaders.
--- <?php
$suche = $suche . $suche1 . $suche2 . $suche3;
if ($suche != "") {
$conn_id = mysql_connect("localhost","","");
$query = ("select * from Abfuhrart where Stadt LIKE '%$suche%' AND Strasse LIKE '%$suche%' AND Art LIKE '%$suche%'");
$result = mysql("muell",$query, $conn_id );
$num = mysql_numrows($result);
if ($num > 0) {
for ($i=0; $i<$num; $i++) {
$Region = mysql_result($result, $i, "Region");
$Art = mysql_result($result, $i, "Art");
$Abholdatum = mysql_result($result, $i, "Abholdatum");
$Abholhaeufigkeit = mysql_result($result, $i, "Abholhaeufigkeit");
$Monat = mysql_result($result, $i, "Monat");
$Stadt = mysql_result($result, $i, "Stadt");
$Strasse = mysql_result($result, $i, "Strasse");
echo "<tr><td><font face = arial size = +0><li>Muellart:&nbsp;&nbsp;$Art</b></font></td></tr>";
echo "<tr><td><font face = arial size = +0><li>Haeufigkeit:&nbsp;&nbsp;$Abholdatum</font></td></tr>";
echo "<tr><td><font face = arial size = +0><li>Strasse:&nbsp;&nbsp;$Stadt</font></td></tr>";
echo "<tr><td><font face = arial size = +0><li>Stadt:&nbsp;&nbsp;$Strasse</font></td></tr>";
echo "<tr><td><font face = arial size = +0><li>Monat:&nbsp;&nbsp;$Region</font></td></tr>";
echo "<tr><td colspan = 3><font face = arial size = +0><li>Abholdatum:&nbsp;&nbsp;$Monat</font></td></tr>";
echo "<tr><td><br><br></td></tr>";
}
}
else {
echo "<li>Zu diesem Stichwort liegen keine Ergebnisse vor.<p>";
}
}
?>
---
ich hoffe ich mülle das nicht unnötig zu

 
Titus
05-03-2002, 22:57 
 
Original geschrieben von call

ich poste nochmal den ganzen code - vielleicht ist der fehler ja wonaders.
--- <?php
$suche = $suche . $suche1 . $suche2 . $suche3;
...
$query = ("select * from Abfuhrart where Stadt LIKE '%$suche%' AND Strasse LIKE '%$suche%' AND Art LIKE '%$suche%'");

Ist er. Ich habe nicht das ganze Skript durchgeschaut, bin gleich ganz oben hängengeblieben; da scheint ein grober logischer Fehler zu sein:
Du hängst $suche1, $suche2 und $suche3 direkt hintereinander und suchst dann nach der entstandenen Verknüpfung.

Wenn ich also als Suche1 'Köln', Suche2 'Friesenplatz', Suche3 'Sperrmüll' eingebe, wird überall nach 'KölnFriesenplatzSperrmüll' gesucht - und dann ist ziemlich warhscheinlich, dass es kein Ergebnis gibt.
Was mich dabei wundert ist, dass es mit OR angeblich klappt.

Aber probier mal das hier:

$suche = "(%%% like '$suche1' or %%% like '$suche2' or %%% like '$suche3')";
$query = ("select * from Abfuhrart where "
. str_replace ('%%%', 'Stadt', $suche)
. ' and '. str_replace ('%%%', 'Strasse', $suche)
. ' and '. str_replace ('%%%', 'Art', $suche)
;

 
call
06-03-2002, 08:20 
 
Hi

erstmal danke für Deine hilfe. Ich hab Deinen code mal so übernommen aber hab nach dem where " noch eine ) gesetzt da sonst nix gehen wollte. Nun hab ich aber wieder den selben efekt wie vorher - das script findet garnichts mehr :( .
solangsam weis ich auch nicht mehr weiter.

>Wenn ich also als Suche1 'Köln', Suche2 'Friesenplatz', Suche3 'Sperrmüll' eingebe, wird überall nach 'KölnFriesenplatzSperrmüll' gesucht - und dann ist ziemlich warhscheinlich, dass es kein Ergebnis gibt.


stimmt ich will ja nach 'Köln' + 'Friesenplatz' + 'Sperrmüll' kucken und die zutreffenden Datensätze ausgeben.

bis denn

 
Titus
06-03-2002, 18:46 
 
dann solltest du eigentlich nach 'Köln' im Feld Stadt, nach 'Friesenplatz' unter Strasse und nach 'Sperrmüll' unter Art suchen, oder?
also: ... where Stadt like '%$suche1%' and Strasse like '%$suche2%' and Art like '%$suche3'

Wenn dann der Suchstring leer ist, werden zu dem Feld alles gefunden. Wenn also $suche1='Köln', $suche2 = $suche3 = '' dann gibt er mir alle Abfuhren in Köln aus ... (wobei in realo kein Sperrmüll dabei sein wird, den muß man hier für jeden Popel acht Wochen im Voraus bestellen und soll ihn dann morgens um 6 raustragen!)

Hmm ... wenn in einem der eigentlich leeren Felder ein Leerzeichen drin ist, könnte es allerdings daneben gehen ... darum vorher die Leerzeichen vorne und hinten abschneiden:
$suche1 = trim($suche1);
$suche2 = trim($suche2);
$suche3 = trim($suche3);

 
call
06-03-2002, 20:32 
 
Hi

so Dank EUER schnellen hilfe gehts jetzt. Besten dank nochmal. Ihr seit echt spitze ;).

bis dann

 
mastermack
06-03-2002, 21:37 
 
Hi,

habe das posten interessiert verfolgt. Und soweit ist mir auch alles klar, aber warum setzt ihr vor die Variablen Suche1, Suche2 und Suche3 immer die % Zeichen ??


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:42 Uhr.