Forum » Izdelava spletišč » [php] 2 odvisni listi/seznama
[php] 2 odvisni listi/seznama
sebavet ::
Pozdravljeni, zanima me ali ima kdo predlog kako se naj lotim php strani na kateri imam 2 seznama. V prvem seznamu so kupci, v drugem seznamu pa število njihovih nakupov. Drugi seznam je odvisen in se kreira glede na izbiro v prvem. V formo sem postavil gumb. Najprej izberem iz seznama 1 kupca in ob kliku na gumb se mora nafilat drug seznam z njihovimi nakupi. Zanima me ali ima kdo kak primer oz link do kakega primera kako izvesti to formo. Stvar bi rad rešil s php ne z javascriptom, če je le mogoče, hvala.
DeeJay ::
kje imaš sharnjene podatke o kupcih in nakupih? MySQL? Text datoteka? Excel? Direktno v kodi?
sebavet ::
Podatki so shranjeni v mysql bazi. Najprej sem naredil formo, ki kliče drugo datoteko: form action="klici_seznam_2.php" method="post". Na tej prvi formi izbereš kupca, klikneš gumb ok in datoteka "klici_seznam_2.php" sproducira nov seznam nakupov izbranega kupca. A je problem v tem, da ta način odpre novo stran, kjer prikaže za seznam, jaz pa bi rad, da pod seznamom, kjer izberem kupca izpiše seznam njegovih nakupov, ne pa da to prikaže na novi strani.
Zgodovina sprememb…
- spremenil: sebavet ()
DeeJay ::
Če hočeš to narest samo s PHP, potem se ti bo mogla stran nujno osvežit. Če tega nočeš, bo potrebno zadevo zrihtat z jQuery in AJAX.
t3hn0 ::
Saj lahko resis s php, samo ti bo po izbiri prvega seznama refreshalo stran.
Tam kjer kreiras prvi seznam, dodaj spodaj podobno kodo, obrazec pa naj kaze sam nase (predvidevam da je "klici_seznam_1.php"). Spodaj pod obstoječo kodo kreiras drugi seznam, moras če upostevati parameter ki si ga dobil iz prvega seznama.
Na kratko:
Tam kjer kreiras prvi seznam, dodaj spodaj podobno kodo, obrazec pa naj kaze sam nase (predvidevam da je "klici_seznam_1.php"). Spodaj pod obstoječo kodo kreiras drugi seznam, moras če upostevati parameter ki si ga dobil iz prvega seznama.
Na kratko:
// prvi obrazec ... </form> $mojParam = $_POST['ime_polja:iz_prvega_obrazca']; if(isset($mojParam)) { $query = mysql_Query("select * from tabela2 where parentID = {$mojParam}"); echo "<select">; while($res = mysql_fetch_array($query)) { echo "<option>".$res['Title']."</option>"; } echo "</select">; }
^.^
DeeJay ::
na hitro.... to ti bo osvežilo isto stran in pokazalo seznam nakupov od izbranega kupca, pod seznamom kupcov:
zamenjat morš pač mysql querije in polja s svojimi.
Kode nisem testiral, tako da je možno, da vsebuje napake.
<?php $kupec = isset ($_POST['kupec']) ? (int)$_POST['kupec'] : FALSE; ?> <form method="POST"> <select name="kupec"> <?php $res = mysql_query("SELECT * FROM kupec ORDER BY ime ASC"); while ($row = mysql_fetch_assoc($res)) { echo '<option value="' . $row['id'] . '"'; echo $row['id'] == $kupec ? 'selected="selected"' : ''; echo '>' . $row['ime'] . '</option>'; } mysql_free_result($res); ?> </select> </form> <br> <?php if ($kupec !== FALSE) { $nakup = array(); $res = mysql_query("SELECT * FROM nakup WHERE kupec='" . mysql_real_escape_string($kupec). "'"); while ($row = mysql_fetch_assoc($res)) { echo $row['ime_nakupa'] . '<br>'; } mysql_free_result($res); } ?>
zamenjat morš pač mysql querije in polja s svojimi.
Kode nisem testiral, tako da je možno, da vsebuje napake.
Zgodovina sprememb…
- spremenil: DeeJay ()
sebavet ::
<html> <form method="POST"> <?php $result=mysql_query("select koda from kupci"); $num_rows=mysql_num_rows($result); echo "<select name ='koda' size=4 type='text'>"; for ($i=0;$i<$num_rows;$i++) { $result_column=mysql_result($result,$i,0); echo "<option>",$result_column,"</option>"; } echo "</select><br><br>"; // konec seznama za kupcev echo "<input type=submit value='ok'><br><br>"; ?> </form> <?php $koda=$_POST['koda']; $result=mysql_query("select idnarocila, vsebina from narocila where kupec='$koda'"); $num_rows=mysql_num_rows($result); echo "<select name = 'koda' size=4 type='text'>"; for ($i=0;$i<$num_rows;$i++) { $result_column=mysql_result($result,$i,0)." ".mysql_result($result,$i,1); echo "<option>",$result_column,"</option>"; } echo "</select><br><br>"; mysql_close(); ?> </html>
V 20 vrstici mi najde napako Undefined index: koda, ker je verjetno v 19 vrstici nisem znal pravilno postat. Je možno na eni strani postat spremenljivko v drugi del kode? kako pri tem izvedem refresh?
t3hn0 ::
ja, napaka je ker ob prvem obisku $_POST['koda'] še ne obstaja...ti pa bi že bral iz baze. Med vrstici 19 in 20 daš lepo en if
ter na koncu med 28 in 29
Tako se bo koda izvedla le v primeru da si izbral nekaj iz prvega seznama. Če pa želiš, si lahko pri branju prvega seznama zapomniš prvi ali za zadnji ID in tako v primeru da še ni nič izbrano, izpišeš seznam od prvega/zadnjega kupca.
if(isset($koda) && is_numeric($koda)) {
ter na koncu med 28 in 29
}
Tako se bo koda izvedla le v primeru da si izbral nekaj iz prvega seznama. Če pa želiš, si lahko pri branju prvega seznama zapomniš prvi ali za zadnji ID in tako v primeru da še ni nič izbrano, izpišeš seznam od prvega/zadnjega kupca.
^.^
DeeJay ::
19 vrstico samo zamenji z:
undefined index javlja zaradi $_POST['koda'] ker index 'koda' v $_POST ni definiran, dokler stran ne osvežimo s podatki iz prvega seznama.
Vseeno pa rabiš preverit ali ima $koda kako vrednost ali ne, preden sploh poizveduješ tabelo 'narocila', zato pa rabiš med 19 in 20 vrstico vrinit:
in med 28 in 29 vrinit:
Pa zelo ti priporočam, da zavaruješ MySQL pred injectionom (hekanjem):
Tuki maš pa celotno kodo spisano na lepši način. Na vrhu sam še odpreš bazo in jo na koncu zapreš, pa bi mogl delat.
$koda = isset ($_POST['koda']) ? (int)$_POST['koda'] : FALSE;
undefined index javlja zaradi $_POST['koda'] ker index 'koda' v $_POST ni definiran, dokler stran ne osvežimo s podatki iz prvega seznama.
Vseeno pa rabiš preverit ali ima $koda kako vrednost ali ne, preden sploh poizveduješ tabelo 'narocila', zato pa rabiš med 19 in 20 vrstico vrinit:
if ($koda !== FALSE) {
in med 28 in 29 vrinit:
}
Pa zelo ti priporočam, da zavaruješ MySQL pred injectionom (hekanjem):
$result=mysql_query("select idnarocila, vsebina from narocila where kupec='" . mysql_real_escape_string($koda) . "'");
Tuki maš pa celotno kodo spisano na lepši način. Na vrhu sam še odpreš bazo in jo na koncu zapreš, pa bi mogl delat.
<!DOCTYPE html> <html> <head> <title>Seznam</title> <meta charset="utf-8"> </head> <body> <?php $koda = isset ($_POST['koda']) ? (int)$_POST['koda'] : FALSE; ?> <form method="POST"> <select name="koda" size="4"> <?php $res = mysql_query("SELECT koda FROM kupci"); while ($row = mysql_fetch_assoc($res)) { echo '<option value="', $row['koda'], '"'; echo $row['koda'] == $koda ? 'selected="selected"' : ''; echo '>', $row['koda'], '</option>'; } mysql_free_result($res); ?> </select> <button type="submit">Izberi</button> </form> <br> <?php if ($koda !== FALSE) { $res = mysql_query("SELECT idnarocila, vsebina FROM narocila WHERE kupec='" . mysql_real_escape_string($koda). "'"); while ($row = mysql_fetch_assoc($res)) { echo $row['idnarocila'], ' ', $row['vsebina'], '<br>'; } mysql_free_result($res); } ?> </body> </html>
Zgodovina sprememb…
- spremenil: DeeJay ()
DeeJay ::
Sm zadevo stestiral in deluje.
Samo v 19 vrstici moje kode popravi:
Samo v 19 vrstici moje kode popravi:
echo $row['koda'] == $koda ? ' selected="selected"' : '';
sebavet ::
super hvala deluje, moram preštudirat
kaj pravzaprav naredi. Še enkrat hvala !!!
$koda = isset ($_POST['koda']) ? (int)$_POST['koda'] : FALSE;
kaj pravzaprav naredi. Še enkrat hvala !!!
DeeJay ::
super hvala deluje, moram preštudirat
$koda = isset ($_POST['koda']) ? (int)$_POST['koda'] : FALSE;
kaj pravzaprav naredi. Še enkrat hvala !!!
to je samo krajši zapis te kode:
if (isset ($_POST['koda'])) { $koda = (int)$_POST['koda']; // (int) pomeni, da ti vrednost spremenljivke spremeni v celo število - integer. } else { $koda = FALSE; }
sebavet ::
@DeeJay and co.
Od tu naprej sem v php zaćel (na drugem mestu) pisati novo formo, ki bi naj ob kliku na gumb pognala popraviproc.php tako:
ob kliku na gumb submit ne kliče popraviproc.php. Nekaj sem spregledal, pa ne vem kaj.
Od tu naprej sem v php zaćel (na drugem mestu) pisati novo formo, ki bi naj ob kliku na gumb pognala popraviproc.php tako:
<?php if ($koda !== FALSE) { echo"<form action='popraviproc.php' method='POST'>"; ....nekaj gradnikov obrazca echo"<input type= type='submit' value='Submit'>"; echo"</form>"; } ?>
ob kliku na gumb submit ne kliče popraviproc.php. Nekaj sem spregledal, pa ne vem kaj.
Zgodovina sprememb…
- spremenil: sebavet ()
DeeJay ::
spremeni:
v
echo"<input type= type='submit' value='Submit'>";
v
echo"<input type='submit' value='Submit'>";
sebavet ::
A je možno, da če imam formo spisano v phpju (z echoti) in imam v formi več 'div' delov, da mi submit gumb na koncu ne dela in ne preusmeri na action=procedura.php ?
vendar je zgornja koda z echo stavki?, ko sem dive ven pobrisal je pol submit delal.
<form action='proc.php' method='post'> forma z <div></div> plastmi <input type=submit value='OK'> </form>
vendar je zgornja koda z echo stavki?, ko sem dive ven pobrisal je pol submit delal.
Zgodovina sprememb…
- spremenil: sebavet ()
DeeJay ::
če je vse vredu zaključeno bi načeloma moralo delat.
probi neki bl simple
v proc.php dej pa:
probi neki bl simple
<form method="POST" action="proc.php"> <div> <input type="text" name="test"> <button type="submit">OK</button> </div> </form>
v proc.php dej pa:
<?php $test = isset ($_POST['test']) ? $_POST['test'] : FALSE; echo $test; ?>
Zgodovina sprememb…
- spremenil: DeeJay ()
sebavet ::
ok po dolgih mukah sem razvozlal problem. Če vseh
končno rešeno !
<div>ne zapreš z
</div>in si površn se ti to maščuje z urami pregledovanja kode in googlanja :)
končno rešeno !
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | program za delo s polinomi v C#Oddelek: Programiranje | 1899 (1137) | majster123 |
» | seznam porabljenih geselOddelek: Programiranje | 1240 (910) | Blisk |
» | Kateri telefon kupiti pri mobitelu.Oddelek: Mobilne tehnologije | 4856 (4397) | SLO_Matej |
» | Iščem filmeOddelek: Sedem umetnosti | 3090 (2810) | STASI |
» | Programiranje v C++Oddelek: Programiranje | 2580 (1438) | krneki0001 |