PHP&MySQL - Käsittelyn alkeet

Hyödyllinen?

Olen aloittelija ja tämä oli hyödyksi
4
44%
Olen aloittelija enkä saanut tästä mitään irti
2
22%
Olen 1337 ja I h4x0r j00
3
33%
 
Ääniä yhteensä : 9

PHP&MySQL - Käsittelyn alkeet

Viesti wiipe_ 05 Elo 2009 19:30

PHP:n avulla sivuston ylläpitämisen tehostaminen on helppoa. Voit perehtyä aiheeseen kattavammin osoitteessa PHP.net. Tämä opas tähtää hyödyllisten perustaitojen antamiseen. En käsittele tietokannan/taulujen luontia ollenkaan, keskitymme ainoastaan datan tallentamiseen ja hakemiseen tietokannasta.

PHP-koodia ajetaan ainoastaan .php-tiedostoista, huomaa siis ettet voi käyttää PHP:tä tavallisissa .html-dokumenteissa. PHP on palvelimella ajettava skriptikieli mikä tarkoittaa sitä että jokainen muutos näkyvään sivuun vaatii sivun uudelleenlatausta (koodi suoritetaan palvelimella ja selaimelle lähetetään tavallista .html-dokumenttia vastaavaa dataa).

#1 Yhteys tietokantaan

PHP: Voidaksemme käsitellä tietokannassa olevaa tietoa on ensin luotava yhteys tietokantaan:
Koodi: Valitse kaikki
<?php
$palvelin="localhost"; // localhost-oletusarvoa tarvitsee muuttaa ainoastaan palvelimen sijaitessa muulla palvelimella
$tunnus="kayttajatunnus"; // käyttäjä jolla on tarvittavat oikeudet tietokantaan
$salasana="salasana"; // käyttäjän salasana
$tietokanta="tietokanta"; // tietokannan nimi

mysql_connect("$palvelin", "$tunnus", "$salasana")or die("Tietokantapalvelimeen yhdistäminen epäonnistui");
mysql_select_db("$tietokanta")or die("Tietokannan valinta epäonnistui");
?>
Yhteyden epäonnistuessa sivu palauttaa die()-fuktion arvon eikä sivua suoriteta pidemmälle.

#2 Tiedon tallentaminen tietokantaan

Oletamme tässä osuudessa tietokannasta löytyvän yhteystiedot-nimisen taulun joka sisältää seuraavat sarakkeet: id, nimi, email ja puh. Esimerkissä luomme yksinkertaisen lomakkeen ja käsittelijän joilla tieto viedään tietokantaan.

HTML: Tiedon lähettämiseen PHP-käsittelijälle (joka tallentaa datan tietokantaan) tarvitaan HTML-lomake:
Koodi: Valitse kaikki
<form action="" method="post">
<input type="text" size="20" name="nimi"> Nimi<br>
<input type="text" size="20" name="email"> Email<br>
<input type="text" size="20" name="puh"> Puh<br>
<input type="submit" value="Tallenna">
</form>

PHP: rand()-funktio on hyödyllinen satunnaisen tunnistetiedon generointiin. Satunnaista ID:tä käytettäessä muita rivin sarakkeita voidaan huoleti muokata, tallennus voidaan kohdistaa ID-tunnisteen avulla.

PHP: array-key-exists()-funktion avulla saamme helposti selville onko lomakkeella lähetetty dataa. Tarkistamme ettei lähetetyt kentät ole tyhjiä sekä tiedon tallentumisen if-ehtolauseilla.
Koodi: Valitse kaikki
<?php
if(array_key_exists('nimi', $_POST) and $_POST["nimi"] <> "" and $_POST["email"] <> "" and $_POST["puh"] <> "") {

   $id = rand(0,99999);
   $tallenna="INSERT INTO yhteystiedot (id,nimi,email,puh)"."VALUES ('$id', $_POST[nimi]', '$_POST[email]', '$_POST[puh]')";

   if(mysql_query($tallenna)) {
      echo '<p>Tallentaminen onnistui!</p>';
   } else {
      echo '<p>Tallentaminen epäonnistui!</p>';
   };

};
?>

#3 Tiedon hakeminen tietokannasta
Hyödyllisintä on tietenkin tiedon saaminen tietokannasta sivustolle.

PHP: Käytämme tiedon hakuun mysql_query ja mysql_fetch_array -funktioita. Esimerkissä tulostamme while-silmukalla taulun kaiken sisällön yksinkertaiseen taulukkoon.
Koodi: Valitse kaikki
<?php
$haku=mysql_query("SELECT * FROM yhteystiedot");

echo '
<table>
   <tr>
      <td>Nimi</td>
      <td>Email</td>
      <td>Puh</td>
   </tr>
';

while($data=mysql_fetch_array($haku)) {
echo '
   <tr>
      <td>'.$data[nimi].'</td>
      <td>'.$data[email].'</td>
      <td>'.$data[puh].'</td>
   </tr>
';
};

echo '</table>';
?>
<?php ?> -tagin sisällä tavallista tekstiä/HTML-elementtejä voi tulostaa helposti echo-funktion avulla.

PHP: Hakua voidaan rajata lisäämällä queryyn WHERE-ehtoja. Tarvittaessa while-silmukan voi jättää pois. Tällöin kannattaa myös tarkistaa yksinkertaisella ehtolauseella löytyykö hakuehdoilla mitään. Esimerkissä poimitaan osoiteriviltä ID-arvo (esim. henkilot.php?id=12345) ja haetaan tietokannasta henkilön tiedot.
Koodi: Valitse kaikki
<?php
$haku=mysql_query("SELECT * FROM yhteystiedot WHERE id='$_GET[id]'");
$data=mysql_fetch_array($haku);

if(isset($data["id"])) {
   echo '
   <ul>
      <li>'.$data[nimi].'</li>
      <li>'.$data[email].'</li>
      <li>'.$data[puh].'</li>
   </ul>
   ';
} else {
   echo '<p>Haettua ID:tä ei löytynyt.</p>';
};
?>


#4 Yhteenveto oppaasta

Tavoite on opettaa yksinkertaisesti tiedon hakemisen ja tallentamisen perusteet. Kokeilematta, soveltamatta ja harjoittelematta ei tätäkään asiaa opita, toivottavasti kuitenkin tämäkin opas tarjoaa joillekin pienen ponnahduslaudan alkuun.

Palaute on tervetullutta. Tiedon muokkaaminen/poistaminen on hyvä heittää omaksi oppaakseen joten niitä on turhahkoa ehdottaa lisättäväksi. Olen kuitenkin avoin palautteelle huonosti valituista termeistä ja tietenkin mahdollisista kömmähdyksistä itse oppaassa. Otan myös tarvittaessa vastaan kritiikkiä siitä oletuksestani että phpMyAdminin käyttö on riittävän helppoa aloittelijallekin käsin.

ps. Hienostelijat voivat myös tutustua mysql_close-funktioon.
KAIKKI MODET JA ADMINIT ON IHA KUSIPÄITÄ <3

tuoma, personal // Kadonnet, hosting // Nyyttisivu, listing // Ane Kadeom, sadeam


G-DoG'X kirjoitti:Gigantti ei liity tähän mitenkään poju?! kuka vitun idiootti OSTAA koneensa?

Abit IP35 PRO | Intel E4500 | Kingston 4Gt DDR2 | Asus GeForce 9800GTX+ | 1,64 Tt HDD | HEC 420w | Nexus Clodius | BenQ E2200HD
Käyttäjän avatar
wiipe_
tuhkaperhonen
 
Viestit: 1676

Re: PHP&MySQL - Käsittelyn alkeet

Viesti Damsarerael 06 Elo 2009 12:34

Hyvä opas, vaikka tiesinkin jo kaiken mitä tässä sanottiin :P arvosanaksi 5
Korppi on OIKEUS! Liity sinäkin kansalliseen korppipuolueeseen!
92% Nuorisosta on siirtynyt räppiin. Jos kuulut näihin 8%, jotka kuuntelevat MUSIIKKIA eivätkä PASKAA, lisää tämä allekirjoitukseesi.
[piilotettu kuva]
Which Final Fantasy Character Are You?
Käyttäjän avatar
Damsarerael
 
Viestit: 232

Re: PHP&MySQL - Käsittelyn alkeet

Viesti Matso 06 Elo 2009 18:39

Ei ei eieieieieeii :'<

wiipe_ kirjoitti:
Koodi: Valitse kaikki
$haku=mysql_query("SELECT * FROM yhteystiedot WHERE id='$_GET[id]'");

Aiheutat SQL injektioriskin. SQL-kyselyihin ei laiteta suoraan ulkoa tulevia arvoja. Hakemalla suoraan GET-parametrin jonka käyttäjä voi määrittää ja asettamalla sen tietokantakyselyyn, pääsee käyttäjä syöttämään haitallista koodia tietokantakyselyyn.

Esimerkki oikeasta tavasta, hieman vanhanaikaisesti:

Koodi: Valitse kaikki
$id = intval($_GET['id']); // Varmistetaan että ID on kokonaisluku

$haku = mysql_query("SELECT * FROM yhteystiedot WHERE id=".$id); // Asetetaan vasta varmistettu arvo tietokantakyselyyn

Jos ID olisi merkkijono, se tulisi vetää mysql_real_escape_string()-funktion läpi intval():in sijaan.


Suosittelen kuitenkin käyttämään esim. PHP:n PDO-kirjastoa tietokantakyselyihin. Kannattaa tutustua termiin "prepared statement", joka tekee tietokannan käytöstä turvallisempaa.
Tärkeitä linkkejä: Huuto.net ; Kahvi.ws ; matso.info ; KaLinks
Käyttäjän avatar
Matso
 
Viestit: 4878

Re: PHP&MySQL - Käsittelyn alkeet

Viesti wiipe_ 07 Elo 2009 14:31

Matso kirjoitti:-- Hyviä pointteja --

Toisaalta matka tietoturvaan on pitkä ja tuskainen. Oppaan tarkoitus on esitellä käytön periaatteet aloittelijalle, ei toimia ohjeena merkittävää sivustoa perustavalle.. millainen moinen henkilö sitten onkaan; sinisilmäisesti lyhyintä tietä kannustavaan "hei täähän toimiI!"-fiilikseen. Olet kuitenkin täysin oikeassa, en kiistä. Esimerkkini oli myös äkkiseltään huonosti valittu, kiitos huomautuksesta ja täsmennyksestä :)
KAIKKI MODET JA ADMINIT ON IHA KUSIPÄITÄ <3

tuoma, personal // Kadonnet, hosting // Nyyttisivu, listing // Ane Kadeom, sadeam


G-DoG'X kirjoitti:Gigantti ei liity tähän mitenkään poju?! kuka vitun idiootti OSTAA koneensa?

Abit IP35 PRO | Intel E4500 | Kingston 4Gt DDR2 | Asus GeForce 9800GTX+ | 1,64 Tt HDD | HEC 420w | Nexus Clodius | BenQ E2200HD
Käyttäjän avatar
wiipe_
tuhkaperhonen
 
Viestit: 1676

Palaa alueelle Ohjelmointioppaat



Samankaltaisia viestiketjuja