Eksempelsamling Eksempelsamling... 1 Forms...1 PHP...2 Dato og if-else + if-sætning...2 Sammenligningsoperatorer:...3 Echo...3 Kommentarer...3 Variabler - simpelt...4 Sammensætning ved brug af punktum...4 Løkker...4 Overførsel af data fra én side til en anden...5 Fortsat: Dataoverførsel vha. links:...5 Overførsel af flere værdier i samme link:...6 Overførsel fortsat nu med radio-buttons og select-lister i forms:...6 Overførsel fortsat nu med check-boxes (flere, samtidige markeringer):...7 Brugerdefinerede funktioner:...7 Brugerdefineret funktioner: brug af return og echo:...8 Inkludering af funktioner fra andre filer...8 Inkludering fortsat: eksempler fra formvars.php:...9 Inkludering: check_vars.php...10 Regulære udtryk...10 Netscraping regulære udtryk i praksis...11 Afsendelse af emails fra HTML-side: regulære udtryk og if-else:...11 MySQL...12 Opret tabel + foreign constraints:...12 Almindeligste datatyper:...13 Insert-kommando...13 Select-kommando:...13 Count og group by:...13 Having sum: angivelse af tærskel for resultaterne...13 Left Join:...14 Left join II:...14 Tilgang til MySQL med PHP:...14 Udvælg, gennemgå og få udskrevet rækker fra databasen:...15 Slet række i database:...15 Forms <form> <textarea></textarea> <input> <select> <option></option> </select> <form action="dosearch.php" method="post"> Jakob Page 1 1/5/2008 1
<input type="text" name="search" value="indtast søgeord"> <input type="submit" value="søg"> <form...> <select name="city"> <option value="cph">københavn</option> <option value="roenne" selected>rønne</option> <option value="aarhus"> Arhus</option> </select> PHP Dato og if-else + if-sætning <p> Dagens dato er echo date("d-m-y"); if(date("m")== 08 ){ echo " og solen burde skinne"; else { og vejret er utilregneligt </p> $kroner = 8; Jakob Page 2 1/5/2008 2
if ( $kroner == 1 ) {// if-gren echo "Du har 1 krone p a din bankbog"; else {// else-gren echo "Du har $kroner kroner p a din bankbog"; Sammenligningsoperatorer: == lig med < mindre end <= mindre end eller lig med > større end >= større end eller lig med!= forskellig fra <h2>body Mass Index</h2> $vaegt = 70.0; $hoejde = 180.0; echo "Vægt: $vaegt kg. <br>højde: $hoejde cm.<br>"; $bmi = $vaegt / (($hoejde/100.0) * ($hoejde/100.0)); echo "Dit BMI er $bmi<br>"; if ( $bmi < 20.0 ) { echo "Dit BMI er for lavt."; elseif ( $bmi < 25.0 ) { echo "Dit BMI er normalt."; else { echo "Dit BMI er for højt."; Echo <html><head><title>hello World</title></head> <body> echo "Hi There, <p>"; echo "Greetings from a simple PHP script</p>"; </body> </html> Kommentarer /*Jeg bliver aldrig læst af serveren*/ //jeg bliver aldrig læst #jeg bliver aldrig læst Jakob Page 3 1/5/2008 3
Variabler - simpelt <h2> $navn = "Jonas"; echo "Hjemmeside for "; echo $navn; </h2> <hr> Denne side vedligeholdes af echo $navn Specialtegn: \\ : backslash \n : ny linie \t : tabulator \" : anførselstegn Sammensætning ved brug af punktum <html><head><title>strenge</title></head> <body> $course = "DSDS"; $semester = "E2007"; $description = $course. " i semesteret ". $semester; echo "Du er tilmeldt $description"; </body> </html> Løkker $counter = 20; while ( $counter >= 1 ) { echo "I love Web programming<br />"; $counter--; while-løkken kan omskrives til en for-løkke love2.php: for ( $counter = 20 ; $counter >= 1 ; $counter-- ) { echo "I love Web programming<br />"; Multiplikationstabel med for-løkke: for ( $r = 1 ; $r <= 5 ; $r = $r + 1 ) { // kør følgende for-løkke for hver række for ( $s = 1 ; $s <= 5 ; $s = $s + 1 ) { echo ($r * $s); Jakob Page 4 1/5/2008 4
echo " "; echo "<br />"; Den ydre løkke kører 5 gange, r = 1, 2,..., 5 For hvert r kører den indre løkke med s = 1, 2,..., 5 Overførsel af data fra én side til en anden veksle.html: <h2>vekslebank</h2> <form action="veksle.php" method= get > <p>indtast beløb i kroner: </p> <p><input name="kroner"></p> <p><input type="submit" value="beregn Dollarbeløb"></p> veksle.php: <h2>vekslebank</h2> <p> $kroner=$_request[ kroner ]; $kurs = 8.43; $gebyr = 20.0; $dollars = ($kroner - $gebyr) / $kurs; $dollars = number_format($dollars, 2, ",", "."); echo "For kr. $kroner modtager du \$$dollars"; </p> <p><a href="veksle.html">ny beregning</a></p> Fortsat: Dataoverførsel vha. links: <h2>quick Vekslebank</h2> <a href="veksle_quick.php?kroner=500">quick kr. 500</a> <a href="veksle_quick.php?kroner=1000">quick kr. 1000</a> <form action="veksle_quick.php">indtast andet beløb i kroner: <p><input name="kroner"></p> <p><input type="submit" value="beregn Dollarbeløb"></p> som sendes til: <html><head><title>quick Vekslebank</title></head> <body> <h2>quick Vekslebank</h2> $kroner=$_request[ kroner ]; $dollars = ($kroner - 20.0) / 8.43; $dollars = number_format($dollars, 2, ",", "."); echo "For kr. $kroner modtager du \$$dollars"; Jakob Page 5 1/5/2008 5
<p><a href="veksle_quick.html">ny beregning</a></p> </body> </html> Overførsel af flere værdier i samme link: Eksempel plus.php?a=5&b=47 <html><head><title>plus service</title></head> <body> <h2>plus service</h2> $a = $_REQUEST[ a ]; $b = $_REQUEST[ b ]; $sum = $a + $b; echo "Summen af $a og $b er $sum"; </body> </html> Overførsel fortsat nu med radio-buttons og select-lister i forms: format.html: <form action=format.php method="post"> <b>farve:</b> <select name=farve> <option value="red">rød</option> <option value="green">grøn</option> <option value="blue">bl a</option> </select> <b>type face:</b> Italic <input type="radio" name="face" value="i"> Bold <input type="radio" name="face" value="b"> Normal <input type="radio" name="face" value="normal" checked> <br /> <textarea name="tekst" cols="50" rows="4">teksten</textarea> <br /> <input type="submit" value="formatter tekst"> format.php: <h2>tekstformatering: resultat</h2> $face = $_REQUEST[ face ]; $tekst = $_REQUEST[ tekst ]; $farve = $_REQUEST[ farve ]; if ( $face!= "normal" ) { $tekst = "<$face>$tekst</$face>"; Jakob Page 6 1/5/2008 6
echo "<p style= color:$farve >$tekst</p>"; <p> <a href=format.html>ny formattering</a> </p> Overførsel fortsat nu med check-boxes (flere, samtidige markeringer): format_check.html: <form action= format_check.php method= post > <b>farve:</b> <select name= farve > <option value= red >Rød</option> <option value= green >Grøn</option> <option value= blue >Bl a</option> </select> <b>type face:</b> Italic <input type= checkbox name="face[]" value= i > Bold <input type= checkbox name="face[]" value= b > <p> <textarea name= tekst cols= 50 rows= 4 >Teksten</textarea> </p> <p><input type= submit value="formatter tekst"></p> format_check.php: $tekst = $_REQUEST[ tekst ]; $farve = $_REQUEST[ farve ]; $face = $_REQUEST[ face ]; $prefix = ""; $postfix = ""; for ( $i=0 ; $i < count($face) ; $i=$i+1 ) { $prefix = $prefix. "<$face[$i]>"; $postfix = "</$face[$i]>". $postfix; $tekst = "$prefix $tekst $postfix"; echo "<p style= color:$farve; >$tekst</p>"; Brugerdefinerede funktioner: // Først definerer vi vores funktion function emph ( $arg ) { return "<em>$arg</em>"; /* Herefter kan vi kalde vores funktion med forskellige argumenter*/ Jakob Page 7 1/5/2008 7
$really = emph("really"); echo "I $really like coffee!<br />"; $you = emph("you"); echo "don t $you?"; Brugerdefineret funktioner: brug af return og echo: function box ($titel, $tekst) { return "<table bgcolor=black width=100%> <tr><th><font color=white>$titel</font></th></tr> <tr><td><table width=100%><tr><td bgcolor=white>$tekst</td></tr> </table> </td> </tr> </table>"; function login_box () { $form = " <form action='login.php'> Email: <input type=text name=email> <input type=submit> "; echo box ("Login", $form); login_box (); Ovenfor: funktionen login_box kalder funktionen box. Inkludering af funktioner fra andre filer //filen includeme.php $a=100; //filen main.php include("includeme.php"); echo $a; //udskriver 100 function showheader($title){ Jakob Page 8 1/5/2008 8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"... <html lang="en"> <head> <title> echo $title;</title> <meta http-equiv="content-type"... </head> <body> function showfooter(){ </body></html> include("markup.php"); showheader("velkommen"); Her er min besvarelse, <a href= http://validator.w3.org/check?uri=referer > validerer jeg? </a> showfooter(); Inkludering fortsat: eksempler fra formvars.php: function error ( $msg ) { echo "<html><body><h2>fejl: $msg</h2></body></html>"; exit; // Undgå at fortsætte scriptet! function chk_email ( $email ) { if ( ereg('^[a-za-z][0-9a-za-z\._]*@[0-9a-za-z\._]+$', $email) == 0 ) { error("du skal indtaste en email-adresse"); function chk_heltal ( $tal ) { if ( ereg('^0 [1-9][0-9]*$', $tal) == 0 ) { error("du skal indtaste et tal"); Jakob Page 9 1/5/2008 9
function chk_text ( $t ) { if ( ereg('^[0-9a-zæøåa-zæøå\. \-]+$', $t) == 0 ) { error("du skal indtaste text"); function chk_passwd ( $p ) { if ( ereg('^[0-9a-za-z]+$', $p) == 0 ) { error("du skal indtaste en gyldig adgangskode"); Inkludering: check_vars.php function chk_text_single_line ( $t ) { if ( ereg('^[0-9a-za-zãæøåæøå\. \-]+$', $t) == 0 ) { error("du skal indtaste noget gyldigt tekst, ingen specielle tegn"); function chk_text_multi_line ( $t ) { if ( ereg('^[^<>\]+$', $t) == 0 ) { error("du skal indtaste noget gyldigt tekst, ingen >, < eller \\"); function chk_passwd ( $p ) { if ( ereg('^[0-9a-za-z]+$', $p) == 0 ) { error("du skal indtaste en gyldig adgangskode"); Regulære udtryk. matcher alle karakterer c matcher karakteren c \c matcher den escapede karakter c, hvor c er en af, *, +,?, (, ), [, ], $,., \, t, n, v, f, r p1p2 matcher en streng s hvis p1 matcher et prefix af s og p2 matcher resten af s (ex: strengen abc matches af mønsteret a.c) p* matcher 0, 1 eller flere instanser af mønsteret p (ex: strengene abbbbbba og aa matches af mønsteret ab*a) (p) matcher strenge der matcher p (ex: strengen cababcc matches af mønsteret c(ab)*cc p+ matcher 1 eller flere instanser af mønsteret p (ex: mønsteret ca+b matcher strengen caaab, men ikke strengen cb) p1 p2 matcher strenge der matcher enten p1 eller p2 (ex: mønsteret Jakob Page 10 1/5/2008 10
(pig cow) matcher strengene pig og cow) [class] matcher en karakter i class; se nedenfor for en definition af karakterklasser class. Mønsteret [abc1-4]* matcher sekvenser af karaktererne a, b, c, 1, 2, 3, 4; rækkefølgen er uden betydning. [^class] matcher en karakter som ikke er i class. Mønsteret [^abc1-4]* matcher sekvenser af vilkårlige karakterer som ikke er blandt a, b, c, 1, 2, 3, 4. $ matcher den tomme streng. p? matcher 0 eller 1 instanser af mønsteret p (ex: strengene aa og aba matcher mønsteret ab?a, men strengen abba matcher ikke mønsteret ab?a). Til check af brugerindtastninger vil vi oftest benytte os af tegnene ^ og $ først og sidst i mønsteret. Til opskrivningen af mønstre benytter vi os af muligheden for at indkapsle strenge med... for at undåa den specielle betydning af tegnet $ i strenge på formen "..." Netscraping regulære udtryk i praksis <html><head><title>world Population Watch</title></head> <body> <h1>world Population Watch</h1> $content = file_get_contents( "http://www.census.gov/cgi-bin/ipc/popclockw"); eregi("<div id=\"worldnumber\">([0-9,]+)</div>", $content,$result); echo "Der er $result[1] mennesker i verden."; </body> </html> Afsendelse af emails fra HTML-side: regulære udtryk og if-else: sendmail.html: <form method="post" action="sendmail.php"> <p>emne: </p> <p><input type='text' name='emne'></p> <p>din email: </p> <p><input type='text' name='email'></p> <p>besked:</p> <p><textarea name='tekst' cols='30' rows='5'></textarea></p> <p><input type='submit' value='send'></p> og sendmail.php: if (! ereg('^[a-z aa-z A0-9/\., \-]+$', $_REQUEST['emne']) ){ die("g_a tilbage og indtast et emne!"); Jakob Page 11 1/5/2008 11
if (! ereg('^[a-z aa-z A0-9/\.,\013 \-]+$', $_REQUEST['tekst'])){ die("g_a tilbage og indtast en tekst!"); if (! ereg('^[a-za-z][a-za-z\.0-9\-]*@[a-za-z\.0-9\-]+$', $_REQUEST['email'])){ die ("G_a tilbage og indtast en email-adresse!"); $sent = mail("mael@itu.dk", $_REQUEST['emne'], $_REQUEST['tekst'], "From: ".$_REQUEST['email']); if($sent){ echo "Beskeden er sendt!"; else { echo "Der kunne desv_rre ikke afsendes en email."; MySQL CREATE TABLE CREATE UNIQUE INDEX DROP TABLE ALTER TABLE opret tabel opret index for effektiv søgning slet tabel tilføj eller modificer kolonne SHOW TABLES; Vis alle tabeller SHOW FIELDS FROM tabel; Vis navn og type på felter i tabel SELECT * FROM tabel; Vis alt fra tabel SELECT foretag udtræk og samkøring INSERT INTO... VALUES (...) indsæt poster i tabel DELETE FROM fjern poster fra tabel UPDATE redigér poster i en tabel COUNT(udtryk) MIN(udtryk) MAX(udtryk) SUM(udtryk) AVG(udtryk) Antal værdier (som ikke er NULL) Mindste værdi (eller NULL) Største værdi (eller NULL) Summen af værdierne (eller NULL) Middelværdi af værdierne Opret tabel + foreign constraints: CREATE TABLE mailing_list ( email varchar(100) NOT NULL, name varchar(100) NOT NULL, INDEX (email) ) TYPE=InnoDB; Jakob Page 12 1/5/2008 12
CREATE TABLE phone_numbers ( email varchar(100) NOT NULL, phone varchar(20) NOT NULL, INDEX (email), FOREIGN KEY (email) REFERENCES mailing_list(email) ) TYPE=InnoDB; Almindeligste datatyper: INT heltal 117 DOUBLE flydende-kommatal 3.1415 VARCHAR(80) tekst (maks 80 tegn) Ole Jensen DATE dato 2002-03-10 TIME klokkeslet 22:59:17 DATETIME dato og klokkeslet 2002-03-10 22:59:17 Insert-kommando INSERT INTO mailing_list (name, email) VALUES ( Kenneth Riis, kenneth@it.edu ); INSERT INTO mailing_list (name, email) VALUES ( Niels Hallenberg, nh@it.edu ); INSERT INTO phone_numbers (email, phone) VALUES ( kenneth@it.edu, 44 84 34 94 ); Select-kommando: SELECT name, mailing_list.email, phone FROM mailing_list, phone_numbers WHERE mailing_list.email = phone_numbers.email; Count og group by: SELECT knr, COUNT(snr) FROM Tilmelding GROUP BY knr; Having sum: angivelse af tærskel for resultaterne SELECT aar, SUM(beloeb) FROM Udgift GROUP BY aar HAVING SUM(beloeb) >= 1000000; Jakob Page 13 1/5/2008 13
Left Join: For at finde frem til antallet af grupper per person: SELECT u.name, email, COUNT( g.gid ) AS num_groups FROM users AS u LEFT JOIN users_in_groups AS uig ON u.uid = uig.uid LEFT JOIN groups AS g ON uig.gid = g.gid GROUP BY u.uid I forhold til en almindelig join er forskellen bare, at man så at sige tager en tabel ad gangen i sin syntaks. Med en left join tages alle rækkerne i den venstre tabel, også selvom værdien i tabellen til højre er null. Left join II: SELECT Kursus.knavn, Tilmelding.snr FROM Kursus LEFT JOIN Tilmelding ON Kursus.knr = Tilmelding.knr; er næsten det samme som: SELECT knavn, COUNT(snr) FROM Kursus, Tilmelding WHERE Kursus.knr = Tilmelding.knr GROUP BY knavn; Tilgang til MySQL med PHP: Opret forbindelse til maskine: $conn = mysql_connect("mysql.itu.dk", "holbech", "pass"); Jakob Page 14 1/5/2008 14
Opret forbindelse til databasen: $db = mysql_select_db("dsdstest", $conn); Eller min egen løsning: // funktion til etablering af forbindelse til database function mydb_connect() { $dbhost = "localhost"; $user = "root"; $passwd = "52562"; $db = mysql_connect($dbhost, $user, $passwd); if ( $db == 0 ) { error ("Connection to database on '$dbhost' failed"); $database = "test_1"; if ( mysql_select_db($database, $db) == 0 ) { error ("Failed to select database '$database'"); Udvælg, gennemgå og få udskrevet rækker fra databasen: $result= mysql_query("select name,zip FROM mytable WHERE zip=2200"); //Vi looper igennem alle valgte rækker while($row = mysql_fetch_array($result) ){ echo "<p>$row[0] - $row[1]</p>"; eller som numeriske arrays: $result= mysql_query("select name,zip FROM mytable WHERE zip=2200"); //En gang til, som associative array while($row = mysql_fetch_array($result) ){ echo <p>.$row[ name ]. -.$row[ zip ]. </p> ; Slet række i database: mysql_query("delete from maillist where email = $email "); Jakob Page 15 1/5/2008 15