PDA

View Full Version : Generiranje drop down menija iz baze


tchibo
23-10-2007, 17:29
Imam na stranici (php) 2 drop down menija, zelim da kada odaberem jednu od opcija na na prvom meiju koji je generiran iz baze da mi generira drugi meni iz baze. Tako kada recimo odaberem grad Dubrovnik u prvom meniju da mi u drugom meniju generira sveposlovnice u dubrovniku.

Ne znam da li sam uopce u pravoj kategoriji, pa zato molim pomoc.

tchibo
25-10-2007, 10:43
ja sam to pokusao na sljesci nacin ali kada odaberem prvi izbor drugi ne izbacuje kako treba, evo koda u nastavku,

tabela u bazi se zove car_description_croatia
grupa, vehicle i doors su retci u tabeli.

Zelim da kada odaberem vozilo (vehicle) u prvom drop down meniju da mi u drugom meniju generira broj vrata (doors) koji mogu izabrati kod tog modela automobila.

Ako moze mala pomoc.

<?php

$dbservertype=
$servername=
$dbusername=
$dbpassword=
$dbname=

connecttodb($servername,$dbname,$dbusername,$dbpas sword);
function connecttodb($servername,$dbname,$dbuser,$dbpasswor d)
{
global $link;
$link=mysql_connect ("$servername","$dbuser","$dbpassword");
if(!$link){die("Could not connect to MySQL");}
mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
}
?>

<!doctype html public "-//w3c//dtd html 3.2//en">

<html>

<head>
<title></title>
<SCRIPT language=JavaScript>
function reload(form)
{
var val=form.cat.options[form.cat.options.selectedIndex].value;
self.location='dd-crorent.php?cat=' + val ;
}

</script>
</head>

<body>
<?
@$cat=$_GET['cat'];

///////// Getting the data from Mysql table for first list box//////////
$quer2=mysql_query("SELECT DISTINCT vehicle FROM car_description_croatia order by grupa");
///////////// End of query for first list box////////////

/////// for second drop down list /////

if(isset($cat) and strlen($cat) > 0){
$quer=mysql_query("SELECT DISTINCT doors FROM car_description_croatia where vehicle=$cat");
}else{$quer=mysql_query("SELECT DISTINCT doors FROM car_description_croatia order by grupa"); }
////////// end of query for second ///////////////////////////

echo "<form method=post name=f1 action='dd-check.php'>";

////////// Starting of first drop downlist /////////
echo "<select name='cat' onchange=\"reload(this.form)\"><option value=''>Select one</option>";
while($noticia2 = mysql_fetch_array($quer2)) {
if($noticia2['vehicle']==@$cat){echo "<option selected value='$noticia2[grupa]'>$noticia2[vehicle]</option>"."<BR>";}
else{echo "<option value='$noticia2[grupa]'>$noticia2[vehicle]</option>";}
}
echo "</select>";
////////////////// This will end the first drop down list ///////////

////////// Starting of second drop downlist /////////

echo "<select name='subcat'><option value=''>Select one</option>";
while($noticia = mysql_fetch_array($quer)) {
echo "<option value='$noticia[vehicle]'>$noticia[doors]</option>";
}
echo "</select>";

////////////////// This will end the second drop down list ///////////

echo "<input type=submit value=Submit>";
echo "</form>";
?>
</body>

</html>

mamica
25-10-2007, 11:58
<script type="text/javascript">
function reload(form){
var val=form.cat.options[form.cat.options.selectedIndex].value;
self.location='dd-crorent.php?cat=' + val ;
}
</script>
</head>
<body>
<?php
// pobrini se da $cat doista bude broj
@$cat=$_GET['cat'];

echo '<form method="get" name="f1" action="dd-crorent.php">';
echo '<select name="cat" onchange="reload(this.form);"><option value="">Select one</option>';
$quer2=mysql_query('SELECT DISTINCT grupa, vehicle FROM car_description_croatia order by grupa');
while($noticia2 = mysql_fetch_array($quer2)){
echo '<option value="'.$noticia2['grupa'].'"'.($noticia2['vehicle']==@$cat ? ' selected' : '').'>'.$noticia2['vehicle'].'</option>';
}
echo '</select>';

echo '<select name="subcat"><option value="">Select one</option>';
$quer=mysql_query('SELECT DISTINCT vehicle, doors FROM car_description_croatia '.((isset($cat) and strlen($cat) > 0) ? 'WHERE vehicle='.$cat : 'ORDER BY grupa'));
while($noticia = mysql_fetch_array($quer)){
echo '<option value="'.$noticia['vehicle'].'">'.$noticia['doors'].'</option>';
}
echo '</select>';
echo '<input type="submit" value="Submit">';
echo '</form>';
?>
</body>
Napomena: nije testirano.

tchibo
25-10-2007, 16:33
evo drugi kod koji sam nekako uspio napraviti, ima mali problema ali vjerujem za vas nista strasno,

imam poslovnice u dubrovniku i zagrebu te odabirom grada bi trebao dobiti poslovnice u tom gradu, to sve radi ali mi iz nekog razloga sve dupla u menijima a a ako mjenjam izbor onda ih svaki put ponovno dupla, te ako u prvom meniju odaberem dubrovnik kada u drugom meniju izaberem zagreb opet mi izbacuje podatke dubrovnika.

Saljem 2 koda: html od formulara te php od koda sa javascritpom

html code od formulara je

<FORM name="drop_list" action="yourpage.php" method="POST" >

<p>
<SELECT NAME="Category" class="formslova" onChange="SelectSubCat();" >
<Option value="">Category</option>
</SELECT>

<SELECT NAME="SubCat" class="formslova" id="SubCat">
<Option value="">SubCat</option>
</SELECT>
</p>
<p>
<SELECT NAME="Category1" class="formslova" id="Category1" onChange="SelectSubCat();">
<Option value="">Category</option>
</SELECT>
<SELECT NAME="SubCat1" class="formslova" id="SubCat1">
<Option value="">SubCat</option>
</SELECT>
</p>
<p></p>
</form>


A PHP CODE SA JAVASCRIPT JE SLJEDECI

<?php

require "config.php"; // database connection details
echo "

function fillCategory(){
// this function is used to fill the category list on load

";

$q1=mysql_query("select * from branch_croatia");
echo mysql_error();
while($nt1=mysql_fetch_array($q1)){
echo "addOption(document.drop_list.Category, '$nt1[grad]', '$nt1[grad]');";
echo "addOption(document.drop_list.Category1, '$nt1[grad]', '$nt1[grad]');";
}
?>
} // end of JS function

function SelectSubCat(){
removeAllOptions(document.drop_list.SubCat);

<?
// let us collect all cat_id and then collect all subcategory for each cat_id
$q2=mysql_query("select distinct grad from branch_croatia");
// In the above query you can collect cat_id from category table also.
while($nt2=mysql_fetch_array($q2)){
//echo "$nt2[cat_id]";
echo "if(document.drop_list.Category.value == '$nt2[grad]'){";
$q3=mysql_query("select poslovnica from branch_croatia where grad='$nt2[grad]'");
while($nt3=mysql_fetch_array($q3)){
echo "addOption(document.drop_list.SubCat,'$nt3[poslovnica]', '$nt3[poslovnica]');";
echo "addOption(document.drop_list.SubCat1,'$nt3[poslovnica]', '$nt3[poslovnica]');";

} // end of while loop
echo "}"; // end of JS if condition

}
?>




}
//////////////////

function removeAllOptions(selectbox)
{
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
//selectbox.options.remove(i);
selectbox.remove(i);
}
}


function addOption(selectbox, value, text )
{
var optn = document.createElement("OPTION");
optn.text = text;
optn.value = value;

selectbox.options.add(optn);
}


evo kod,

diablo
25-10-2007, 19:46
bok,

evo primjera u prilogu.

inace to je preradjeni primjer koji sam nasao na:
http://www.dynamicdrive.com/dynamicindex1/chainedmenu/chainedmenu.html

tchibo
26-10-2007, 08:52
Hvala ti na primjeru ali pomalo gubim jer mi je sve to novo, ja sam napravio vec skoro 90% posla u svojoj skirpti pa ako mozes prodji je pa vidi gdje grijesim jer ja ne mogu skuzit nikako

tchibo
30-10-2007, 15:23
evo ipak na kraju sam se odlucio na ono sto si mi poslao i hvala radi odlicno, jedna mala izmjena mi je potrebna koju ne znam napraviti. Radi se o tome da zelim da mi kada odaberem jednu od opcija u meniju da mi tu istu opciju automatski odabere i na meniju ispod ali da isto tako ostavi meni potpun da mozes izabrati i nesto drugo osim toga.

Da puno ne objasnjavam jer nisam siguran da cu to uciniti efikasno mozes pogledati na sljedecem linku.

www.easyterra.com