elikkäs tarkoituksena olisi saada haettua taulukosta tietyn sarakkeen tiedot ja laittaa ne alasvetovalikkoon ja kun sen valitsee se tulostaa kyseisen tietueen tiedot.
esimerkki taulukon sisältö
id INT AUTO_INCREMENT,
paikka VARCHAR(64),
aika VARCHAR(64),
nimi VARCHAR(64),
jarjestaja VARCHAR(64),
Tuolta pitäisi saada NIMI-kohdan tiedot alasvetovalikkoon.
Toivottavasti joku ymmärsi ongelman. Hankala kirjoittaa auki sitä. Kiitän jo etukäteen.
Ei ollenkaan hankalaa valitset vain sopivan kentän ja tulostat saadun sisällön.
kiitokset... vielä semmonen, että nyt kun on valinnut sen valikosta, jonkun pitäisi nappia painamalla tulla näytölle kyseisen valinnan tiedot.
eli
nimi
paikka
aika
järjestäjä
Miten sen sinusta pitäisi toimia, tai siis miten sinusta tuota koodia tulisi muutella, jotta tuo toiminta olisi tarkoituksen mukaista? Minusta olisi fiksua hakea ensimmäisessä vaiheessa id ja nimi. id tulee valinnan arvoksi ja nimi tulostetaan valikkoon käyttäjää varten. Haku taasen olisi varmaankin fiksua toteuttaa valitsemalla halutut kentät ja rajaamalla haku vastaamaan valittua id:t. Osannet tehdä tämän itsekin.
<?php $hakulauseke = "SELECT id ,nimi FROM taulu ORDER BY nimi ASC"; $nimet = mysql_query($hakulauseke); if($nimet) { echo "<select>"; while($rivi = mysql_fetch_array($nimet)) { $nimi = $rivi['nimi']; $id = $rivi['id']; echo "<option value=\"{$id}\">{$nimi}</option>"; } echo "</select>"; echo "<BR /><BR />"; } else { echo mysql_error(); } ?>
Tuon osasin, mutta mitenkäs se tulee tuo rajaus id:n perusteella...
Yritin jotain
<?php $query = mysql_query('SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = ?'); while($kisa = mysql_fetch_array($id)) { //tänne halutut tulosteet ECHO .... } ?>
Virheilmoitus: Warning: mysql_fetch_array() expects parameter 1 to be resource, null given
Kiitokset taas etukäteen...
Lainausmerkit ja hipsut kehiin...
Haku id:stä numero 2
$query = mysql_query("SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = '2'");
Pekka Mansikka kirjoitti:
Lainausmerkit ja hipsut kehiin...
Heittomerkkejä ei numeroarvoihin kuulu laittaa. Tosin MySQL nähtäväksi antaa anteeksi tämän(kin) erheen.
artz86: Tuossa rajaat kyselyn ID:lle; ?, jota tuskin kannasta löytyy. Ja kuten virheviestistä voi päätellä, tuollaista muuttujaa ($id
) ei ole olemassa.
Mutta mitenkäs tuo, kun tarkoituksena on saada tuosta aiemmasta php-koodista tuo alasvetovalikon value id:ksi, jonka mukaan rajataan haku.
Tuossa mysql_query lauseessa siis pitääpi olla lomakkeelta tuleva muuttuja vastaanottamassa lomakkeen tietoja...arvannet mihin kohtaan $_POST['id'] (tai mikä sinulla onkin lomakkeen kentän nimi ja muoto), tulisi sijoittaa....
Lisätään vielä, että esitelty tapa tehdä kyselylausekkeita aiheutta reiän mahdolliselle SQL-hyökkäykselle. Tuon ID:n perään voi laittaa mitä tahansa, vaikka toisen ikävämmän kyselyn. Bind_param:lla on tapa laittaa php:ssa kyselyihin muuttujat paikalleen,
trilog kirjoitti:
Heittomerkkejä ei numeroarvoihin kuulu laittaa. Tosin MySQL nähtäväksi antaa anteeksi tämän(kin) erheen.
Tiedä sitten, mutta jossakin oppaassa jota lueskelin joskus (oliskos ollu joku CodeIgniterin dokumentaatio tai sinne päin) kehotettiin laittamaan heittomerkit kaikkien syötettävien arvojen ympärille, eli siis myös numeroihin.
MySQL omassa dokumentaatiossaan kehottaa käyttämään hipsuja, mutta mielestäni perustelu ontuu. Koska hipsuja käytettäessäkin käyttäjän syöte joudutaan käsittelmään, niin eikö numeron tapauksessa voisi vaan käsitellä sen eri tavalla kuin tekstin (esim. poistamalla kaiken muun kuin numerot tai muuntamalla numeroksi).
Joissakin tietokannoissa tuollaisesta on myös nopeushaittaa. Esim. haussa ...where blaa=234 käyttäisi indeksiä ja ...where blaa='234' ei käyttäisi indeksiä. MySql:ssä ilmeisesti ei ole näin.
$query = mysql_query('SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = $_POST['id']');
Noin, jos tulee niin kuitenkin erroria heittää... nyt en vain keksi muutakaan... jäätyy tosi pahasti :D
suunnilleen näin
$query = mysql_query("SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = '".$_POST['id']."'")
Siinä voi sittä harkita, laittaako noita ' hipsui vai eih.
Muista mysql_real_escape_string, muuten käy vielä jonain päivänä pahasti.
Pekka Mansikka kirjoitti:
suunnilleen näin
$query = mysql_query("SELECT id, paikka, aika, nimi, jarjestaja FROM taulu WHERE id = '".$_POST['id']."'")Siinä voi sittä harkita, laittaako noita ' hipsui vai eih.
Mutta edelleen tulee virheilmoitus: Warning: mysql_fetch_array() expects parameter 1 to be resource, null given
No katso sitten oppaasta, miten sitä mysql_fetch_arrayta oikein käytetään. Ei sille suinkaan id:tä anneta vaan mysql_queryn tulos, josta se hakee rivit järjestyksessä. Ensin kannattaa kuitenkin myös tarkistaa, että mysql_query onnistui.
Tuohon loppuun kannaattaa laittaa aina errori-tarkistus
mysql_query("Pla pla pla") or die (mysql_error());
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Sarjatiedot</title> </head> <body> <?PHP function connect_db() { mysql_connect('localhost', 'root', ''); mysql_select_db('kilpailut'); }; connect_db(); if(!isset($_POST['sarja_ok'])) { ?> <FORM method = post action = 'sarjatiedot.php'> <?php $hakulauseke = "SELECT id ,kisanimi FROM kilpailu ORDER BY kisanimi ASC"; $nimet = mysql_query($hakulauseke); if($nimet) { echo "<select name=id>"; while($rivi = mysql_fetch_array($nimet)) { $nimi = $rivi['kisanimi']; $id = $rivi['id']; echo "<option value=\"{$id}\">{$nimi}</option>"; } echo "</select>"; echo "<BR /><BR />"; } else { echo mysql_error(); } ?> <INPUT type = submit name = kisa_ok value = jatka /> </FORM> <?PHP //} else { $query = mysql_query("SELECT id, paikka, aika, kisanimi, seura, hiihtotapa, viim_ilmoittautuminen FROM kilpailu WHERE id = ".$_POST['id']); echo "<table border=1>"; echo "<tr><td colspan=2 align=center><b>Kilpailun tiedot</b></td></tr>"; while($kisa = mysql_fetch_array($query)) { echo "<tr>"; echo "<td><b>Kisanimi</b></td>"; echo "<td>" . $kisa["kisanimi"] . "</td>"; echo "</tr>"; echo "<tr>"; echo "<td><b>Päivämäärä</b></td>"; echo "<td>" . $kisa["aika"] . "</td>"; echo "</tr>"; echo "<tr>"; echo "<td><b>Paikka</b></td>"; echo "<td>" . $kisa["paikka"] . "</td>"; echo "</tr>"; echo "<tr>"; echo "<td><b>Seura</b></td>"; echo "<td>" . $kisa["seura"] . "</td>"; echo "</tr>"; echo "<tr>"; echo "<td><b>Hiihtotapa</b></td>"; echo "<td>" . $kisa["hiihtotapa"] . "</td>"; echo "</tr>"; echo "<tr>"; echo "<td><b>Viimeinen ilmoittautuminen</b></td>"; echo "<td>" . $kisa["viim_ilmoittautuminen"] . "</td>"; echo "</tr>"; echo "</table>"; echo "<br><br>"; } ?> <FORM method = post action = 'sarjatiedot.php'> <INPUT type = hidden name = 'kisa' value = <?PHP print $_POST['id']; ?> /> <table width="30%" border="0"> <tr> <td width="56%">Sarjan nimi: </td> <td width="44%"><input type = text name = 'sarjanimi' /></td> </tr> <tr> <td>Sarjan lyhyt nimi: </td> <td><input type = text name = 'sarjalyhytnimi' /></td> </tr> <tr> <td>Matka: </td> <td><input type = text name = 'matka' /></td> </tr> </table> <INPUT type = submit name = 'sarja_ok' value = 'jatka' /> </FORM> <?php //} else { $sarjanimi = $_POST["sarjanimi"]; $sarjalyhytnimi = $_POST["sarjalyhytnimi"]; $matka = $_POST["matka"]; $kisaid = $_POST['id']; } { $query = mysql_query("INSERT INTO laji (sarjanimi, sarjalyhytnimi, matka, kisaid) VALUES('$sarjanimi','$sarjalyhytnimi','$matka','$kisaid')"); echo "<table border=1>"; echo "<tr><td colspan=2 align=center><b>Sarjan tiedot</b></td></tr>"; $max_id = mysql_fetch_array(mysql_query('SELECT MAX(id) maxid FROM laji')); $max_id = $max_id['maxid']; $query2 = mysql_query('SELECT sarjanimi, sarjalyhytnimi, matka FROM laji WHERE id = '.$max_id); } while($sarja = mysql_fetch_array($query2)) { echo "<tr>"; echo "<td><b>Sarjanimi</b></td>"; echo "<td>" . $sarja["sarjanimi"] . "</td>"; echo "</tr>"; echo "<tr>"; echo "<td><b>Päivämäärä</b></td>"; echo "<td>" . $sarja["sarjalyhytnimi"] . "</td>"; echo "</tr>"; echo "<tr>"; echo "<td><b>Paikka</b></td>"; echo "<td>" . $sarja["matka"] . "</td>"; echo "</tr>"; echo "</table>"; echo "<br><br>"; } else { ?> <INPUT type = submit name = 'uusi' value = 'Uusi sarja' /> <?PHP } } } ?> </body> </html>
Ensinnäkin tiedän uupuu osasta kohtaa tuo error tarkistus. Mutta ne olen lisäämässä, kun saan ensin virheen korjattua. Eli virheenä on Parse error: syntax error, unexpected T_ELSE on line 44....
Olen tässä nyt yrittänyt etsiä virhettä, mutta ei satu silmään missä voisi olla virhe... Eihän sitä aina itse huomaa omia virheitä, kun tarpeeksi pitkään koodia katsoo. Voi olla, joku pikkuvirhe mutta kun ei huomaa niin ei sitten huomaa.... Kiitokset taasen etukäteen.
Laske aaltosulkujen määrä if- ja else-rivien välissä ja tarkista, että jokaista if-sanaa vastaa vain yksi else.
Kannattaa vähentää ylimääräisiä sulkeita vaikka näin:
$nimet = mysql_query($hakulauseke) or die (mysql_error()); echo "<select name=id>"; while($rivi = mysql_fetch_array($nimet)) { $nimi = $rivi['kisanimi']; $id = $rivi['id']; echo "<option value=\"{$id}\">{$nimi}</option>"; } echo "</select>"; echo "<BR /><BR />";
Itse vika lienee tuossa:
//} else {
Poista kommenttimerkki.
Hei taasen!
Edellisistä neuvoistta oli paljon apua, mutta nyt pitäs saada toimimaan niin, että id:llä on haetaan sitä vastaavat tiedot toisesta taulukosta...
tässä tapauksessa... ilmoittautuminen taulussa on laji_id, jolla pitäisi hakea laji taulusta id:tä vastaavat sarjalyhytnimi ja matka. Ja nämä vielä pitäisi sitten saada tulostettua....
Itse sain siihen asti, että jos yksi kilpailija on vain, mutta jos on useampi ja varsinkin eri sarjoissa niin ei tulostu kuin yhdelle sarja.
Kiitokset taas etukäteen.
MySQL ja PHP, Osa 9 - Monta taulua löytynee ratkaisu tuohon ongelmaasi.
$sql = "SELECT laji.id, laji.sarjalyhytnimi, laji.matka FROM laji, ilmoittautuminen WHERE laji.id = ilmoittautuminen.laji_id"; $result = mysql_query($sql) or trigger_error(mysql_error(),E_USER_ERROR);
Kyseisellä koodilla saat todennäköisesti halutut tiedot haetuksi. Lopun saat hoitaa itse.
Kiitokset taasen edellisestä.
Vielä semmoinen kysymys, että kuinka saisi helpoiten ja miten tehtyä. "tulostettava versio" sivun. Eli nyt heittää sivupohjaan osallistujaluettelon ja lisäsin sivun loppuun linkin tulostettava versio ja siitä täytyisi aueta blankko sivu ilman sivupohjaa, mutta sisältäen kilpailun nimen yms.
Lähinnä sitä vain tiedustelen, kuinka saisin tuon valitun kisa_id:n siirrettyä osallistujaluettelo.php:stä tulostus.php:n
Aihe on jo aika vanha, joten et voi enää vastata siihen.