Pretraga baze podataka sa vise polja za unos

Pretraga baze podataka sa vise polja za unos

offline
  • Pridružio: 08 Nov 2007
  • Poruke: 12
  • Gde živiš: Brcko, BiH

Treba da napravim pretragu za katalog guma, ali ne znam kako Very Happy

                        <table width="650" height="210" border="0" cellspacing="0" cellpadding="0" class="gume">                           <tr>                             <td align="left" valign="top"><form>                                 <table width="440" height="210" border="0" cellpadding="0" cellspacing="0">                                   <tr>                                     <td align="center" valign="top">Proizvođač<br>                                       <select>                                         <option>-</option>                                         <option>Bridgestone</option><option>Goodyear</option><option>Michelin</option><option>Tigar</option>                                      </select></td>                                     <td align="center" valign="top">Širina<br>                                       <select>                                         <option>-</option>                                         <option>145</option>                                         <option>155</option>                                         <option>165</option>                                         <option>175</option>                                         <option>185</option>                                         <option>195</option>                                         <option>205</option>                                         <option>215</option>                                         <option>225</option>                                         <option>235</option>                                         <option>245</option>                                         <option>255</option>                                         <option>265</option>                                         <option>275</option>                                         <option>315</option>                                       </select></td>                                   </tr>                                   <tr>                                     <td align="center" valign="top">Tip gume<br>                                       <select>                                         <option>-</option>                                         <option>4x4</option>                                         <option>Putnicka vozila</option>                                         <option>Kombi vozila</option>                                         <option>Teretna vozila</option>                                       </select></td>                                     <td align="center" valign="top">Visina<br>                                       <select>                                         <option>-</option>                                         <option>35</option>                                         <option>40</option>                                         <option>45</option>                                         <option>50</option>                                         <option>55</option>                                         <option>60</option>                                         <option>65</option>                                         <option>70</option>                                         <option>80</option>                                       </select></td>                                   </tr>                                   <tr>                                     <td align="center" valign="top">Vrsta gume<br>                                       <select>                                         <option>-</option>                                         <option>Zimske gume</option>                                         <option>Ljetne gume</option>                                         <option>Kombinovane M+S</option>                                       </select></td>                                     <td align="center" valign="top">Promjer<br>                                       <select>                                         <option>-</option>                                         <option>R12</option>                                         <option>R13</option>                                         <option>R14</option>                                         <option>R15</option>                                         <option>R16</option>                                         <option>R17</option>                                         <option>R18</option>                                         <option>R19</option>                                         <option>R20</option>                                       </select></td>                                   </tr>                                   <tr>                                     <td align="center" valign="top">Indeks brzine<br>                                       <select>                                         <option>-</option>                                         <option>T: max 190 km/h</option>                                         <option>H: max 210 km/h</option>                                         <option>V: max 240 km/h</option>                                         <option>ZR, W, Y</option>                                       </select></td>                                     <td align="center" valign="middle"><a><img></a></td>                                   </tr>                                 </table>                               </form></td>                           </tr>                         </table>

tako izgleda forma za unos, na koji nacin mogu pretraziti bazu, imam tri tabele u bazi, proizvodjac model i velicina, iz svake tabele se povlace odredjeni podaci....tabele udruzim preko joina i mogu citati sve podatke kao sto mi treba, ali mi treba pomoc kod where - like upita za pretragu...

prvi put radim pretragu za katalog pa sam malo zapeo Neutral



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Pozdrav

Pre svega, u select-u moras da definises id, da bi mogao da ih razlikujes.
Zatim, ovo sto si sve naveo ti je u nekom <form> tagu pretpostavljam?
Imas atribut form action="nekastranica.php" sa metodom post?

Kad je to ispunjeno, idemo dalje.
Na stranici 'nekastranica.php' povezes se sa bazom i napravis recimo ovakav upit
$query="SELECT * FROM proizvodi where 1=1 ";
Zbog cega to, videces dalje.
Pretpostavimo da si u select-u definisao razlicite id-jeve za pretragu, npr. imas tipGume kao neki id. onda uradis ovako:
if(trim($tipGume)!="-") $query .= " and tipGume ='$tipGume'";
mada ovo trim ti i ne treba Smile, al nema veze.
Prethodno, pretpostavljam da si za promenljivu $tipGume dodelio vrednost od $_post['tipGume'];
i tako i za ostale atribute uradis.

O cemu se radi?
Imas osnovni upit:
"SELECT * FROM proizvodi where 1=1 ";
Koji lista sve proizvode. Ukoliko je negde psotavljena vrednost iz padajuceg menija na nesto drugo, on ce dodati to u upit sa onim
$query .= " and tipGume ='$tipGume'";
.= je konkatenacija... Smile
Srecno



offline
  • Pridružio: 08 Nov 2007
  • Poruke: 12
  • Gde živiš: Brcko, BiH

Opet mi treba pomoc Crying or Very sad

ne znam gdje sam pogrijesio ali mi skripta, ako ima vise velicina pod jednim modelom, cita iz baze samo id modela za prvu velicinu, a ostale kao da ne postoje...i htio bih da mi za jedan model grupise sve velicine kod prikaza... evo dole cu navesti i bazu i skripte


baza tabele: akcija, modeli, novosti, proizvodjac, velicina

akcija:
akcija_id
akcija_pocetak
akcija_kraj
akcija_rabat

modeli:
model_id
akcija_id
proizvodjac_id
model_naziv
model_opis
model_slika
model_tip
model_vrsta

novosti:
id
naziv
slika
opis
datum

proizvodjac:
proizvodjac_id
proizvodjac_naziv

velicina:
velicina_id
model_id
akcija_id
velicina_sirina
velicina_visina
velicina_promjer
velicina_brzina
velicina_opterecenje
velicina_vpc
velicina_mpc

tako izgledaju polja u tabelama...
a evo kod iz tri skripte: home gdje su polja za unos, serch, gdje lista tabele iz baze i search_prikaz gdje pokazuje odredjeni model

home:

<Tabela> <table width="650" height="210" border="0" cellspacing="0" cellpadding="0" id="gume">   <tr>     <td align="left" valign="top"><form>         <table width="650" height="210" border="0" cellpadding="0" cellspacing="0">           <tr>             <td align="left" valign="top" width="200">Proizvođač<br>               <select>                 <option>-</option>                 </option>               </select></td>             <td align="left" valign="top" width="150">Širina<br>               <select>                 <option>-</option>                 <option>145</option>                 <option>155</option>                 <option>165</option>                 <option>175</option>                 <option>185</option>                 <option>195</option>                 <option>205</option>                 <option>215</option>                 <option>225</option>                 <option>235</option>                 <option>245</option>                 <option>255</option>                 <option>265</option>                 <option>275</option>                 <option>315</option>               </select></td>             <td align="left" valign="top" rowspan="4" width="216"><img></td>           </tr>           <tr>             <td align="left" valign="top">Tip gume<br>               <select>                 <option>-</option>                 <option>4x4</option>                 <option>Putnicka vozila</option>                 <option>Kombi vozila</option>                 <option>Teretna vozila</option>               </select></td>             <td align="left" valign="top">Visina<br>               <select>                 <option>-</option>                 <option>35</option>                 <option>40</option>                 <option>45</option>                 <option>50</option>                 <option>55</option>                 <option>60</option>                 <option>65</option>                 <option>70</option>                 <option>80</option>               </select></td>           </tr>           <tr>             <td align="left" valign="top">Vrsta gume<br>               <select>                 <option>-</option>                 <option>Zimske gume</option>                 <option>Ljetne gume</option>                 <option>Kombinovane M+S</option>               </select></td>             <td align="left" valign="top">Precnik<br>               <select>                 <option>-</option>                 <option>R12</option>                 <option>R13</option>                 <option>R14</option>                 <option>R15</option>                 <option>R16</option>                 <option>R17</option>                 <option>R18</option>                 <option>R19</option>                 <option>R20</option>               </select></td>           </tr>           <tr>             <td align="left" valign="top">Indeks brzine<br>               <select>                 <option>-</option>                 <option>T: max 190 km/h</option>                 <option>H: max 210 km/h</option>                 <option>V: max 240 km/h</option>                 <option>ZR, W, Y</option>               </select></td>             <td align="left" valign="middle"><input></td>           </tr>         </table>       </form></td>   </tr> </table> <Kraj> <p> <div><a>Akcija guma</a>   <hr> </div> <p>   <?php $sql=("SELECT modeli.model_id,modeli.model_naziv,modeli.model_opis,modeli.model_slika,modeli.model_tip,modeli.model_vrsta,akcija.akcija_id,akcija.akcija_pocetak,akcija.akcija_kraj,akcija.akcija_rabat                         FROM modeli, akcija                         WHERE modeli.akcija_id=akcija.akcija_id LIMIT 5"); if (!$q=mysql_query($sql)) { echo "Nastala je greška pri izvodenju upita<br>" . mysql_query(); die(); } if (mysql_num_rows($q)==0) { echo "Nema modela<br>"; } else { // Change display for number of columns. Do not change cols as it is needed for counting. $display = 5; $cols = 0; echo "   <table>"; while($red = mysql_fetch_array($q)){    if($cols == 0){        echo "<tr>";    }    // Display each cell here    echo "<td>            <table>               <tr>                  <td><a>". $red['model_naziv'] ."<p><img></a>";             echo "</td>               </tr>            </table>         </td>";    $cols++;    if($cols == $display){        echo "</tr>";        $cols = 0;    } } // Display the correct HTML if($cols != $display && $cols != 0){    $neededtds = $display - $cols;    for($i=0;$i</td> <p> <div>novosti   <hr> </div> <p> <table width="650" border="0" cellspacing="0" cellpadding="0">   <tr>     <td align="left" valign="top"><?php $sql=("SELECT * FROM novosti ORDER BY datum DESC LIMIT 8"); if (!$q=mysql_query($sql)) { echo "Nastala je greška pri izvodenju upita<br>" . mysql_query(); die(); } if (mysql_num_rows($q)==0) { echo "Nema novosti<br>"; } else { // Change display for number of columns. Do not change cols as it is needed for counting. $display = 1; $cols = 0; echo "   <table>"; while($red = mysql_fetch_array($q)){    if($cols == 0){        echo "<tr>";    }    // Display each cell here    echo "<td>            <table>               <tr>                  <td><a><img></a>". $red['naziv'] ."<p>". $red['opis'] ."</div>";             echo "</td>               </tr>            </table><p>         </td>";    $cols++;    if($cols == $display){        echo "</tr>";        $cols = 0;    } } // Display the correct HTML if($cols != $display && $cols != 0){    $neededtds = $display - $cols;    for($i=0;$i</td></td>   </tr> </table>

search:

<?php    // Get the search variable from URL   $proizvodjac = $_POST['proizvodjac'] ;   $sirina = $_POST['sirina'] ;   $tip = $_POST['tip'] ;   $visina = $_POST['visina'] ;   $vrsta = $_POST['vrsta'] ;   $precnik = $_POST['precnik'] ;   $index = $_POST['index'] ; // Build SQL Query  $query = "SELECT * FROM modeli LEFT JOIN velicina ON velicina.model_id = modeli.model_id WHERE 1"; // EDIT HERE and specify your table and field names for the SQL query if(trim($proizvodjac)!="-") $query .= " and modeli.proizvodjac_id = '$proizvodjac'"; if(trim($tip)!="-") $query .= " and modeli.model_tip ='$tip'"; if(trim($vrsta)!="-") $query .= " and modeli.model_vrsta ='$vrsta'"; if(trim($sirina)!="-") $query .= " and velicina.velicina_sirina ='$sirina'"; if(trim($visina)!="-") $query .= " and velicina.velicina_visina ='$visina'"; if(trim($precnik)!="-") $query .= " and velicina.velicina_promjer ='$precnik'"; if(trim($index)!="-") $query .= " and velicina.velicina_brzina ='$index'"; $query .= " GROUP BY modeli.model_id";  $numresults=mysql_query($query);  $numrows=mysql_num_rows($numresults); // If we have no results, offer a google search as an alternative if ($numrows == 0)   {   echo "<h4>Rezultat pretrage</h4>";   echo "<p>Nema trazenog modela</p>";   }   $result = mysql_query($query) or die("Couldn't execute query"); if ($numrows !== 0) { // now you can display the results returned // Change display for number of columns. Do not change cols as it is needed for counting. $display = 5; $cols = 0; echo "<h4>Rezultat pretrage</h4><p><table>"; while($red = mysql_fetch_array($result)){        if($cols == 0){        echo "<tr>";    }    // Display each cell here    echo "<td>            <table>               <tr>                  <td><a>". $red['model_naziv'] ."<p><img></a>";             echo "</td>               </tr>            </table>         </td>";    $cols++;    if($cols == $display){        echo "</tr>";        $cols = 0;    } } // Display the correct HTML if($cols != $display && $cols != 0){    $neededtds = $display - $cols;    for($i=0;$i</td>       

search_pregled:

<?php $model_id=$_GET["model_id"]; $sql=("SELECT * FROM modeli WHERE model_id='$model_id'"); if (!$q=mysql_query($sql)) { echo "Nastala je greška pri izvodenju upita<br>" . mysql_query(); die(); } if (mysql_num_rows($q)==0) { echo "Nema modela<br>"; } else { // Change display for number of columns. Do not change cols as it is needed for counting. $display = 1; $cols = 0; echo "   <table>"; while($red = mysql_fetch_array($q)){    if($cols == 0){        echo "<tr>";    }    // Display each cell here    echo "<td>            <table>               <tr>                  <td><img><h2>". $red['model_naziv'] ."</h2><p><h3>". $red['model_tip'] ." - ". $red['model_vrsta'] ." guma</h3><p>". $red['model_opis'] ."</td>               </tr>          </table>       </td>";    $cols++;    if($cols == $display){        echo "</tr>";        $cols = 0;    } } // Display the correct HTML if($cols != $display && $cols != 0){    $neededtds = $display - $cols;    for($i=0;$i</td>

nadam se da je jasno i ako moze neko da pomogne i da provjeri da li je ok Very Happy

offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Citat:ne znam gdje sam pogrijesio ali mi skripta, ako ima vise velicina pod jednim modelom, cita iz baze samo id modela za prvu velicinu, a ostale kao da ne postojeTo je zato što ih grupišeš u upitu po modelu:
$query .= " GROUP BY modeli.model_id";

Jedna bitna stvar je loša logika programiranja i potpuno nezaštićen kod od mySQL inject. Takođe, nigde ne vršiš provere za polja pre nego što ostvariš upit, što nije baš preporučljivo.

Zar ti nije lakše da si ovo uradio sa DIV-ovima umesto sa table? I kad već koristiš table nije mi jasno zašto koristiš onaj kod za dodavanje TD elementa? Jednostavno pre petlje staviš <table>, u petlji staviš <tr><td>Podatak1</td><td>Podatak2</td><td>ITD...</td></tr>, i posle petlje </table> . Mislim da nema potrebe da kriješ TD elemente.

Možda da je najbolje da uključiš error_reportings (dok ne završiš kod) da možeš da pohvataš sve greške i potencijalne greške.

Ko je trenutno na forumu
 

Ukupno su 1104 korisnika na forumu :: 22 registrovanih, 4 sakrivenih i 1078 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: BlekMen, bokisha253, Dogma21, draganl, Frunze, Georgius, HogarStrashni, Kibice, Kubovac, LUDI, Mercury, Milan A. Nikolic, milenko crazy north, Milometer, milutin134, MiroslavD, Nikola00, Sir Budimir, Snorks, styg, wizzardone, zastavnik