LOMAKKEET

PHP:n yksi olennaisista ominaisuuksista on tarjota mahdollisuudet käsitellä HTML:n lomake-elementeistä (form<) saatuja tietoja.

Lomake-elementit sijoitetaan www-sivulle haluttuihin paikkohin ohjeteksteineen. Lomakekentiin kirjoitetut tiedot ja/tai valinnat lähetetään sivulta ns lomakkeenkäsittelijälle. Lomakkeenkäsittelijä voi olla (kuten alla) erillisenä tiedostona tai lomakkeenkäsittely koodi voi olla itse www-sivulla. Lomakkeiden tiedot voidaan kirjoittaa tiedostoon tai lähettä sähköpostiin.

Lomake-esimerkki(tervetuloa.php)

/* Lomake-esimerkki */ <!DOCTYPE HTML> <html lang="en"> <html> <head> <meta charset="UTF-8"> <title>TESTISIVU</title> </head> <body> <form action="tervetuloa.php" method="post"> Nimi: <input type="text" name="nimi"><br> Sähköposti: <input type="text" name="sahkoposti"><br> <input type="submit" value="Lähetä"> </form> </body> </html>

Nimi:
Sähköposti:


Lomakkeen-käsittelijän koodaus(tervetuloa.php)

/* Lomakkeen-käsittelijän esimerkki */ <!DOCTYPE HTML> <html lang="en"> <html> <head> <meta charset="UTF-8"> <title>TESTISIVU</title> </head> <body> Tervetuloa <?php echo $_POST[" nimi"]; ?> Sähköpostisi on: <?php echo $_POST["sahkoposti"];?> </body> </html>




Tehtävä 1 Toteuta PHP-lomakkeella kolmen vastuksen rinnankytkennän laskeminen. Muuta aiemmin oppaan muuttujat&vakiot kohdassa tehtävässä 2 tehty PHP-koodaus lomakkeenkäsittelijäksi jolle lähetetään www-sivulle toteutetuista lomakekentistä kerätyt tiedot.


Lomakkeen-esimerkki Get metodilla(tervetuloa_getilla.php)

/* Lomake-esimerkki Get metodilla */ <!DOCTYPE HTML> <html lang="en"> <html> <head> <meta charset="UTF-8"> <title>TESTISIVU</title> </head> <body> <form action="tervetuloa_getilla.php" method="get"> Nimi: <input type="text" name="nimi"><br> Tunnus: <input type="text" name="tunnus"><br> Salasana: <input type="text" name="salasana"><br> <input type="submit" value="Lähetä"> </form> </body> </html>

Nimi:
Tunnus:
Salasana:

Lomakkeen-käsittelijän esimerkki Get metodilla(tervetuloa_getilla.php)

/* Lomakkeen-käsittelijän esimerkki */ <!DOCTYPE HTML> <html lang="en"> <html> <head> <meta charset="UTF-8"> <title>TESTISIVU</title> </head> <body> Nimi: <?php echo $_GET["nimi"]; ?><br> Tunnus: <?php echo $_GET["tunnus"]; ?><br> Salasana: <?php echo $_GET["salasana"]; ?> </body> </html>


Tehtävä 2 Toteuta PHP-lomakkeella kolmen vastuksen rinnankytkennän laskeminen Muuta aiemmin oppaan Toistolauseet kohdassa tehtävässä 3 tehty PHP-koodaus lomakkeenkäsittelijäksi. Lomakkeenkäsittelijälle lähetetään www-sivulle toteutetuista lomakekentistä kerätyt tiedot.



Lomake esimerkki pakollisilla kentillä.

<?php /*Muuttujat ja niiden nollaaminen */ $nimiVirhe = $nimiVirhe = $sukupuoliVirhe = $wwwVirhe = ""; $nimi = $email = $sukupuoli = $kommentti = $wwwsivu = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["nimi"])) { $nimiVirhe = "Annettu nimi ei kelpaa"; } else { $nimi = test_input($_POST["nimi"]); /* tarkistetaan onko annetussa nimessä vai kirjaimia ja välilyöntejä */ if (!preg_match("/^[a-åA-Å ]*$/",$nimi)) { $nimiVirhe = "Kirjoita vain kirjaimia ja välilyöntejä !"; } } if (empty($_POST["email"])) { $nimiVirhe = "Annettu email ei kelpaa"; } else { $email = test_input($_POST["email"]); /* tarkistetaan onko email:n oikeassa muotoinen */ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $nimiVirhe = "Väärä email, kokeile uudelleen."; } } if (empty($_POST["wwwsivu"])) { $wwwsivu = ""; } else { $wwwsivu = test_input($_POST["wwwsivu"]); /* www-sivun osoitteen tarkistaminen */ if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)POISTA RIVINVAIHTO TÄSTÄ [-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$wwwsivu)) { $wwwVirhe = "Väärä www-sivu, www.nimi.pääte"; } } if (empty($_POST["kommentti"])) { $kommentti = ""; } else { $kommentti = test_input($_POST["kommentti"]); } if (empty($_POST["sukupuoli"])) { $sukupuoliVirhe = "Sukupuoli jäi valitsematta."; } else { $sukupuoli = test_input($_POST["sukupuoli"]); } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>PHP-lomake esimerkki</h2> <p><span class="error">* pakolliset kentät.</span></p> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Nimi: <input type="text" name="nimi" value="<?php echo $nimi;?>"> <span class="error">* <?php echo $nimiVirhe;?></span> <br><br> email: <input type="text" name="email" value="<?php echo $email;?>"> <span class="error">* <?php echo $nimiVirhe;?></span> <br><br> www-sivu: <input type="text" name="wwwsivu" value="<?php echo $wwwsivu;?>"> <span class="error"><?php echo $wwwVirhe;?></span> <br><br> Kommentti: <textarea name="kommentti" rows="5" cols="40"> <?php echo $kommentti;?></textarea> <br><br> Sukupuoli: <input type="radio" name="sukupuoli" <?php if (isset($sukupuoli) && $sukupuoli=="nainen") echo "checked";?> value="nainen">nainen <input type="radio" name="sukupuoli" <?php if (isset($sukupuoli) && $sukupuoli=="mies") echo "checked";?> value="mies">mies <span class="error">* <?php echo $sukupuoliVirhe;?></span> <br><br> <input type="submit" name="submit" value="Lähetä"> </form> <!-- Alla lomakkeelle syötettyjen tietojen näyttö --> <?php echo "<h2>Antamasi tiedot olivat:</h2>"; echo $nimi; echo "<br>"; echo $email; echo "<br>"; echo $wwwsivu; echo "<br>"; echo $kommentti; echo "<br>"; echo $sukupuoli; ?>


PHP-lomake esimerkki

* pakolliset kentät.

Nimi: *

email: *

www-sivu:

Kommentti:

Sukupuoli: nainen mies *

Antamasi tiedot olivat:








AIKA JA SEN KÄSITTELY

C-kieli sisältää ns standardikirjaston time.h jossa on aikaan liittyviä funktioita.

/* kuinka monta tuntia on kulunut 1.1.1970 lähtien alla olevan ohjelman käynnistys hetkeen */ <!DOCTYPE html> <html lang="en"> <html> <head> <meta charset="UTF-8"> <title>Nykypäivä laskuri</title> </head> <body> <h1>Nykypäivä</h1> <?php echo "Tänään on " . date("Y/m/d") . "<br>"; echo "Tänään on " . date("Y.m.d") . "<br>"; echo "Tänään on " . date("Y-m-d") . "<br>"; echo "Tänään on " . date("l"); ?> </body> </html>


Tehtävä 3 Kirjoita tähän tehtävä myöhemmin



Seuraava esimerkki näyttää kellonajan ja päivämäärän ohjelman käynnistyshetkellä, mukavaahan olisi toki jos kellonaika päivittyisi.

#include <stdio.h> #include <time.h> int main () { time_t curtime; time(&curtime); printf("Current time = %s", ctime(&curtime)); getch(); return(0); }


Tehtävä 4 Kirjoita tähän tehtävä myöhemmin



Seuraavassa esimerkissä käytetään "viivettä" ohjelman lopetuksessa. Viivettä voi käyttää esimerkiksi pitämään pieniä testiohjelmia hetken avoinna.
Dev C++ -kääntäjä ei tunnista delay()-funktiota eli viivettä, vastaavan tyyppinen on sleep()-funktio. Funktion sulkeisiin kirjoitetaan aika millisekuntteina.

#include <stdio.h> int main () { printf("Vaihtoehto getch-funktiolle on sleep-funktio.\n"); printf("Sulkeissa aika on millisekuntteina (n 3 s).\n"); sleep(3000); return(0); }


Tehtävä 5 Kirjoita tähän tehtävä myöhemmin



BITTIOPERAATTORIT

Bittioperaattorit toimivat bitti kerrallaan, eivätkä ne siten käsittele muuttujan arvoa kokonaisuudessaan. Bittioperaattorit liittyvät läheisesti laiteajureiden sekä käyttöjärjestelmän sisäiseen ohjelmointiin. Oikein käytettynä, bittioperaattoreilla voidaan parantaa ohjelmien tehokkuutta, ohjelman suoritusnopeutta. Tutustu bittioperaattoreihin oppaan Jatko-osassa.

SATUNNAISLUVUT

Satunnaisluku ohjelmoinnissa tarkoittaa jotain tietokoneen "arpomaa" numeroa. Satunnaisluvun tuottamiseen C-kielessä käytetään kahta funktiota, srand jolla alustetaan satunnaislukugeneraattori ja rand jonka avulla satunnaisluku palautetaan (luku välillä 0 - 32767).

Seuraava esimerkki löytyi Ohjelmointiputka.net-sivustolta .

#include <stdio.h> #include <time.h> #include <stdlib.h> /* satunnaislukua varten */ int main(void) { int i; time_t siemen; time(&siemen); /* alla, alustetaan satunnaislukugeneraattori */ srand(siemen); /* tulostetaan kymmenen satunnaislukua väliltä 0 - 9 */ for (i = 0; i < 10; i++) { printf("%i\n", rand() % 10); } getch(); }


Tehtävä 6 Kirjoita tähän tehtävä myöhemmin



NÄPPÄIMISTÖN ascii- ja scan-koodit

Alla on pieni ohjelma jolla voi selvittää näppäimistön painikkeiden tai painike-yhdistelmien ascii- sekä scan-koodeja. Näppäimistö tuottaa binäärimuodossa numeron tietokoneelle, ohjelma näyttää ko numeron sekä onko numero-arvo ascii- vai scan-osassa.

Seuraavassa esimerkki-ohjelmassa hyödynnetään yllä olevaa ohjelmaa.

#include #include int main() { signed char ascii; signed char scan; float Rkok, R1, R2, R3; do{ printf("\n"); printf("Valitse jokin seuraavista:\n"); printf(" Ohjelman lopetus - Esc-painike\n "); printf("Kolme vastusta sarjassa - F1-painike\n "); printf("Kolme vastusta rinnan - F2-painike\n "); printf("Valintasi: "); ascii=getch(); scan = 0; if (ascii==0) { scan=getch(); } else{ scan=0; } fflush(stdin); if(scan==59) /* Jos valittu F1-painike */ { printf("\n\nVastuksia sarjassa\n"); printf(" Anna R1: "); scanf("%f",&R1); printf(" Anna R2: "); scanf("%f",&R2); printf(" Anna R3: "); scanf("%f",&R3); Rkok=R1+R2+R3; printf(" Rkok sarjassa: %f\n\n",Rkok); } if(scan==60) /* Jos valittu F1-painike */ { printf("\n\nVastuksia rinnan\n"); printf(" Anna R1: "); scanf("%f",&R1); printf(" Anna R2: "); scanf("%f",&R2); printf(" Anna R3: "); scanf("%f",&R3); Rkok=1/((1/R1)+(1/R2)+(1/R3)); printf(" Rkok rinnan: %f\n\n",Rkok); } fflush(stdin); } while(ascii!=27); /* Jos valittu Esc-painike */ return 0; }


Tehtävä 7 Kirjoita tähän tehtävä myöhemmin