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

Dinamicni formular

[es] :: Javascript i AJAX :: Dinamicni formular

[ Pregleda: 1938 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djovan01

Član broj: 75700
Poruke: 196
*.ip.mcleodusa.net.



Profil

icon Dinamicni formular09.01.2009. u 19:27 - pre 185 meseci
Trebam da napravim formular koji ce se ponasati ovako. Kada korisnik izabere opciju_1 sa drop down_liste1, drop down_lista2 se popuni sa odredjenim infmacijama koje su izvucene iz baze podataka uslovljene variablom opcija_1 .

e sada imam napravljen obican html formular i sve sql upite koji ce obavljati izvlacenja informacija iz baze ali ne znam kako da uklopim sve to da bi se ponasalo kako sto sam vec objasnila. Znam da se moze odraditi u JavaScript ali meni su tu moje programerske vestine zatajile tako da ukoliko znate pomozite.


Hvala



p.s. Potreban mi je najjednostavniji moguci primer koji cini ovo jer na netu sam nasla sve neke prekomplikovane tutoriale.

 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: Dinamicni formular09.01.2009. u 21:33 - pre 185 meseci
Evo pokushacu da ti objasnim shto jednostavnije... To se inache radi preko AJAX-a...

Za pochetak, ono shto treba da uradish u HTML-u kodu, odnosno u output delu tog tvog projekta je da na taj prvi drop down dodash dogadjaj onchange, npr. ovako:
Code:
<select name = "lista1" onchange = "izbor(this.value);">

Takodje, tom drugom drop down-u dodaj neki id, npr. id = "lista2".
Namerno sam u pozivu te f-je stavio this.value, chisto kao "prechica", da ne bi u kodu za AJAX morao da dohvatam vrednost te liste. A na osnovu te izabrane vrednosti (koja je recimo id neke tabele iz baze) ce se ispisivati sadrzaj te druge liste.

Kod fajla sa AJAX-om bi izgledao recimo ovako:
Code:

var xmlHttp;

function izbor(id) {
     xmlHttp = GetXmlHttpObject();
    if (xmlHttp == null) {
        alert ("Vaš browser ne podržava AJAX.");
        return;
    }
     
     /**
     * Definisanje php skripta koji ce da prihvati zahtev. 
     * Ova putanja mozhe da varira u zavisnosti od toga gde si postavila taj php fajl u odnosu na stranu na kojoj cesh da uchitavash ovaj AJAX fajl.
     */
     var url = "izbor_handler.php"; 
     
     xmlHttp.onreadystatechange = promena; //definisanje dogadjaja po slanju zahteva

     //slanje zahteva POST metodom
     xmlHttp.open("POST", url, true); 
     xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); 
     xmlHttp.send("item_id=" +id); //id je inache argument ove funkcije, a item_id je promenljiva koja ce se nalaziti u $_POST['id'] u tom php skriptu koji prihvata zahtev

}

//ovo je funkcija koja se poziva na dogadj onreadystatechange i ona treba da odradi promenu na drugoj listi
function promena() {
    if (xmlHttp.readyState == 4) { //kada je zahtev kompletiran (ovde cesh uvek pisati "shta zhelish da se odradi" po izvrshenju zahteva)
         document.getElementById('lista2').innerHTML = xmlHttp.responseText; //ispisivanje onoga shto je ispisao php skript unutar onoga shto obuhvata element sa id-em 'lista2'
    }
}
//ovo je funckcija za kreiranje XmlHttp objekta, ona se uvek zapisuje tako, i tu nema shta da menjash...
function GetXmlHttpObject(){
    var xmlHttp = null;
    
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    }
    catch (e) {
        // Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    
    return xmlHttp;
}

Ceo ovaj fajl sa AJAX-om treba da sachuvash sa nekim imenom, npr. izbor.js, i da ga uchitash u head sekciju tvoje web strane - <script language = "JavaScript" src = "izbor.js"></script>. Naravno, ta putanja mozhe da varira u zavisnosti od toga gde si postavila taj AJAX fajl u odnosu na stranu na kojoj ga uchitavash...

A kod php skripta izbor_handler.php bi izgledao ovako nekako:
Code:

<?php
$item_id = $_POST['item_id'];

/*
ovde ide tvoj kod za dohvatanje podataka iz baze
npr. $upit = "SELECT nekoPolje FROM tabela WHERE item_id = $item_id", 
itd.
...
*/

/*
zatim treba u petlji da ispishesh rezultat tog upita, ali u obliku <option>vrednost</option>, 
jer ono shto ispishe ovaj skript ce se ispisati unutar tog drugog select-a, npr.
while($red = mysql_fetch_assoc($rezultat)) {
     echo '<option>' .$red['nekoPolje'] . '</option>';
}
*/
?>

Eto, sve sam ti opisao u tim komentarima u kodu, nadam se da nisam previshe zakomplikovao... :) To ti je neka osnova AJAX-a, i taj princip cesh uvek da koristish...
 
Odgovor na temu

djovan01

Član broj: 75700
Poruke: 196
76.226.199.*



Profil

icon Re: Dinamicni formular11.01.2009. u 05:14 - pre 185 meseci
Razumela sam sve sto si objasnio i veliko ti hvala za odvojeno vreme i trud medjutim ipak nisam uspela da ostavarim plan i najgore mi je sto nemam nikakvu gresku da bi znala gde gresim.

u primeru koji si ostavio sam zamenila sve kako si mi rekao ali lista2 se nikako ne popunjava. Jel ima neki metod gde bi videla dali se uopste php fajl koji popunjava listu2 poziva.



Hvala
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Dinamicni formular11.01.2009. u 09:31 - pre 185 meseci
Pa verovatno sam napravio neku sintaksnu greshku dok sam pisao poruku...

Ako radish u Firefox-u, koristi njegovu Error Console-u (Tools -> Error Console) kad pokrenesh taj tvoj kod. Tu ce sigurno pisati neka greshka vezana za kod JavaScript-om (AJAX-om), ako uopshte postoji greshka. Proveri i dal' si dobro napisala te putanje do tog fajla sa AJAX-om. Takodje, proveri josh jednom i putanju do tog PHP skripta (var url = "izbor_handler.php";). Taj skript, u ovom mom sluchaju, treba da se nalazi na istom "nivou" kao i taj fajl u kome ispisujesh te drop-down liste.

Ako je to sve ok, onda najverovatnije neshto u tom PHP skriptu nije u redu...
 
Odgovor na temu

djovan01

Član broj: 75700
Poruke: 196
76.226.199.*



Profil

icon Re: Dinamicni formular11.01.2009. u 21:20 - pre 185 meseci
Hmmmmm proverila sam i kaze da je document.getElementById('competition').innerHTML = null

Php fajl odradi svoje kako treba jer sam testirala kod ne zavisno od ajaxa, znaci hvata iz baze sve sto treba ukoliko id je isporucen funkciji.


Znaci da php fajl nije vratio nista funkciji i zato nista nije ispisano. Jel tako?


Ovako izgleda form

Code:
 
form action="PHP/postTip.php" method="post">
    <table width="400" border="0">
      <tr>
        <td>Sport: </td>
        <td><label>
        <select name="sport" onchange = "izbor(this.value);">
        <option value="x" selected="selected">select sport..</option>
        <?php include ("getSports.php"); ?>
        </select>
        </label></td>
      </tr>
      <tr>
        <td>Competition:</td>
        <td>
<select name="competition">
        <option value="x" selected="selected">select competition..</option>
        </select>
        </td>
      </tr>
</form>




Ovako izgleda ajax

Code:

var xmlHttp;

function izbor(id) {
     xmlHttp = GetXmlHttpObject();
    if (xmlHttp == null) {
        alert ("Vaš browser ne podržava AJAX.");
        return;
    }
     
    var url = "getCompetitions.php"; 
     
     xmlHttp.onreadystatechange = promena; //definisanje dogadjaja po slanju zahteva

     //slanje zahteva POST metodom
     xmlHttp.open("POST", url, true); 
     xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); 
     xmlHttp.send("item_id=" +id); //id je inache argument ove funkcije, a item_id je promenljiva koja ce se nalaziti u $_POST['id'] u tom php skriptu koji prihvata zahtev

}

//ovo je funkcija koja se poziva na dogadj onreadystatechange i ona treba da odradi promenu na drugoj listi
function promena() {
    if (xmlHttp.readyState == 4) { //kada je zahtev kompletiran (ovde cesh uvek pisati "shta zhelish da se odradi" po izvrshenju zahteva)
         document.getElementById('competition').innerHTML = xmlHttp.responseText; //ispisivanje onoga shto je ispisao php skript unutar onoga shto obuhvata element sa id-em 'lista2'
    }
}
//ovo je funckcija za kreiranje XmlHttp objekta, ona se uvek zapisuje tako, i tu nema shta da menjash...
function GetXmlHttpObject(){
    var xmlHttp = null;
    
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    }
    catch (e) {
        // Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    
    return xmlHttp;
}



HVALA
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Dinamicni formular12.01.2009. u 16:05 - pre 185 meseci
Citat:
djovan01: Hmmmmm proverila sam i kaze da je document.getElementById('competition').innerHTML = null

To ti javlja zato shto si ti tom select-u stavila atribut name, a pozivash ga sa getElementById(). Ili mu umesto name stavi atribut id (id = "competition"), ili ostavi to name, ali onda mu u kodu pristupaj ovako: document.getElementsByName('competition')[0].innerHTML...
 
Odgovor na temu

djovan01

Član broj: 75700
Poruke: 196
*.ip.mcleodusa.net.



Profil

icon Re: Dinamicni formular21.01.2009. u 18:42 - pre 185 meseci
Hvala najlepse na objasnjenju. SVe funkcionise kako treba ali samo u Firefox-u. U IE7 ni jedan dropdown se ne ispuni potrebnim informacijama. Da li bi trebala jos nesto da upisem u js file da bi radilo u IE.

Hvala
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.yu.



+33 Profil

icon Re: Dinamicni formular21.01.2009. u 21:47 - pre 185 meseci
Ne znam shta da ti kazhem, IE je pricha za sebe i za njega uvek trebaju neki dodatni "zahvati" (citaj: hack-ovi) kako bi se dobio zheljeni rezultat. :)

Sad sam bash malo google-ao na temu "ajax ie7", i vidim da ima dosta rezultata vezanih za konflikt ta dva pojma. :) Ali josh nisam naleteo na neku temu u kojoj je konkretno reshenje za taj problem, tako da trenutno ne mogu nishta da ti kazhem povodom ovog tvog problema sa IE-om.

Potrazhi i ti neshto o tome na Google-u, pa javi ako saznash reshenje, jer i mene to veoma zanima... :)

Poz!
 
Odgovor na temu

[es] :: Javascript i AJAX :: Dinamicni formular

[ Pregleda: 1938 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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