Codul Javascript va fi inserat, de dorit, între etichetele head
, fiind necesar pentru a încărca conţinutul listelor de judeţe şi localităţi, datorită funcţiilor aferente evenimentului OnChange
; primul combobox este populat la încărcarea paginii, neavând nevoie de „ajutor”.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<script> function fc_cbo1(form) { var val=form.tara.options[form.tara.options.selectedIndex].value; self.location='index.php?tara=' + val ; } function fc_cbo2(form) { var val=form.tara.options[form.tara.options.selectedIndex].value; var val2=form.judet.options[form.judet.options.selectedIndex].value; self.location='index.php?tara=' + val + '&judet=' + val2 ; } </script> |
Cele trei interogări necesare populării fiecărui combobox sunt următoarele:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?php $sql_n1=" SELECT DISTINCT tr_nume, tr_id FROM t_tari ORDER BY tr_nume "; IF (ISSET($_GET['tara'])) { $tara=$_GET['tara']; IF(isset($tara) and strlen($tara) > 0) { $sql_n2=" SELECT DISTINCT jd_nume,jd_id FROM t_judete WHERE jd_tr_id=$tara ORDER BY jd_nume "; } ELSE { $sql_n2=" SELECT DISTINCT jd_nume, jd_id FROM t_judete ORDER BY jd_nume "; } } IF (ISSET($_GET['judet'])) { $judet=$_GET['judet']; IF(isset($judet) and strlen($judet) > 0) { $sql_n3=" SELECT DISTINCT or_nume, or_id FROM t_orase WHERE or_jd_id=$judet ORDER BY or_nume "; } ELSE { $sql_n3=" SELECT DISTINCT or_nume, or_id FROM t_orase ORDER BY or_nume "; } } ?> |
Formularul aferent este redat mai jos. De menţionat că, afişarea se va face datorită scriptului this.form.submit()
aferent evenimentului OnChange
din ultimul combobox.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<form method="POST" name="f1" action=""> <select name="tara" onchange="fc_cbo1(this.form)"> <option value=''>-- Selectaţi ţara --</option><?php $rez_n1=mysqli_query($con, $sql_n1); WHILE ($rd1=mysqli_fetch_assoc($rez_n1) ) { IF($rd1['tr_id']==$tara) { ?> <option value="<?php ECHO $rd1['tr_id'];?>" selected ><?php ECHO $rd1['tr_nume'];?></option><?php } ELSE {?> <option value="<?php ECHO $rd1['tr_id'];?>" ><?php ECHO $rd1['tr_nume'];?></option><?php } } ?> </select> <select name='judet' onchange="fc_cbo2(this.form)"> <option value=''>-- Selectaţi regiunea/judeţul --</option><?php $rez_n2=mysqli_query($con, $sql_n2); WHILE ($rd2=mysqli_fetch_assoc($rez_n2) ) { IF($rd2['jd_id']==$judet) {?> <option value="<?php ECHO $rd2['jd_id'];?>" selected ><?php ECHO $rd2['jd_nume'];?></option><?php } ELSE {?> <option value="<?php ECHO $rd2['jd_id'];?>" ><?php ECHO $rd2['jd_nume'];?></option><?php } } ?> </select> <select name='oras' onchange="this.form.submit()"> <option value=''>-- Selectaţi localitatea --</option><?php $rez_n3=mysqli_query($con, $sql_n3); WHILE ($rd3=mysqli_fetch_assoc($rez_n3) ) { IF($rd3['or_id']==$_POST["oras"]) {?> <option value="<?php ECHO $rd3['or_id'];?>" selected ><?php ECHO $rd3['or_nume'];?></option><?php } ELSE {?> <option value="<?php ECHO $rd3['or_id'];?>" ><?php ECHO $rd3['or_nume'];?></option><?php } } ?> </select> <a href="index.php">Restart filtrare</a> </form> |
După cum se observă, pentru a elimina filtrele, formularele se încheie cu un link de resetare. Rezultatul filtrării va fi redat conform codului de mai jos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php if(isset($_POST["oras"])) { $oras=$_POST["oras"]; $sql_f=" SELECT t.tr_nume, t.tr_id, j.jd_nume, j.jd_id, o.or_nume, o.or_id, p.prs_id, p.prs_compania, p.prs_nume, p.prs_pren, p.prs_sex, p.prs_varsta FROM `t_tari` AS t INNER JOIN `t_judete` AS j ON t.tr_id=j.jd_tr_id INNER JOIN `t_orase` AS o ON j.jd_id=o.or_jd_id INNER JOIN `t_pers` AS p ON o.or_id=p.prs_loc_id WHERE o.or_id=$oras "; IF($afis_con==1) {ECHO '<pre>sql_f '.$sql_f.'</pre>';} IF($afis_con==1) {IF (ISSET($oras)) {ECHO '<pre>oras '.$oras.'</pre>';}} $rez_f=mysqli_query($con, $sql_f); IF(mysqli_num_rows($rez_f)) { ?> <table border=1><tr><th>Nr.</th><th>Compania</th><th>Numele</th><th>Prenumele</th><th>Vârsta</th></tr><?php $nr=0; WHILE ($rd_f=mysqli_fetch_assoc($rez_f)) { $nr++; $tr_nume = $rd_f['tr_nume']; $jd_nume = $rd_f['jd_nume']; $or_nume = $rd_f['or_nume']; $prs_compania = $rd_f['prs_compania']; $prs_nume = $rd_f['prs_nume']; $prs_pren = $rd_f['prs_pren']; $prs_varsta = $rd_f['prs_varsta']; echo "<tr><td>$nr</td><td>$prs_compania</td><td>$prs_nume</td><td>$prs_pren</td><td>$prs_varsta</td><tr>"; } ?></table><?php } ELSE { ECHO 'Nu sunt companii şi persoane vizate în aceste localităţi.'; } } ?> |
Aşadar, tot acest script poate fi inserat într-un fişier php, care va avea în introducerea sa, după cum este şi firesc, codul necesar conectării la baza de date.
- Adaptare după Plus2Net.com
- Surse pentru „inventarea” de nume şi prenume: Wikipedia
Surse pentru baza de date privind oraşele lumii, realizată prin prelucrarea:
• SimpleMaps.com
• Europa.eu
• GitHub.com