PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mit suchformular von bis suchen.


self_user
07.02.2006, 15:56:47
hallo zusammen,

ich möchte die option nach den jahrgang zwischen xxxx bis xxxx suchen können einbauen, das formular besteht auch, der Jahrgang ist in der DB vorhanden.

Was ich bis jetzt eingebaut habe sind die listemenu und die abfrage, wo ich von und bis den Jahrgang auswählen kann, leider funkt es so nicht.




<select name="jahrgang" id="jahrgang">

$abfrage = "SELECT * FROM personal WHERE name LIKE '$name%' AND vorname LIKE '$vorname%' AND jahrgang LIKE '$jahrgang%' ORDER BY id LIMIT $start, $zeilen";

trojax
07.02.2006, 16:42:35
Hi,
wenn ich dich richtig Verstanden habe suchst du genau das hier:

angenommen zwischen 1985 und 1990

Select * FROM beispieltabelle WHERE jahrgang BETWEEN 1985 AND 1990

Also halt hier in Form einer Beispielanfrage-hoffe mal das wars.
Gruß Daniel

self_user
07.02.2006, 17:14:36
evt. ja, ich hab noch nicht getestet, aber könnte es so funkt.

<form>
<select name="von" id="von">
<option value="1985">1985</option>
</select>

<select name="bis" id="bis">
<option value="1985">1985</option>
</select>
</form>


Select * FROM beispieltabelle WHERE jahrgang BETWEEN von AND bis


Hi,
wenn ich dich richtig Verstanden habe suchst du genau das hier:

angenommen zwischen 1985 und 1990

Select * FROM beispieltabelle WHERE jahrgang BETWEEN 1985 AND 1990

Also halt hier in Form einer Beispielanfrage-hoffe mal das wars.
Gruß Daniel

self_user
07.02.2006, 20:44:44
ich hab folgendermasse die abfrage gestaltet, wenn ich jetzt einfach suche ohne formular kriterien dann wird folgende fehlermeldung ausgegeben:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /suche_personal.php on line 211

Wenn ich aber den Jahrgang oder name auswähle hingegen werden datensätze gefunden und ausgegeben.

Zeiel 211:
if(mysql_num_rows($ergebnis) > 0) {

Die Abfrage

$abfrage = "SELECT * FROM personal WHERE name LIKE '$name%' AND vorname LIKE '$vorname%' AND jahrgang >= $von AND jahrgang <= $bis";

trojax
08.02.2006, 08:52:10
Ähm-ja-also ich bin mir nicht ganz sicher ob ichs kapiert habe-meintest du dass du wenn du für irgendwas nichts ausgewählt hast im ganzen kein Ergebniss bekommst?

Opendix
08.02.2006, 11:23:25
gib einfach mal mit mysql_error() den fehler aus! ich denke aus dem kannst du dann einfach die Ursache erschliessen!

kleine anmerkung: bei sachen wie: WHERE von = $von, mach hier immer WHERE von = '$von'

self_user
08.02.2006, 16:11:36
hier die mysql error :

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND jahrgang <=' at line 1

Hier die abfrage:

$abfrage = "SELECT * FROM persnal WHERE name LIKE '$name%' AND vornameLIKE '$vorname%' AND jahrgang >= $von AND jahrgang <= $bis";


Wenn ich den dropdown menu "jahrgang" von 1950 bis 2006 auswähle und suche, findet er auch die Datensätze, und datensätze werden auch ausgegeben.

wenn ich aber den Suchformular aufrufe dann erscheint die oben erwähnte fehlermeldung immer, hab auch mit von='$von' AND bis='$bis' versucht leider auch ohne erfolg.

was kann ich machen?

trojax
08.02.2006, 16:26:12
Versuchs wirklich mal mit
$abfrage = "SELECT * FROM persnal WHERE name LIKE '$name%' AND vorname LIKE '$vorname%' AND jahrgang BETWEEN '$von' AND '$bis'";

Das müsste eigentlcih so hinhauen-denke ich zumindest.

self_user
08.02.2006, 16:43:47
ja es haut hin aber, wenn ich jetzt suchen so wie es jetzt aussieht bin ich gezwungen den Jahrgang auszuwählen um ergebnisse zu erzielen.

Ich möchte aber wenn ich nur mit name eingebe bzw. suchen sollen auch ergebnisse erzielt werden ohne das der Jahrgang ausgewählt wurde.

was kann ich hier machen ?

trojax
08.02.2006, 16:50:37
Dann musste die Abfrage halt so auslegen-ich versuchs mal:

$query = "SELECT * FROM personal WHERE 1=1";
if(!empty($name))
{
$query .= " AND name LIKE '$name%'";
}
if(!empty($vorname))
{
$query .= " AND vorname LIKE '$vorname%'";
}
if(!empty($von AND $bis))
{
$query .= " AND jahrgang BETWEEN '$von' AND '$bis'";
}


So wird je nach dem was gesetzt ist-oder auch nicht der Abfrage was dazugegeben-hoffe mal es haut hin
LG Daniel

self_user
08.02.2006, 16:55:01
vielen dank erst mal, werde gleich austesten. :-)

hab eine fragen, wenn ich jetzt ein zweites feld einbaue wo ich nach gewicht suchen möchte bzw. wieder genau gleich gewicht auswahl von - bis, kann ich die abfrage genau gleich gestalten wie bei der Jahrgang eintippen?

trojax
08.02.2006, 17:00:16
Klar-hängst halt einfach so ne if-schleife hinten dran-das ist open end-du verbindest ja nur die Sätze miteinander.
Viel Glück beim Ausprobieren

self_user
08.02.2006, 17:12:27
wenn ich mit if(!empty($von AND $bis)) suche erscheint ein syntax fehlermeldung, aber hingegen so if(!empty($von)) lauft es wunderbar, sorry der nachfrage was ist hier der impakt?


$query = "SELECT * FROM personal WHERE 1=1";
if(!empty($name))
{
$query .= " AND name LIKE '$name%'";
}
if(!empty($vorname))
{
$query .= " AND vorname LIKE '$vorname%'";
}
if(!empty($von))
{
$query .= " AND jahrgang BETWEEN '$von' AND '$bis'";
}

trojax
08.02.2006, 17:33:19
Achso-hubs-fehler-man kann das nicht direkt so machen

if(!empty($von AND $bis))

sondern es muss so sein:

if((!empty($von)) AND (!empty($bis)))

Sonst weis er nicht was er mit den Angaben Anfangen soll da empty oder !empty nur true oder false zurückgeben kann-aber nich von zwei Variablen.
Sorry-mein Fehler
Lg Daniel

self_user
08.02.2006, 17:53:32
Es klappt wunderbar, vielen vielen dank für deine unterstützung ;)

Ein kleines problem habe ich, und zwar wenn ich nach gewicht mit den wert zwischen 10 und 20 suche dann werden auch datensätze mit den wert 100 angezeigt.

lässt sich dass so anpassen?

if((!empty($pvon!=)) AND (!empty($pbis!=)))

vt1816
08.02.2006, 21:50:07
if((!empty($pvon!=)) AND (!empty($pbis!=)))
Was soll denn das? Was möchtest Du damit erreichen? Zeig doch mal Deine Konstruktion (Quelltext) für das Gewicht

self_user
08.02.2006, 21:51:51
ist momentan unwichtig, aber falls ich es nicht zum laufen bringen werde ich den Quelcode hier posten ;)