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)
Problem mit der Datenbankabfrage [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit der Datenbankabfrage


 
ReFresh
24-04-2001, 15:39 
 
Hallo!

Ich benutze ein Datenbank Script namens ABSTRACT DB. Indem ich beim index.phtml zum Beispiel "?search_criteria=Stadt&search_value=Irgendeine" dahinterhänge sucht dieses Skript in der MySQL Datenbank nach in der Spalte "Stadt" nach allen mit dem Namen "Irgendeine".
Wenn ich aber noch spezifischer suchen möchte und z.B. noch eine Abfrage "&search_criteria=Art&search_value=Restaurant" dahinterhänge sucht er nur noch nach dem letzteren Kriterien und nicht mehr nach der Stadt. Wie kann das sein?

Wie schaffe ich es, eine mehrabfrage zu aktivieren. Untenstehend habe ich das index.phtml Skript beigefügt, ich hoffe das dieses reicht. Danke schonmal im Vorraus!

-----------------------------------------------------
include("../modules/db/include.phtml");
include("../tools/template.phtml");

$db=new db();
$db->open();

$query_head="select ID, Name, Stadt, Kategorie, Art, Adresse, PLZ, Telefon, Zeiten, Kommentar, Preise, Web from ausgehen";

if ($search_criteria) {
$query_string=$query_head."
where LOWER(".$search_criteria.") LIKE
LOWER('%".ereg_replace("'","''",$search_value)."%')";

} else {
if (!$firstletter) {
$firstletter="A";
}
$query_string=$query_head."
where LOWER(name) like LOWER('$firstletter%')";
}
$query_string.=" order by name";

if (($query=new query($db, $query_string)) && $query->getrow()) {
do {
$ID[]=$query->field("ID");
$Name[]=$query->field("Name");
$Stadt[]=$query->field("Stadt");
$Kategorie[]=$query->field("Kategoie");
$Art[]=$query->field("Art");
$Adresse[]=$query->field("Adresse");
$PLZ[]=$query->field("PLZ");
$Telefon[]=$query->field("Telefon");
$Zeiten[]=$query->field("Zeiten");
$Kommentar[]=$query->field("Kommentar");
$Preise[]=$query->field("Preise");
$Web[]=$query->field("Web");
} while ($query->getrow());
}

echo EvalTemplate("index.tmpl","\$ID, \$Name, \$Stadt, \$Kategorie, \$Art, \$Adresse, \$Telefon, \$PLZ, \$Zeiten, \$Kommentar, \$Preise, \$Web");

$db->close();
?>
-----------------------------------------------------

 
BrainBug
25-04-2001, 09:45 
 
Hi,

wenn du denselben Parameter in der URL hintereinanderhängst, dann überschreibt der zweite den ersten, also mußt du "?search_criteria1=Stadt&search_value1=Irgendeine&search_criteria2=Art&search_value2=Restaurant" ranhängen. Allerdings muß hier auch der Code angepaßt werden, so daß nicht nur ein Parameter in den Query eingebaut wird. Hier stellt sich die Frage, ob es ein AND oder ein OR sein soll. Ich gehe jetzt mal von einem logischen UND aus:

include("../modules/db/include.phtml");
include("../tools/template.phtml");

$db=new db();
$db->open();

$query_head="select ID, Name, Stadt, Kategorie, Art, Adresse, PLZ, Telefon, Zeiten, Kommentar, Preise, Web from ausgehen";

if ($search_criteria1 || $search_criteria2) {
$query_string=$query_head." where ";
if ($search_criteria1) {
$query_string.=" (LOWER(".$search_criteria1.") LIKE LOWER('%".ereg_replace("'","''",$search_value1)."%'))";
}
if ($search_criteria2) {
if ($search_criteria1) $query_string.=" AND ";
$query_string.=" (LOWER(".$search_criteria2.") LIKE LOWER('%".ereg_replace("'","''",$search_value2)."%'))";
}
}
else {
if (!$firstletter) {
$firstletter="A";
}
$query_string=$query_head."
where LOWER(name) like LOWER('$firstletter%')";
}
$query_string.=" order by name";

if (($query=new query($db, $query_string)) && $query->getrow()) {
do {
$ID[]=$query->field("ID");
$Name[]=$query->field("Name");
$Stadt[]=$query->field("Stadt");
$Kategorie[]=$query->field("Kategoie");
$Art[]=$query->field("Art");
$Adresse[]=$query->field("Adresse");
$PLZ[]=$query->field("PLZ");
$Telefon[]=$query->field("Telefon");
$Zeiten[]=$query->field("Zeiten");
$Kommentar[]=$query->field("Kommentar");
$Preise[]=$query->field("Preise");
$Web[]=$query->field("Web");
} while ($query->getrow());
}

echo EvalTemplate("index.tmpl","\$ID, \$Name, \$Stadt, \$Kategorie, \$Art, \$Adresse, \$Telefon, \$PLZ, \$Zeiten, \$Kommentar, \$Preise, \$Web");

$db->close();


alles andere müßte ja stimmen, hab nur die Zusammensetzung des Queries verändert.

 
Titus
25-04-2001, 18:36 
 
Wenn du mehrere Parameter mit dem gleichen Namen verschicken willst, ist die einfachste Methode, einfach ein Array zu übergeben:
<form action="foo.php3">
<input type="text" name="bar[]">
<input type="text" name="bar[]">
<input type="text" name="bar[]">
<input type="submit">
</form>

in foo.php3 hast du dann das Array $bar, das du auswerten kannst.

Willst du Paare von Parametern einander zuordnen können, gibst du den Feldern einfach Indizes vor:

<form action="foo.php3">
<input type="text" name="was[0]"> =
<input type="text" name="wie[0]"><br>
<input type="text" name="was[1]"> =
<input type="text" name="wie[1]"><br>
<input type="text" name="was[2]"> =
<input type="text" name="wie[2]"><br>
<br><input type="submit">
</form>

 
ReFresh
26-04-2001, 11:25 
 
Danke für eure Hilfe!

Leider ist das was Titus gepostet hat, wahrscheinlich meiner mangelnden PHP Kenntniss, nicht für mich verständlich.

Das was Brainbug gepostet hat habe ich ausprobiert und es funktioniert. Was muss ich einsetzten wenn ich einen dritten String einsetzen möchte?

Vielleicht das?
---------------------------
if ($search_criteria3) {
if ($search_criteria1) $query_string.=" AND ";
if ($search_criteria2) $query_string.=" AND ";
$query_string.=" (LOWER(".$search_criteria3.") LIKE LOWER('%".ereg_replace("'","''",$search_value3)."%'))";
}
---------------------------

 
ReFresh
03-05-2001, 14:02 
 
Was das Keiner wie eine Dritte Abfrage heisst? Oder wie sie genau aussieht. Ich hab es schon ausprobiert und es hat nicht geklappt!

 
BrainBug
03-05-2001, 16:14 
 
ei doch:

if ($search_criteria3) {
if ($search_criteria1 || $search_criteria2) $query_string.=" AND ";
$query_string.=" (LOWER(".$search_criteria3.") LIKE LOWER('%".ereg_replace("'","''",$search_value3)."%'))";
}


mußt du direkt unter die IF-Schleife von $search_criteria2 hängen.

Alles klar???


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:47 Uhr.