» »

[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:
// 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:

<?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 ()

DeeJay ::

Eno sem že opazil...
Vrstica 23 : $nakup = array(); tega se ne rabi.

sebavet ::

Hvala bom preštudiral :)

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
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:
$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:
echo $row['koda'] == $koda ? ' selected="selected"' : '';

sebavet ::

super hvala deluje, moram preštudirat
$koda = isset ($_POST['koda']) ? (int)$_POST['koda'] : FALSE;

kaj pravzaprav naredi. Še enkrat hvala !!!

DeeJay ::

sebavet je izjavil:

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:

<?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:
echo"<input type= type='submit' value='Submit'>";

v
echo"<input type='submit' value='Submit'>";

sebavet ::

to sem v postu narobe objavil, v kodi sem pravilno deklariral, ni mi še uspelo.

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 ?

<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
<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
<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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

program za delo s polinomi v C#

Oddelek: Programiranje
181787 (1025) majster123
»

seznam porabljenih gesel

Oddelek: Programiranje
81187 (857) Blisk
»

Kateri telefon kupiti pri mobitelu.

Oddelek: Mobilne tehnologije
154653 (4194) SLO_Matej
»

Iščem filme

Oddelek: Sedem umetnosti
113010 (2730) STASI
»

Programiranje v C++

Oddelek: Programiranje
352483 (1341) krneki0001

Več podobnih tem