Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Lomakkeen tiedot kantaan

Sivun loppuun

jarspa [17.12.2004 22:41:50]

#

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>&nbsp;</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ä.

Blaze [17.12.2004 22:53:21]

#

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.

Olga [17.12.2004 22:54:35]

#

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.

Antti Laaksonen [17.12.2004 23:00:25]

#

Myös $PHP_SELF-muuttuja pitää ilmaista $_SERVER['PHP_SELF'], jos register_globals-asetus ei ole päällä.

jarspa [18.12.2004 10:53:22]

#

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&auml;&auml;lt&auml; l&ouml;ytyy kaikki Jarin leffat!</h4>
<form name="form1" method="post" action="<?php print $PHP_SELF; ?>">
  <p>&nbsp; </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&auml;nnitys">J&auml;nnitys</option>
          <option value="Kotimainen">Kotimainen</option>
        </select></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="Submit" value="N&auml;yt&auml; leffat"></td>
    </tr>
  </table>
  <p>&nbsp;</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ää :)

kasetti [18.12.2004 12:34:48]

#

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.php?tunnus=phpj8

Antti Laaksonen [18.12.2004 12:34:57]

#

Tietokannasta saatuja tietoja ei voi tulostaa ihan noin. Lue PHP-oppaasta, kuinka homma kannattaa tehdä.

muok: kasetti sanoi saman

leftover [18.12.2004 12:59:03]

#

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...

jarspa [18.12.2004 14:32:21]

#

Kiitos kaikille!

Ehkä musta viel isona tulee jotakin... :)

jarspa [18.12.2004 16:35:29]

#

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>&nbsp; </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&auml;nnitys">J&auml;nnitys</option>
          <option value="Kotimainen">Kotimainen</option>
        </select></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="Submit" value="N&auml;yt&auml; leffat"></td>
    </tr>
  </table>
  <p>&nbsp;</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 :)

Antti Laaksonen [18.12.2004 17:10:40]

#

Laita tuohon vain Olgan mainitsema tarkistus napin painamisesta ja yhdistä $gategoria-muuttuja (kirjoitetaan muuten "kategoria") tietokantakyselyyn.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta