Terve.
Aihe: Tallitietokanta
Mitä olen tekemässä: Yrittämässä saada tulostetta HTML-taulukkoon
Ongelma: Aloittelevana ohjelmoijana se on seuraava. Sivulla on monta option-valikkoa, joista sitten lomakkeenkäsittelijässä poistan - merkin explodella. Lomakkeenkäsittelijässä teen option-valikon tuloksista arrayn ja ketjutan ne implodella. Sain ohjeen tuohon implode-ketjutukseen eräältä toiselta henkilöltä, joten en itse osaa muokata SQL-lauseketta haluamaani suuntaan. SQL-lauseke on tehty lomakkeenkäsittelijässä niin hienosti että menee aloittelijan hilseen yli.
Eli osaisiko joku neuvoa miten saisin toteutettua SQL-lausekkeen niin, että voisin tuoda tietoja toisesta taulusta talli_id:n ja hevoskasvatus_id_n perusteella? Eli mihin väliin saisin laitettua AND-ehdon? Ongelmakohta:
if (count($and)) { $sql = 'SELECT p.tilan_hallinta, p.tilan_koko_ha, p.tallin_toiminta, p.tallin_sijainti, t.talli_id, t.postinro, t.postitoimipaikka, t.tallinnimi FROM perustiedot as p, tallit as t WHERE ' . implode(' AND ', $and) AND t.talli_id=p.perustiedot_id; }
Tässä weblomake:
<html> <head> <meta http-equiv="Content-type" content="text/html;charset=utf-8" /> </head> <body> <link rel="stylesheet" type="text/css" href="tyyli.css"> <form method=post action="perushae.php"> <h4>Perustiedot</h4> <p>Kaikkiin kenttiin on valittava arvo. Vain täysin hakuarvoihin vastaavat tulokset näytetään.</p> <br> <p>tilan hallinta <br> oma<input name="tilanhall" value="oma" type="radio"> vuokra<input name="tilanhall" value="vuokra" type="radio"> <br> <br> tilan koko ha<br> <select name="tilankok"> <option>0-10</option> <option>11-50</option> <option>51-100</option> <option>101-150</option> <option>151-200</option> <option>201-250</option> <option>251-300</option> <option>301+</option> </select> <br> <br> tallin toiminta <br> harrastustoimintaa<input name="toiminta" value="harrastustoimintaa" type="radio"> yritystoimintaa<input name="toiminta" value="yritystoimintaa" type="radio"> <br> <br> tallin sijainti <br> maatilan yhteydessä<input name="sijainti" value="maatilan yhteydessä" type="radio"> maaseudulla<input name="sijainti" value="maaseudulla" type="radio"> kaupunkitaajamassa<input name="sijainti" value="kaupunkitaajamassa" type="radio"> <br> <br> <br> hevosten ja ponien lkm <br> <br> <select name="hevlkm"> <option>0-10</option> <option>11-50</option> <option>51-100</option> <option>101+</option> </select> <br> <br> pihattopaikkojen lkm</p> <select name="pihplkm"> <option>0-10</option> <option>11-50</option> <option>51-100</option> </select> <br> <br> <input name="haku" value="Hae" input type="submit"> <input type="reset" value="Tyhjennä" ><br></form> <FORM METHOD="LINK" ACTION="index.php"><INPUT TYPE="submit" VALUE="Palaa alkuvalikkoon"><p> </FORM> </body></html>
Lomakkeenkäsitteljä perushae.php:
<html> <head> <meta http-equiv="Content-type" content="text/html;charset=utf-8" /> </head> <body> <?php $con = mysql_connect("localhost","xxx","xxxx"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("tallitietokanta", $con); if( isset($_POST["haku"]) && $_POST['tilanhall']=='oma' || $_POST['tilanhall']=='vuokra') // Hakunappulaa painettu { $and = array(); if ($_POST['tilanhall']) { $hallinta=$_POST['tilanhall']; $and[] = "tilan_hallinta = '$hallinta'"; } if ($_POST['toiminta']) { $toiminta= $_POST['toiminta']; $and[] = "tallin_toiminta = '$toiminta'"; } if($_POST['sijainti']) { $sijainti= $_POST['sijainti']; $and[] = "tallin_sijainti = '$sijainti'"; } if($_POST['tilankok']) { $koko = explode("-", $_POST['tilankok']); $and[]= "tilan_koko_ha BETWEEN '$koko[0]' AND '$koko[1]'"; } if($_POST['hevlkm']) { $hevkoko = explode("-", $_POST['hevlkm']); $and[]= " hevosten_ponien_lkm BETWEEN '$hevkoko[0]' AND '$hevkoko[1]'"; } if($_POST['pihplkm']) { $pihkoko = explode("-", $_POST['pihplkm']); $and[]= "pihattopaikkojen_lkm BETWEEN '$pihkoko[0]' AND '$pihkoko[1]'"; } if (count($and)) { $sql = 'SELECT p.tilan_hallinta, p.tilan_koko_ha, p.tallin_toiminta, p.tallin_sijainti, t.talli_id, t.postinro, t.postitoimipaikka, t.tallinnimi FROM perustiedot as p, tallit as t WHERE ' . implode(' AND ', $and) AND t.talli_id=h.hevoskasvatus_id; } if (!$result=mysql_query($sql,$con)) die("Error: " . mysql_error()); echo "<table border>"; echo"<td><b>Tilan hallinta</b></td> <td><b>Tilan koko ha</b></td> <td><b>Tallin toiminta</b></td> <td><b>Tallin sijainti</b></td> <td><b>Hevosten ja ponien lkm</b></td> <td><b>Pihattopaikkojen lkm</b></td> <td><b>Postinumero</b></td> <td><b>Postitoimipaikka</b></td> <td><b>Tallin nimi</b></td> </tr>"; while ($row = mysql_fetch_array($result)) { //haetaan nimi, hinta ja määrä muuttujiin $tilanhallinta = $row["tilan_hallinta"]; $tilankokoha = $row["tilan_koko_ha"]; $tallintoiminta =$row["tallin_toiminta"]; $tallinsijainti = $row["tallin_sijainti"]; $hevostenjaponienlkm = $row["hevosten_ponien_lkm"]; $pihattopaikkojenlkm = $row["pihattopaikkojen_lkm"]; $postinumero = $row["postinro"]; $postitoimipaikka = $row["postitoimipaikka"]; $tallinnimi = $row["tallinnimi"]; echo "<tr><td>$talli_id</td> <td>$tallinnimi</td> <td>$katuosoite</td> <td>$postitoimipaikka</td> <td>$postinro</td> <td>$tiedotus</td> </tr>"; } echo "</table>"; } // Hakunappulaa painettu ?> <FORM METHOD="LINK" ACTION="perus.php"> <INPUT TYPE="submit" VALUE="Tee uusi haku"> </FORM> <FORM METHOD="LINK" ACTION="index.php"> <INPUT TYPE="submit" VALUE="Palaa alkuvalikkoon"> </FORM></body></html>
Tuolla on selvennetty hakua kahdesta taulusta:
https://www.ohjelmointiputka.net/keskustelu/
Minä valitsisin noista tauluista kaikki sarakkeet, koska niitä on noin monta ja tulostuksessa vasta määrittäisin sarakkeen.
Tuosta lomakkeesta: Option-jutuille kannattaa lisätä value.
Kiitokset vastauksesta. Kyllähän minä kahdesta taulusta osaan hakea. En vain osaa kirjoittaa tuota SQL-lausetta oikein, koska siinä on käytetty implodea. Siihen tarvitsisin pseudokoodia, että miten sen toteutan?
Aihe on jo aika vanha, joten et voi enää vastata siihen.