Használtautó válogatás egyszerre több tulajdonság alapján, PHP/MySQL
Hi!
Van egy nagyon nagy, és nagyon fontos problémám. Mégpedig: Csinálok éppen egy használtautó kereskedésnek weboldalt, és elakadtam. Mindent leírok, hogy értsetek.
Adatbázis szerkezete, ahol az autók és tulajdonságaik vannak:
Ugyan így a SUZUKI tábla, stb.
Ezt meghívom php-ban, hogy listázza ki a következő képpen:Ez eddig jó is...
De, azt szeretném, hogy van egy form, amin lehet szűkíteni a listát a mezők alapján (típus = Astra). A form megvan, de a feldolgozó kóddal van egy kis probléma: A form-ból kapott értékeket változókban kapja meg a script ($rendszam, $tipus stb.), és itt a probléma. Én eléggé érdekesen oldottam meg a leszűkítést, mert így eléggé hosszú lett a kód, és nem is működik rendesen, mert egyszerre több funkció alapján nem lehet szűkíteni:Már nagyon régóta agyalok rajta, s ti vagytok az egyetlen esélyeim. Plíz help mí
A kérdés mégegyszer: Hogy tudom azt megcsinálni, hogy a form egyszeri elküldésével több input alapján tudjak szűkíteni.
Köszönöm: shraatz
■ Van egy nagyon nagy, és nagyon fontos problémám. Mégpedig: Csinálok éppen egy használtautó kereskedésnek weboldalt, és elakadtam. Mindent leírok, hogy értsetek.
Adatbázis szerkezete, ahol az autók és tulajdonságaik vannak:
Opel
----
rendszam:
tipus:
evjarat:
ajtok_szama:
motor:
futott_km:
szin:
extrak:
megteintheto:
ar:
megjegyzes:
id:
rate:
uzemanyag:
----------
----
rendszam:
tipus:
evjarat:
ajtok_szama:
motor:
futott_km:
szin:
extrak:
megteintheto:
ar:
megjegyzes:
id:
rate:
uzemanyag:
----------
Ugyan így a SUZUKI tábla, stb.
Ezt meghívom php-ban, hogy listázza ki a következő képpen:
<?php
print "<table>";
while ( $sor = mysql_fetch_row( $sql ) )
{
print "<tr>\n";
foreach ( $sor as $mezo )
print "\t<td>$mezo</td>\n";
print "</tr>\n";
}
print "</table>\n";
De, azt szeretném, hogy van egy form, amin lehet szűkíteni a listát a mezők alapján (típus = Astra). A form megvan, de a feldolgozó kóddal van egy kis probléma: A form-ból kapott értékeket változókban kapja meg a script ($rendszam, $tipus stb.), és itt a probléma. Én eléggé érdekesen oldottam meg a leszűkítést, mert így eléggé hosszú lett a kód, és nem is működik rendesen, mert egyszerre több funkció alapján nem lehet szűkíteni:
<?php
if($rendszam)
{
$lekeres = "SELECT * FROM opel WHERE UPPER(rendszam) like '%$rendszam%'";
$sql = mysql_query($lekeres) or die(mysql_error());
$sor = mysql_fetch_assoc($sql);
$osszes_sor = mysql_num_rows($sql);
}
if($tipus)
{
$lekeres = "SELECT * FROM opel WHERE UPPER(tipus) like '%$tipus%'";
$sql = mysql_query($lekeres) or die(mysql_error());
$sor = mysql_fetch_assoc($sql);
$osszes_sor = mysql_num_rows($sql);
}
if($evjarat)
{
$lekeres = "SELECT * FROM opel WHERE UPPER(evjarat) like '%$evjarat%'";
$sql = mysql_query($lekeres) or die(mysql_error());
$sor = mysql_fetch_assoc($sql);
$osszes_sor = mysql_num_rows($sql);
}
// ...
// ???
A kérdés mégegyszer: Hogy tudom azt megcsinálni, hogy a form egyszeri elküldésével több input alapján tudjak szűkíteni.
Köszönöm: shraatz
<Nincs cím>
{
$lekeres = "SELECT * FROM opel WHERE tipus LIKE '".$tipus."' AND evjarat LIKE '".$evjarat."'";
}
a többi ugyanaz. így lekérdezi a formban megadott évjáratú típusokat.
Online 2.0
Tipusonkent tabla?
<Nincs cím>
Ja és köszönöm a megoldást... PERFECT!
shraatz
Márka
?
pl. autók kor szerint
huh
SQL alap lecke
<Nincs cím>
-------------------------
opel, suzuki, chevrolet, audi, stb. = táblák
--------------------------------------------
rendszam, tipus, evjarat, ajtok_szama, motor, futott_km, szin, extrak, megteintheto, ar, megjegyzes, id, rate, uzemanyag = mezők
----------------------------------------------------------
A mezők persze minden táblában ugyan azok.
köszönöm előre
így is lehet.
Én is így csinálom gondolom sokan felsírnak majd. :-)
If szerkezettel összefüzöm a tulajdonságokat.
Minek else ????
Meg $lekerdezes = $lekerdezes." ... "; == $lekerdezes .= " ... "; így kicsit szebb.(meg nem utolsó sorban rövidebb)
Meg GET helyett inkább POST és, amúgy minek átrakni egy másik változóba???
az elgondolás jó csak meg lehet írni harmadannyi kóddal is
implode
egy tabla
Tegyel minden egy tablaba es a marka is egy mezo legyen. Eztuan ha opeleket akarsz lekerdezni egyszeruen fuzd hozza a lekerdezeshez a markara szurest ami ebben az esetben WHERE marka = 'opel'
adatbázis tervezés
-------------------
markaId auto_inc
marka varchar(120)
típus
------------------
tipusId auto_inc
tipus varchar(200)
motor
-----------------
motorId
fajta (benzin, dízel, gáz)
autok
------------------
rendszam (index)
markaId
tipusId
evjarat
ajtok_szama
motorId
futottkm
szín
ccm
megjegyzés (longtext php limit: pl 400karakter)
ar
megtekintheto
autok_extrak //kapcsolótábla
rendszam
extraId
extrak
-----------
extra varchar(255)
extraId auto_inc
remélem egyértelmű a vázlatomból, hogy mire gondoltam, sztem sokkal logikusabb, (illetve normalizált) mint amit te találtál ki. Így kereszttáblás lekérdezésekkel mindent szépen le tudsz kérdezni, esetleg az autok táblát is szétbonthatod két részre:
azokat az adatokat rakd egy táblába, amit ugyan akkor használsz
<Nincs cím>
thnx
Miért?
De:
ez szöget ütött a fejembe. Miért feleslegesek?
P][G
másképpen nem megy
pl:
extraId extra
1 riasztó
2 cd-s rádió
viszont van egy autó, amiben mindkettő benne van, akkor csak úgy tudod beírni, hogy az auto_extra táblában létrehozod ezeket a sorokat:
rendszam extraId
aaa-001 1
aaa-001 2
Így egy sima lekédezéssel végig tudsz zongorázni a táblán, majd az extra táblából megjeleníted az extra nevét. Ha az extra nevét egyből beírnád ide, akkor redundancia lépne fel, és ha például a cd-t át akarnád írni CD-re, akkor az összes bejegyzésen végig kellene futni.
---
Könnyebb valamit jól megcsinálni, mint megmagyarázni, miért lett rossz.
csakugy
Egyébként sztem csinálj egy külön mezőt minden autónak (mondjuk triviális, de legyen ID), talán áttekinthetőbb is lesz.
Üdv
BL