Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

dupli pull down meni

[es] :: PHP :: dupli pull down meni

[ Pregleda: 4163 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Gurbaj Bojan
Rotterdam

Član broj: 80655
Poruke: 4
145.72.98.*



Profil

icon dupli pull down meni10.01.2006. u 10:47 - pre 200 meseci
Imam sledeci 'problem':

u php stranici pravim formu gde zelim da napravim dupli pull down meni.
Cilj forme je da korisnik bira kategoriju, a zatim na osnovu izabrane kategorije i podkategoriju.

Primer za prvi pull-down meni:
Marka Auta
Opcije: 1. Audi 2. BMW 3. VW

Drugi pull-down meni (ukoliko je birana opcija 3 VW)
Opcija 1. Polo 2. Bora 3. Golf

Znam da ovo moze da se uradi sa JavaScript-om, ali ja zelim da mi forma automatski prilikom biranja neke opcije iz prve kategorije, napravi queri u bazi i u drugi pull-down meni prikaze odgovarajuce opcije.

Code:
 

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 

<!-- Prvi pull-down menu. --> 
<select name="marka"> 
<option>-- Izaberite marku--</option> 
<option value="1">Audi</option> 
<option value="2">BMW</option> 
<option value="3">VW</option> 
</select> 

<!-- Drugi pull-down menu. --> 
<select name="model"><option>-- Izaberite model--</option> 
<?php 

// Query the database. 
require_once ('../mysql_connect.php'); 
$query = "SELECT * FROM model WHERE id_marka = marka"; 
$result = @mysql_query ($query); 
while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) { 
        echo "<option value=\"{$row['id_model']}\">{$row['model']}</option>\n"; 

mysql_close(); 
?> 
</select><br /> 

<div align="center"><input type="submit" name="submit" value="send" /></div> 
</form> 



Ovo je primer kako sam to zamislio, naravno drugi pull-down meni ne funkcionise kako bi ja to zeleo.
Moje pitanje je da li je moguce u jednoj formi na osnovu biranja neke opcije iz prvog pull-down menija forsirati query i odgovarajuce rezultate vratiti u drugi pull-down meni? I ukoliko jeste kako?

Unapred hvala svima na odgovoru.
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: dupli pull down meni10.01.2006. u 11:45 - pre 200 meseci
Potrazi ovde na forumu, bilo je par tema o Ajax-u. Samo sa PHP to ne mzoes da odradis. JavaSCript ti ne gine.
 
Odgovor na temu

Gurbaj Bojan
Rotterdam

Član broj: 80655
Poruke: 4
145.72.98.*



Profil

icon Re: dupli pull down meni11.01.2006. u 16:16 - pre 200 meseci
Ok, hvala na odgovoru.
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: dupli pull down meni11.01.2006. u 20:24 - pre 200 meseci
@broker
Normalno da moze da se odradi samo preko PHP-a.
@Gurbaj Bojan
To sto moze da se odradi samo preko PHP-a ne znaci da je to najpodesniji za dobijanje funkcionalnosti koji ti treba (a to je da se vrednosti u drugom meniju menjaju od izabrane vrednosti u prvom). Ako ukupan broj svih mogucnosti nije veliki mozes koristiti obican JS koji bi generisao u okviru HTML-a na klijentu. Ako je broj mogucnosti veliki onda koristi AJAX.
Owl
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: dupli pull down meni12.01.2006. u 09:56 - pre 200 meseci
_owl_ ja sam podrazumevao da covek nece da mu se strana refreshuje kada promeni jedan combo box da bi se ucitale vrednoti u drugi...
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: dupli pull down meni12.01.2006. u 15:53 - pre 200 meseci
Znam, samo sto je to jedina i glavna mana takvog pristupa. Zato je bitno da se objasni da su druge varijante povoljnije jer ne postoji taj dodatni refresh strane pri izboru svake stavke iz "glavnog" menija.
Owl
 
Odgovor na temu

robot_1

Član broj: 77304
Poruke: 16
*.adsl.net.t-com.hr.

Sajt: korekt.no-ip.biz/cam


Profil

icon Re: dupli pull down meni13.01.2006. u 20:52 - pre 200 meseci
to ti se radi sa javascript.
najjednostavnije ti je da projdeš na www.umrli.hr - bez zajebancije. i to tamo ukradi (oni imaju mjesec - pa dan (ovisno o mjesecu kreira se drugi drop down box sa brojem dani pripadajućeg mjeseca))
 
Odgovor na temu

Gurbaj Bojan
Rotterdam

Član broj: 80655
Poruke: 4
*.adsl2.versatel.nl.



Profil

icon Re: dupli pull down meni16.01.2006. u 21:28 - pre 200 meseci
Pokusao sam u medjuvremenu da resim ovo pomocu xmlHttpRequest, koji je opisan na sajtu http://www.webpasties.com/xmlH...xmlHttpRequest_tutorial_1.html koji sam pronasao ovde na ES-u trazeci AJAX. Ovo funkcionise, znaci na osnovu izbora u prvom pull-down meni, pretrazuje se mysql baza i vraca mi podatke koji odgovaraju. Medjutim, vraca mi se samo jedan podatak koji moze da se smesti u text-field kao na primer
Code:
 <input type="text" name="subkategorija" id="subkategorija" /> 

a meni je potrebno da se svi podaci vrate koji odgovaraju i da se smeste u sledeci pulldown meni, znaci nesto poput

Code:
<select name="subkategorija" id="subkategorija">
<option value="">-- Izaberite subkategoriju --</option>
</select><br />
.
Ovo mi nikako ne uspeva, pretrazio sam internet ali osim vracanja podatka u obican text-field nisam pronasao druge mogucnosti, pa me interesuje da li neko zna kako bi to trebalo da se izvede?
U suprotnom mi ne preostaje nista drugo nego da sve uradim pomocu javascripte (ali ima mnogo opcija, oko 100, pa bi radije to da resim sa xmlHttpRequest).

Opet hvala svima na trudu.
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: dupli pull down meni16.01.2006. u 23:10 - pre 200 meseci
To vec nije tema PHP foruma. Pitaj u temama u kojima su pricali o AJax-u. Koliko znam, trebalo bi da mozes da dobijes podatke kao niz pa posle njima da popunis comb box recimo.
 
Odgovor na temu

valeksa
Vladan Aleksic
Beograd

Član broj: 33124
Poruke: 46
195.252.91.*



Profil

icon Re: dupli pull down meni16.01.2006. u 23:31 - pre 200 meseci
Mislim da ne moze da se vrati niz, nativno, iz xmlHTPRequst-a. Koliko znam moze da se vrati ili broj ili string.

Probaj, da u metodi koja ti vraca vrednosti, upakujes sve opcije sa nekim delimiterom, pa ga onda raspakuj(explode) tamo gde ti treba.

Pozdrav,
Vladan
 
Odgovor na temu

[email protected]
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: dupli pull down meni17.01.2006. u 07:04 - pre 200 meseci
Evo jedan primer, malo sam se igrao. Nisam koristio bazu jer me je mrzelo, pa sam sve smestio u jedan niz, ali nadam se da tebi nije problem to da uradiš. Možda su dodate neke suvišne stravari, kao na primer biranje metode (post ili get) iz padajućeg menija, ali ti možeš se odlučiti samo za jednu i tu koristiti. Kompletan kod sam stavio u jedan fajl kako ne bi postavljao više fajlova.
Code:

<?php
if(isset($_REQUEST['manufacturer'])) {
  header('Expires: Mon, 26 Jul 1997 07:00:00 GMT');
  header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  header('Cache-Control: no-cache, must-revalidate');
  header('Pragma: no-cache');
  header('Content-type: text/xml');
  $manufacturer = (int)$_REQUEST['manufacturer'];
  $models = Array(
                  1 => Array('Model 11', 'Model 12', 'Model 13'),
                  2 => Array('Model 21', 'Model 22', 'Model 23', 'Model 24'),
                  3 => Array('Model 31', 'Model 32', 'Model 33', 'Model 34', 'Model 35')
                 );
  $output = '<?xml version="1.0" ?><options>';
  if(!isset($models[$manufacturer])) {
    $output .= '<error><![CDATA[Manufacturer &quot;'.$manufacturer.'&quot; did not found.]]></error>';
  } else {
    for($i=0; $i<count($models[$manufacturer]); $i++) {
      $output .= '<option id="'.$i.'"><![CDATA['.$models[$manufacturer][$i].']]></option>';
    }
  }
  $output .= '</options>';
  echo $output;
} else {
?>
<html>
<head>
<title>test</title>
<script>
function getRequestObject(){
  var req;
  try {
    req = new ActiveXObject('Msxml2.XMLHTTP');
  }
  catch (e){
    try    {
      req=new ActiveXObject('Microsoft.XMLHTTP');
    }
    catch (e2){
      req=null;
    }
  }
  if(!req && typeof XMLHttpRequest != 'undefined')
    req = new XMLHttpRequest();
  return req;
}
function processRequest(args, requestType) {
  var req, uri, uriData;
  uri = '<?php echo $_SERVER['PHP_SELF'];?>';
  uriData = 'manufacturer='+args;
  document.getElementsByTagName('body')[0].style.cursor = 'wait';
  document.getElementById('status').innerHTML = 'loading...';
  switch(requestType) {
    case 'GET':
      uri += '?' + uriData;
      postData = null;
    break;
    case 'POST':
      postData = uriData;
    break;
    default:
      document.getElementsByTagName('body')[0].style.cursor = 'default';
      document.getElementById('status').innerHTML = 'error';
      alert('Illegal request type: ' + requestType);
      return false; 
    break;
  }
  req = getRequestObject();
  req.open(requestType=='GET'?'GET':'POST', uri, true);
  if (requestType == 'POST'){
    try{
      req.setRequestHeader('Method', 'POST ' + uri + ' HTTP/1.1');
      req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      req.setRequestHeader('Content-Length', postData.length);
      req.setRequestHeader('Connection', 'close'); 
    }
    catch(e){
      document.getElementById('status').innerHTML = 'error';
      document.getElementsByTagName('body')[0].style.cursor = 'default';
      alert('Your browser does not appear to  support asynchronous requests using POST.');
      return false;
    }
  }
  req.onreadystatechange = function() {
    if (req.readyState != 4) return;
    if (req.status == 404) {
      document.getElementsByTagName('body')[0].style.cursor = 'default';
      document.getElementById('status').innerHTML = 'error';
      alert('Error 404: Document "'+uri+'" not found.');
      return false;
    }
    if (req.status==200) {
      if (req.responseXML) processResponse(req.responseXML);
      else     {
        document.getElementsByTagName('body')[0].style.cursor = 'default';
        document.getElementById('status').innerHTML = 'error';
        alert('Error: the XML response that was returned from the server is invalid.');
        return false;
      }
    }
    delete req;
  }
  req.send(postData);
  delete req;
  return true;
}
function processResponse(xml) {
  var elem, output, id;
  elem = document.getElementById('model');
  xml = xml.getElementsByTagName('options')[0];
  if (xml == null) {
    document.getElementsByTagName('body')[0].style.cursor = 'default';
    document.getElementById('status').innerHTML = 'error';
    alert('Error: the XML response that was returned from the server cannot be processed.');
    return false;
  }
  elem.options.length=0;
  elemChild = xml.childNodes;
  if(elemChild[0].nodeName == 'error') {
    document.getElementsByTagName('body')[0].style.cursor = 'default';
    document.getElementById('status').innerHTML = '<strong>Error:</strong> ' + elemChild[0].firstChild.nodeValue;
    elem.options[elem.options.length] = new Option('----');
    return false;
  }
  
  for(i=0; i<elemChild.length; i++){
    if (elemChild[i].nodeName == 'option') {
      id = elemChild[i].attributes.getNamedItem('id').value;
      elem.options[elem.options.length] = new Option(elemChild[i].firstChild.nodeValue, id);
    }
  }
  delete xml;
  document.getElementsByTagName('body')[0].style.cursor = 'default';
  document.getElementById('status').innerHTML = 'finished';
}
</script>
</head>
<body>
  <form action="#" method="post">
    Methods: 
    <select name="method" id="method">
      <option value="GET">GET</option>
      <option value="POST">POST</option>
    </select>
    <br />
    Manufacturers: 
    <select name="manufacturer" id="manufacturer" onChange="processRequest(document.getElementById('manufacturer').value, document.getElementById('method').value)">
      <option value="1">Manufacturer 1</option>
      <option value="2">Manufacturer 2</option>
      <option value="3">Manufacturer 3</option>
      <option value="4">Manufacturer 4</option>
    </select>
    <br />
    Models: 
    <select name="model" id="model">
      <option>----</option>
    </select>
  </form>
  <div id="status"></div>
</body>
</html>
<?php } ?>

Mošda sam neke stvari malo zakomplikovao.
Ti možeš uraditi i mnogo lakše, kao što je gore navedeno, da prosleđuješ niz, tačnije da prosleđuješ string koji će biti sastavljen od članova niza razdvojenih nekim delimiterom, pa da posle pomoću JS-a split-uješ (razbiješ) taj string i dobiješ svoj niz.

[Ovu poruku je menjao [email protected] dana 17.01.2006. u 09:34 GMT+1]
Banned - Not available
 
Odgovor na temu

valeksa
Vladan Aleksic
Beograd

Član broj: 33124
Poruke: 46
80.93.229.*



Profil

icon Re: dupli pull down meni17.01.2006. u 10:09 - pre 200 meseci
[email protected]:

svaka cast na konkretnom postu...

Pozdrav,
Vladan
 
Odgovor na temu

[email protected]
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: dupli pull down meni17.01.2006. u 12:22 - pre 200 meseci
Hvala.
Pozdrav.
Banned - Not available
 
Odgovor na temu

Gurbaj Bojan
Rotterdam

Član broj: 80655
Poruke: 4
145.72.98.*



Profil

icon Re: dupli pull down meni17.01.2006. u 14:07 - pre 200 meseci
[email protected]:

Hvala na odgovoru, isprobacu ovo pa cu javiti da li je uspelo.

Pozdrav,
Bojan
 
Odgovor na temu

[es] :: PHP :: dupli pull down meni

[ Pregleda: 4163 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.