SQL Abfrage in php mit mehreren Abfrageoptionen
|
|
Seite: 1 |
| Autor |
|
Savage |
SQL Abfrage in php mit mehreren Abfrageoptionen - Beitrag verfasst:
06.11.2006, 13:34 Uhr |
|
Beginner
Anmeldedatum: 06.11.2006 2 Posts und 1 Themen. |
Hallo,
ich hoffe ist hier der richtige Platz für die Frage.
Mein Problem:
Ich möchte meine Datenbank nach mehreren sachen abfragen, wo ich per optionsfeld jeweils die suchmöglichkeiten vorgebe (wie zum Beispielbei Autoscout24.de)
habe in meinem Fall jetzt zur Zeit nur 2 Suchpotionen (Bundesland,Geschlecht)und das nur von Usern die aktiviert sind.
Habes erstmal alles in eine Suchanfrage gesteckt also :
| Code: | 1 |
"SELECT * FROM user WHERE aktiv=1 AND regionid like '%".$regionid."%' AND geschlbin like '%".$geschlbin."%' "
|
|
Möchte aber noch meh sachen zum Auswählen vorgeben, aber auch so, daß wenn der User eine sache nicht auswählt das diese dann sozusagen icht brücksichtigt wird und nur die sachen gesucht werden die er auch selektiert.
Also er will zum Beispiel nur User sehen die weiblich sind das Bundesland ist ihm egal.
jetzt habe ich es so gemacht das ich alleBundesländer 001-016 vergeben haben und wenn er sozusagen alle Bundesländer auswählt das dann für die suche like "0" eingesetzt wird weil ja die 0 so in allen vorkommt geht ist aber wie ich finde kein saubere Lösung.
Möchte auch gerne noch die Optionen des Alters dazumachen aber wie.Der User soll frei wählen können halt von 20-30 Jahre also mit zwei Feldern einmal startalter und das maxalter, in eine richtung wäre mir klar mit < oder > und dann die Zahl.
aber wie wenn beide zusammen sein sollen also alles dazwischen genommen werden soll.
Vieleicht hat ja jemand von euch so ein Script fertig wo ich halt die Datenbankbezeichnungen ändern müßte und die entsprechnden Kategorien.
Hoffe es war einigermaßen verständlich.
Schonmal Danke im vorraus.
Mannlernt ja am besten von anderen scripten aber diese Datenbankabfragen findet man ja auf den seiten nicht also die Quelltexte.
Mit freundlichen Grüßen
Savage
|
| |
|
Nach Oben  |
|
cinic |
Beitrag verfasst:
06.11.2006, 13:51 Uhr |
|
Admin

Anmeldedatum: 05.08.2004 426 Posts und 116 Themen. |
Du kannst die SQL-Anweisung nach und nach bestücken.
Außerdem solltest du bei solchen Abfragen möglichst von dem Parameter "like" abrücken, wenn es auch anders geht, da dieser einerseits sehr langsam arbeitet und andererseits auch sicherheitstechnisch anfälliger ist.
Ich würde nun jeder Auswahlbox, um sie optional zu machen, einfach eine Option voranstellen, die "Bitte wählen" oder im Fall des Bundeslandes dann eben "Alle" heißt, wie du sie bereits hast.
| Code: | 1 2 3 4 5 6 7 8 9 10 |
$query="SELECT * FROM user WHERE aktiv=1";
//Beispielsweise mit einer IF-ABfrage
IF ($_POST[bundesland]!=""){
$query.=" AND $regionid='$regionid'";
}
IF ($_POST[geschlecht]!=""){
$query.=" AND geschlbin='$geschlbin'";
}
|
|
____________________ v-basic.de
|
| |
|
Nach Oben  |
|
Savage |
Beitrag verfasst:
07.11.2006, 1:10 Uhr |
|
Beginner
Anmeldedatum: 06.11.2006 2 Posts und 1 Themen. |
Danke erstmal, nur leider komm ich damit noch imme nicht zurecht. Hab da immernoch Fehlermeldung Query was empty
ich hab das ganze auf 2 Seiten gemacht also eine Seite die Suchmaske und die 2. Seite die suche selber und die Ergebnisausgabe.
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
<?php
include "config.php";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<table width="500" border="0" cellspacing="0" cellpadding="5" class="rahmen">
<tr>
<td colspan="2"><b>Usersuche</b></td>
</tr>
<tr>
<td colspan="2">
<form name="suche" method="post" action="index.php?open=suchetop">
<table width="430" cellspacing="0" align="center" cellpadding="0" border="0">
<tr>
<td colspan="3" valign="top"> </td>
</tr>
<tr>
<td width="225">
<div align="left">Wählen Sie ein Bundesland<br>
<select name='regionid' class="fld_c">
<option value="" selected>bitte wählen</option>
<option value="1">Baden-Württemberg</option>
<option value="2">Bayern</option>
<option value="3">Berlin</option>
</select>
</div></td>
<td width="10" valign="top"></td>
<td valign="top" width="225">suche (optional)<br>
<select name='geschlsuche' class="fld_c">
<option value="" selected>bitte wählen</option>
<option value="">keine Angabe</option>
<option value="1">Mann</option>
<option value="2">Frau</option>
<option value=""></option>
</select></td>
</tr>
<tr>
<td width="225"></td>
<td width="10" valign="top"></td>
<td valign="top" width="225"></td>
</tr>
<tr>
<td valign="top" width="225">Geschlecht (optional)<br>
<select name='geschlbin' class="fld_c">
<option value="" selected>bitte wählen</option>
<option value="">keine Angabe</option>
<option value="2">Frau</option>
<option value="1">Mann</option>
</select>
</td>
<td width="10" valign="top"></td>
<td valign="top" width="225"></td>
</tr>
<tr>
<td width="225"></td>
<td width="10" valign="top"></td>
<td valign="top" width="225"></td>
</tr>
<tr>
<td valign="top" width="225"></td>
<td ></td>
<td width="225"></td>
</tr>
<tr>
<td colspan="3"></td>
</tr>
<tr>
<td width="225" valign="top">
</td>
</tr>
<tr>
<td colspan="3" valign="middle">
<div align="center"><img src="../gfx/dot.gif" width="1" height="5"><br>
<input type="submit" name="Abschicken" value="Suche starten">
</div></td>
</tr>
</table>
</form></td>
</tr>
</table>
</body>
</html>
|
|
2. Seite suchetop.php
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
<?
start_page("Die 50 neuesten Mitglieder");
echo "<table width="100%" border="0" bgcolor="#990000" cellpadding="0" cellspacing="3" background="images/barbg2.gif">
<TR><TD><FONT color="#ff9933"><b>Die 50 neuesten Mitglieder</b></FONT></TD></TR></TABLE>
<table width="100%" border="0" bgcolor="#000000" cellpadding="3" cellspacing="0" style="border-style: solid; border-width: 1px; border-color:#990000">
<TR><TD valign="top"><FONT color="#CCCCCC">
";
$query ="select * from user where aktiv=1 ";
if (!empty($regionid)) {
$query.= "AND regionid = '".$regionid."' ";
}
if (!empty($geschlsuche)) {
$query.= "AND geschlsuche = '".$geschlsuche."' ";
}
if (!empty($geschlbin)) {
$query.= "AND geschlbin = '".$geschlbin."' ";
}
$query.= ") ORDER BY id DESC LIMIT 50";
$select = mysql_query($query);
$i=1;
$result1=mysql_db_query($dbname,$query1,$conn) or die (mysql_error());
while($date=mysql_fetch_array($result1))
{
$id= $date[id];
$user= $date[user];
$jahre= $date[jahre];
$hoehe= $date[gross];
$gewicht= $date[gewicht];
$headline= $date[headline];
$ichsuche= $date[ichsuche];
$online= $date[online];
if ($online=="online" AND $ichsuche!="Unsichtbar") {
$headline="$headline";
$onzeiger="<FONT color=#00ff00><FONT size=3> $ichsuche</FONT></FONT>";
} else {
$headline="$headline";
$onzeiger="";
}
$dateiname="nix";
$query3="SELECT * FROM userbilder WHERE userid='$id' AND zeigen='vorschau' LIMIT 1";
$result3=mysql_db_query($dbname,$query3,$conn) or die (mysql_error());
while($date=mysql_fetch_array($result3))
{
$dateiname= $date[dateiname];
$jugendschutz= $date[jugendschutz];
$freigeschaltet= $date[freigeschaltet];
}
$color = ($i % 2) ? "#272727" : "#000000";
if ($dateiname!="nix") {
if ($jugendschutz=="1" OR $freigeschaltet=="0") {
echo "<TR><TD vAlign="TOP" width="60" bgcolor="$color"><a style='cursor:pointer;cursor:hand;' onclick="window.open('index.php?open=profil&user=$id','profil','resizable=no, location=no, menubar=no, status=no,scrollbars=yes,width=500,height=550')"><IMG src="images/ab18.gif" borde="0" width="60" alt=""></A></TD><TD vAlign="TOP" bgcolor="$color"> <a style='cursor:pointer;cursor:hand;' onclick="window.open('index.php?open=profil&user=$id','profil','resizable=no, location=no, menubar=no, status=no,scrollbars=yes,width=500,height=550')"> <b>$user</b></A> - $jahre | $hoehe | $gewicht $onzeiger<br><br>$headline</TD></TR>";
} else {
echo "<TR><TD vAlign="TOP" width="60" bgcolor="$color"><a style='cursor:pointer;cursor:hand;' onclick="window.open('index.php?open=profil&user=$id','profil','resizable=no, location=no, menubar=no, status=no,scrollbars=yes,width=500,height=550')"><IMG src="userbilder/$id/klein/$dateiname" borde="0" width="60" alt=""></A></TD><TD vAlign="TOP" bgcolor="$color"> <a style='cursor:pointer;cursor:hand;' onclick="window.open('index.php?open=profil&user=$id','profil','resizable=no, location=no, menubar=no, status=no,scrollbars=yes,width=500,height=550')"> <b>$user</b></A> - $jahre | $hoehe | $gewicht $onzeiger<br><br>$headline</TD></TR>";
}} else {
echo "<TR><TD vAlign="TOP" width="60" bgcolor="$color"></TD><TD vAlign="TOP" bgcolor="$color"> <a style='cursor:pointer;cursor:hand;' onclick="window.open('index.php?open=profil&user=$id','profil','resizable=no, location=no, menubar=no, status=no,scrollbars=yes,width=500,height=550')"> <b>$user</b></A> - $jahre | $hoehe | $gewicht $onzeiger<br><br>$headline</TD></TR>";
}
$i++;
}
echo "</FONT></TD></TR></TABLE>";
stop_page();
?>
|
|
Sorry ich weiß ist echt viel jetzt hier geworden aber leider weiß ich selbst nicht wo hier genau der Fehler steckt und wenn ihr mir helfen wollt und nur so kleine sachen schreibt mgen die zwar richtig sein aber ich weiß teilweise trotzdem noch nicht genau wo sie dann hingehören.
Hab echt schon jetzt Tage und Nächtelang zig Seiten durchgelesen aber wenn ich was finde funktioniert es nicht (weil ich bestimmt auch nicht alles richtig mache) aber die meisten Hilfen zur Datenbankabfrage gehen immer davon aus , das alles auf jeden fall abgefragt wird und arbeitenmit der Zeile von oben aus meinem ersten Beitrag.
Trotdem nochmalschon ganz vielen Dank für die Unterstützung.
|
| |
|
Nach Oben  |
|
cinic |
Beitrag verfasst:
08.11.2006, 19:19 Uhr |
|
Admin

Anmeldedatum: 05.08.2004 426 Posts und 116 Themen. |
| Code: | 1 2 3 4 5 6 7 |
$select = mysql_query($query);
$i=1;
$result1=mysql_db_query($dbname,$query1,$conn) or die (mysql_error());
while($date=mysql_fetch_array($result1))
|
|
Hey ganz einfach, du hast die Ergebnismenge in $select, aber verweist auf $query1
Des Weiteren habe ich gesehen, dass du immer mit mysql_db_query abfragst.
Du könntest auch einmal im Script oben die Datenbank auswählen
mit:
| Code: | 1 |
mysql_select_db("[datenbankname]",$conn);
|
|
Nun kannst du statt
mysql_db_query($dbname,$query1,$conn);
Verkürzt
mysql_query($query1);
schreiben.
Also:
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$query ="select * from user where aktiv=1 ";
if (!empty($regionid)) {
$query.= "AND regionid = '".$regionid."' ";
}
if (!empty($geschlsuche)) {
$query.= "AND geschlsuche = '".$geschlsuche."' ";
}
if (!empty($geschlbin)) {
$query.= "AND geschlbin = '".$geschlbin."' ";
}
$query.= ") ORDER BY id DESC LIMIT 50";
$i=1;
$result1=mysql_query($query);
while($date=mysql_fetch_array($result1))
...
...
|
|
____________________ v-basic.de
|
| |
|
Nach Oben  |
|
| Information |
| Wo bin ich? |
|
Programming Community » Sprachen » PHP / MySQL / SQLite » SQL Abfrage in php mit mehreren Abfrageoptionen |
| Rechte |
|
Du darfst:
Beiträge lesen,
Themen eröffnen,
auf Beiträge antworten und hier
keine Umfragen erstellen |
| Statistik |
|
Seit dem 31.07.2002 (3478 Tage) wurden 7013 Beiträge in 1977 Themen verfasst. |
|
Wir haben 1278 User und begrüßen unser neustes Mitglied:
g.schief
|
Rekord: 8 registrierte waren gleichzeitig hier (27.07.2006, 14:54 Uhr). Im Moment: 0 registrierte Benutzer und 1 Gast online!
|
|