Tere!
Olen harjoitellut tehdä SQL-kantoja. Tarkoitus olisi että websivulta pääsisi syöttämään tietoa kantaan. Kannan tekeminen ei ole ongelma mutta tiedon syöttäminen PHP:n avulla on! Olen yrittänyt syöttää tietoo kantaan websivun lomakkeen avulla mutta, tiedon lisääminen onnistuu siten että kantaan tulee vaan yksi tyhjä rivi lisää... Mikä mättää??
Tässä tiedonsyöttösivun koodi:
<html> <head> <title>Postinumero haku</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <p>Postinumeron haku </p> <p> </p> <form name="form1" method="post" action="<?php print $PHP_SELF; ?>"> Postinumero <input name="pnumero" type="text" id="pnumero"> Postitoimipaikka: <input name="ppaikka" type="text" id="ppaikka"> <input type="submit" name="Submit" value="Tallenna"> </form> <?php $yhteys=mysql_connect("localhost","","") or die("Tietokantayhteyttä ei voitu avata"); mysql_select_db("testi") or die ("Tietokantaa ei voitu avata"); // Taulukkoon tallennetaan tietoa... mysql_query("insert into toimipaikat values (\"$pnumero\",\"$ppaikka\")") or die("Tallennus ei onnistunut"); mysql_close($yhteys); ?> </body> </html>¨
Mod. edit: psst, foorumin tageissa käytetään hakasulkuja, ei suurempi- ja pienempikuinmerkkejä.
Et voi käyttää noita muuttujia $pnumero ja $ppaikka tuollaisenaan, ellei palvelimen register_globals -asetus (tietoturvariski) ole päällä. Hae ne $_POST -taulukosta seuraavaan tapaan:
mysql_query("insert into toimipaikat values (\"". $_POST['pnumero'] . "\",\"" . $_POST['ppaikka'] . "\")")
Ja muista toki, että oikeassa sovelluksessa et voi koskaan lyödä suoraan käyttäjältä saatua dataa kantaa, vaan sun pitää tarkistaa ensin, että se on kelvollista.
Ensinkin kannattaa ennen mitään lomakkeen käsittelyä tarkistaa onko sitä tallennusnappia painettu. Eli if(isset($_POST['Submit']) { // koodi }
Ja sitten muutetaan nuo lomakkeelta saadut arvot muotoon $_POST['muuttuja']. Eli mysql_query("insert into toimipaikat values ('" . $_POST['pnumero'] . "', '" . $_POST['ppaikka'] . "')").
Edit: hidas.
Myös $PHP_SELF-muuttuja pitää ilmaista $_SERVER['PHP_SELF'], jos register_globals-asetus ei ole päällä.
Muutin register_globals-kohdan päälle! Ja sain toimimaan. Nyt olen tekemässä kyselyitä kyseisestä kannasta. Peruskyselyn tekeminenkin on tuottanut tuskaa eli koodi menee näin:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Jarin leffat</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <h4>Täältä löytyy kaikki Jarin leffat!</h4> <form name="form1" method="post" action="<?php print $PHP_SELF; ?>"> <p> </p> <table width="36%" border="0"> <tr> <td width="49%">Valitse gategoria:</td> <td width="51%"><select name="gategoria" id="gategoria"> <option value=" "> </option> <option value="Kaikki">Kaikki leffat</option> <option value="Kauhu">Kauhu</option> <option value="Komedia">Komedia</option> <option value="Toiminta">Toiminta</option> <option value="Romanttinen">Romantic</option> <option value="Dokumentti">Dokumentti</option> <option value="Draama">Draama</option> <option value="Trilleri">Trilleri</option> <option value="Jännitys">Jännitys</option> <option value="Kotimainen">Kotimainen</option> </select></td> </tr> <tr> <td> </td> <td><input type="submit" name="Submit" value="Näytä leffat"></td> </tr> </table> <p> </p> </form> <?php $yhteys=mysql_connect("localhost","","") or die("Tietokantayhteyttä ei voitu avata"); mysql_select_db("leffa") or die ("Tietokantaa ei voitu avata"); $kysely=mysql_query("select * from leffat"); print $kysely; mysql_close($yhteys); ?> </body> </html>
-----------------------------------------------------------
Mikäköhän mättää??
PS. Tää on tätä aloittelijan elämää :)
Tuo mättää:
$kysely=mysql_query("select * from leffat");
print $kysely;
Joudut käsittelemään hakutulosta hieman ennen kuin voit tulostaa sen. Aloita tutkimalla putkan Oppaita:
https://www.ohjelmointiputka.net/oppaat/opas.
Tietokannasta saatuja tietoja ei voi tulostaa ihan noin. Lue PHP-oppaasta, kuinka homma kannattaa tehdä.
muok: kasetti sanoi saman
jarspa kirjoitti:
Muutin register_globals-kohdan päälle! Ja sain toimimaan.
Huoh... arvaa kahdesti miksi se on nykyisissä distroissa defaulttina off? Tietoturva... Jos opettelisit nyt käyttämään $_POST yms. taulukoita, ei sinun tarvitsisi ensimmäisen haksauksen jälkeen päivittää satoja muuttujia, mutta tee niin kuin parhaimmaksi katsot.
Suosittelen kuitenkin lämpimästi käyttämään edes mysql_escape_string -funktiota niin saat ainakin jotain tietoturvaa...
Kiitos kaikille!
Ehkä musta viel isona tulee jotakin... :)
Opin oppaasta jo miten tulostetaan esim. kaikki leffat mut nyt pitäs saada valittua leffan gategoria ja tulostettava valitun gategorian leffat pelkästään... Eli valikosta valitaan gategoria esim. kauhu ja "submit" napin painalluksen jälkeen leffat tulostuu selaimelle.
<form name="form1" method="post" action="<?php print $PHP_SELF; ?>"> <p> </p> <table width="41%" border="0"> <tr> <td width="47%">Valitse gategoria:</td> <td width="53%"><select name="gategoria" id="gategoria"> <option value=" "> </option> <option value="Kaikki">Kaikki leffat</option> <option value="Kotimainen">Kotimainen</option> <option value="Kauhu">Kauhu</option> <option value="Komedia">Komedia</option> <option value="Toiminta">Toiminta</option> <option value="Romanttinen">Romantic</option> <option value="Dokumentti">Dokumentti</option> <option value="Draama">Draama</option> <option value="Trilleri">Trilleri</option> <option value="Jännitys">Jännitys</option> <option value="Kotimainen">Kotimainen</option> </select></td> </tr> <tr> <td> </td> <td><input type="submit" name="Submit" value="Näytä leffat"></td> </tr> </table> <p> </p> </form> <?php $yhteys=mysql_connect("localhost","","") or die("Tietokantayhteyttä ei voitu avata"); mysql_select_db("leffa") or die ("Tietokantaa ei voitu avata"); $kysely=mysql_query ("select * from leffat"); // Montako vastausriviä tuli? $lkm=mysql_num_rows($kysely); if ($lkm==0) { print "Tietokannassa ei ole tietoja"; mysql_close($yhteys); die(); } /* Tulostetaan talukko */ echo "<table border>"; echo "<tr><td><b>Leffan nimi</b></td><td><b>Gategoria</b></td><td><b>CD:t</b></td></tr>"; //käydään leffat läpi for ($i = 0; $i < mysql_num_rows($kysely); $i++) { //haetaan leffan nimi, gategoria ja cd-määrä muuttujiin $leffannimi = mysql_result($kysely, $i, "leffannimi"); $gategoria = mysql_result($kysely, $i, "gategoria"); $cd = mysql_result($kysely, $i, "cd"); echo "<tr><td>$leffannimi</td><td>$gategoria</td><td>$cd</td></tr>"; } echo "</table>"; ?>
Alkaa pikkasen jo pää jumittaa näitten koodien takia mut kivaa se silti on :)
Laita tuohon vain Olgan mainitsema tarkistus napin painamisesta ja yhdistä $gategoria-muuttuja (kirjoitetaan muuten "kategoria") tietokantakyselyyn.
Aihe on jo aika vanha, joten et voi enää vastata siihen.