Habs abgeändert aber es ändert sich dadurch nichts am Ergebnis, wenn ich nach ganz normale Textfeldern suche funktioniert die Sache problemlos, aber wenn ich nach einem Feld suche mit arrayinhalt (in der DB steht z.b: Restaurant,Biergarten,Catering= und ich suche nun nach einem Datensatz der den Eintrag Biergarten enthält erscheint obengenannte fehlermeldung
explode einzelne Daten aus DB
Einklappen
X
-
Tjaaaa ... du hast oben in der Where-Zusammenstellung ein
$where.="anz_kategorie='".$_POST['anz_kategorie']."' AND";
weiter unten benutzt du $_POST['anz_kategorie'] als Array ...
Was meinst du, hat wohl where anz_kategorie='Array' zur Folge?
besser:
PHP-Code:if (!empty($_POST['anz_kategorie']) && count($_POST['anz_kategorie'])
$where.="anz_kategorie in ('". implode("', '", $_POST['anz_kategorie'])."') AND";
Kommentar
-
noch was: wenn überhaupt kein Parameter gesetzt ist, sieht deine Query so aus:
SELECT * FROM anzeigen where ORDER BY anz_name ASC
gibt auch einen Syntax Error ... mach aus dem
$where=substr($where,0,strlen($where)-4);
das hier:
$where .= ' 1';
noch besser ist natürlich der Code hier
(nicht nur weil er von mir ist; er ist einfach kürzer, übersichtlicher und besser zu warten):
PHP-Code:// Where-Definition zusammensetzen
$fields = array('anz_plz', 'anz_ort', 'anz_preiskat',
'anz_livemusik', 'anz_kueche', 'anz_freizeit', 'anz_rubrik'
);
$array_fields = array('anz_kategorie', 'anz_kategorie2');
$where = array();
foreach($_POST as $name=>$wert)
if (in_array($name, $fields))
$where[] = "$name = '"
. mysql_escape_string(stripslashes($wert)). "'";
elseif (in_array($name, $array_fields) && count($wert))
$where[] = "$name in ('". implode("', '", $wert). "')";
$where_str = (count($where)
? ' where '. implode(' and ', $where)
: ''
);
$abfrage="SELECT * FROM anzeigen
$where_str ORDER BY anz_name ASC";
Kommentar
-
hab die Klammer reingemacht, aber keine Änderung im Ergebnis:
Bsp.:
ich geben in die Suchbegriffe plz: 77855 und Ort: Achern ein, dann funktioniert es
ich hab einmal ein echo aufs Ergebnis gemacht und es erscheint:
$abfrage hat den Wert: SELECT * FROM anzeigen WHERE anz_plz='77855' AND anz_ort='Achern' ORDER BY anz_name ASC
$where hat den Wert: anz_plz='77855' AND anz_ort='Achern'
gebe ich nun lediglich als Suchbegriff im Feld kategorie: Hotel-Restaurant ein, und lasse alle anderen Felder leer, dann erscheint (ACHTUNG: es gibt einen Datensatz in der Tabelle im Feld Kategorie, der diesen Wert enthält):
$abfrage hat den Wert: SELECT * FROM anzeigen WHERE ORDER BY anz_name ASC
$where hat den Wert: You have an error in your SQL syntax near 'ORDER BY anz_name ASC' at line 1
Woran kanns liegen??
Kommentar
-
@Titus
sorry, hatte Dein posting von 8:41 uhr total übersehen (war wohl wieder mal mit Blindheit geschlagen *g).
Habe nun den code wie unten aufgeführt geändert, aber jetzt liefert mir die Abfrage keine Ergebnisse. Liegt wohl daran, dass in der DB in den einzelnen Feldern etwas steht und die Abfrage so generiert ist, dass beim Abfragen die Felder leer waren.
Die gestellte Suchabfrage lautete. Suche nach dem Feld kategorie mit dem inhalt Hotel-Restaurant daraufhin enthält der $where-Wert folgendes:
$abfrage hat den Wert: SELECT * FROM anzeigen where anz_plz = '' and anz_ort = '' and anz_livemusik = '' and anz_kueche = '' and anz_freizeit = '' and anz_rubrik = '' ORDER BY anz_name ASC
$where hat den Wert: Array
code komplettes Script:
PHP-Code:
<?
// Copyright by M.Heizmann
// Hier keine Veränderungen vornehmen
// Datenbankverbindung
include("config.php");
include("db_connect.php");
// Datenbank auslesen
// Where-Definition zusammensetzen
$fields = array('anz_plz', 'anz_ort', 'anz_preiskat',
'anz_livemusik', 'anz_kueche', 'anz_freizeit', 'anz_rubrik'
);
$array_fields = array('anz_kategorie', 'anz_kategorie2');
$where = array();
foreach($_POST as $name=>$wert)
if (in_array($name, $fields))
$where[] = "$name = '"
. mysql_escape_string(stripslashes($wert)). "'";
elseif (in_array($name, $array_fields) && count($wert))
$where[] = "$name in ('". implode("', '", $wert). "')";
$where_str = (count($where)
? ' where '. implode(' and ', $where)
: ''
);
$abfrage="SELECT * FROM anzeigen
$where_str ORDER BY anz_name ASC";
echo '<hr />$abfrage hat den Wert: '.$abfrage.'<br />';
echo '$where hat den Wert: '.$where.'<hr />';
$ergebnis=mysql_query($abfrage) or die(mysql_error());
// Ergebnisse ausgeben
echo "<html>";
echo "<head>";
echo "</head>";
echo "<body bgcolor=\"#EEECE4\" text=#000000>";
echo "<center>";
echo "<table border=0 cellspacing=1 width=800 bordercolor=#000000>";
echo "<tr><p><font size=-2 color=#000000 face=verdana><b>Nachfolgende Lokalitäten stimmen mit Ihrer Suchdefinition überein.<br>";
echo "Zur Detailansicht auf mehr... klicken !</font></p></tr>";
echo "<tr>";
echo "<td align=center bgcolor=#C0C0C0><b><font color=#FFFFFF face=verdana size=+0>Bild</b></font></td>";
echo "<td align=center bgcolor=#C0C0C0><b><font color=#FFFFFF face=verdana size=+0>Name</b></font></td>";
echo "<td align=center bgcolor=#C0C0C0><b><font color=#FFFFFF face=verdana size=+0>Ort</b></font></td>";
echo "<td align=center bgcolor=#C0C0C0><b><font color=#FFFFFF face=verdana size=+0>Kategorie</b></font></td>";
echo "<td align=center bgcolor=#C0C0C0><b><font color=#FFFFFF face=verdana size=+0>Kontakt</b></font></td>";
echo "<td align=center bgcolor=#C0C0C0><b><font color=#FFFFFF face=verdana size=+0>Homepage</b></font></td>";
echo "<td align=center bgcolor=#C0C0C0><b><font color=#FFFFFF face=verdana size=+0>Details</b></font></td>";
echo "</tr>";
while(list($anz_id,$anz_datum,$anz_name,$anz_inhaber,$anz_strasse,$anz_plz,$anz_ort,$anz_land,$anz_staat,$anz_email,$anz_page,$anz_link,$anz_tel,$anz_fax,$anz_partner,$anz_kategorie,$anz_kategorie2,$anz_offen,$anz_preiskat,$anz_livemusik,$anz_stil,$anz_kredkarte,$anz_lieferservice,$anz_zimmerzahl,$anz_zimmerpreis,$anz_sitzplatz,$anz_nebenraum,$anz_ruhetag,$anz_seminar,$anz_biere,$anz_kueche,$anz_spezial,$anz_rubrik,$anz_freizeit,$anz_text,$anz_bild1,$anz_bild2,$anz_bild3,$anz_bild4,$anz_chiffre)=mysql_fetch_row($ergebnis)) {
if ($anz_datum){
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $anz_datum, $dat);
}
echo "<tr align=center>";
echo "<td align=center><font color=#000000 face=verdana size=-2><img src='$anz_bild1' width=\"80\" height=\"60\"></font></td>";
echo "<td align=center><font color=#000000 face=verdana size=-2>$anz_name</font></td>";
echo "<td align=center><font color=#000000 face=verdana size=-2></font>$anz_ort</td>";
echo "<td align=center><font color=#000000 face=verdana size=-2></font>$anz_kategorie</td>";
echo "<td align=center><a href='../script/reply.php?anz_chiff=$anz_chiff&anz_name=$anz_name' target=details ONCLICK=window.open('','details','scrollbars=yes,width=600,height=480')><img src=../image/mail.gif width=17 height=14 border=0></a></td>";
echo "<td align=center><font color=#000000 face=verdana size=-2></font><a href='$anz_page' target='_blank'>$anz_page</a></td>";
echo "<td align=center><font color=#000000 face=verdana size=-2><a href='../script/detail.php?anz_name=$anz_name&anz_id=$anz_id' target=details ONCLICK=window.open('','details','scrollbars=yes,width=800,height=600')>mehr ...</a></font></td>";
echo "</tr>";
}
echo "<tr><td><br><br><input type=button value=zurück onClick=history.back()></td></tr>";
echo "</table><br><br>";
echo "<td align=center><img src=\"../../images/teiler.jpg\" width=\"596\" height=\"25\"></td>";
echo "</center>";
echo "</body>";
echo "</html>";
// Datenbank schliessen
mysql_close( $link );
?>Zuletzt geändert von Martin5000; 25.02.2003, 19:55.
Kommentar
-
hab nochmal alles überprüft und festgestellt, dass ich in meiner Suchmaske einen Fehler hatte, wenn ich aber das obige Script ausführe erscheint die Fehlermeldung:
Warning: Bad arguments to implode() in /mnt/ls1/12/696/00000010/htdocs/easy_classifieds/script/search.php on line 36
Warning: Bad arguments to implode() in /mnt/ls1/12/696/00000010/htdocs/easy_classifieds/script/search.php on line 36
$abfrage hat den Wert: SELECT * FROM anzeigen where anz_plz = '77855' and anz_ort = '' and anz_kategorie in ('') and anz_kategorie2 in ('') and anz_preiskat = '' ORDER BY anz_name ASC
$where hat den Wert: Array
----------------------------------------
line 36 ist die folgende:
$where[] = "$name in ('". implode("', '", $wert). "')";
Kommentar
Kommentar