200 likes | 325 Views
Dagens menu. HTML og PHP: Baglæs fra output til input PHP: Variable, strenge og arrays Funktioner, oprettelse og kald (og variable på tværs af funktioner) echo vs return? if-else konstruktioner MySQL:
E N D
Dagens menu HTML og PHP: Baglæs fra output til input PHP: Variable, strenge og arrays Funktioner, oprettelse og kald (og variable på tværs af funktioner) echo vs return? if-else konstruktioner MySQL: Hvad returnerer mysql_query(): true/false/resultatsæt? mysql_fetch_row(), mysql_error() Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 1
HTML, PHP, SQL, webserver, hvad er hvad?? Sprog: HTML PHP SQL Hardware: Browser Webserver Database-server Database Begrebsafklaring: Sprog: HTML, PHP, SQL Hardware: Browser, webserver, databaseserver, database PHP-filer på webserveren skal tale PHP med databaseserveren, SQL med databasen, og returnere HTML til browseren Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 2
HTML og PHP, baglæns fra output til input (1) Det nemme eksempel: Ønskes:<p>Krig er skidt, PHP er godt</p> Laves:<? echo ”<p>Krig er skidt, PHP er godt</p>”; ?> Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 3
HTML og PHP, baglæns fra output til input (2) Det lidt sværere eksempel: Ønskes: <table> <tr><td>Camilla</td><td>ckj@it-c.dk</td></tr> <tr><td>Lasse</td><td>xls@it-c.dk</td></tr> </table> Laves:<table> <? $result = mysql_query(”SELECT navn,email FROM table1”); while ($row = mysql_fetch_row($result) { echo ”<tr><td>” . $row[0] . ”</td>” . ”<td>” . $row[1] . ”</td></tr>”; } ?> </table> Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 4
HTML og PHP, baglæns fra output til input (3) • Uklart output = ukendt proces = famlende programmering • Derfor: • Hvis du er i tvivl så start bagfra • Hvordan ser det endelige resultat ud (visuelt)? • Hvordan ser det endelige resultat ud i kildekoden (html) • Hvilke dele går tilsyneladende igen (kunne tyde på løkker) <tr><td>navn</td><td>email</td></td></tr> • Hvilke dele kommer fra databasen Camilla, ckj@it-c.dk, Lasse, xls@it-c.dk • Hvilke andre dele kan identificeres? • Hvordan laves det i php? Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 5
Variable og strenge • En variabel er en dims med et navn og en værdi (info inde i boksen). • Værdien kan være • En tekststreng$var = ”her er noget tekst”; • Et tal$var = 36; • En boolean$var = true; • m.m. Quiz: Hvad er følgende? $var1 = -237;$var2 = ”945”;$var3 = $var1;$var4 = ”false”;$var5 = array(”Lasse”,”xls@it-c.dk”); Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 6
Arrays (1) • Et array er en samling af værdier • Der findes to typer arrays: • Associative $arr1 = array (”navn” => ”Camilla”, ”email” => ”ckj@it-c.dk”); $arr2[”navn”] = ”Camilla”; $arr2[”email”] = ”ckj@it-c.dk”; • Indexikale $arr1 = array (”Camilla”, ”ckj@it-c.dk”); $arr2[0] = ”Camilla”; $arr2[1] = ”ckj@it-c.dk”; Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 7
Arrays (2) Et array kan forståes som en liste: Man navigerer et array ad x-aksen, derfor er $array[1] det samme som ’ckj@it-c.dk’... Arrays kan være flerdimensionelle, fx 2D, og kan nu bedre forstås som et skema: Man navigerer først ad x-aksen, derefter ad y-aksen, derfor er $array[0][1] det samme som ’ckj@it-c.dk’... Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 8
Funktioner (1) En funktion er en samling af en eller flere processer/kommandoer. Funktioner kaldes også for procedurer. Opret en simpel procedure: function bingohat() { echo “<p>Krig er skidt, PHP er godt</p>”;} Kald/aktivér/eksekvér funktionen: bingohat(); Resultat: Krig er skidt, PHP er godt OBS: Oprettelse og kald af funktion er IKKE det samme! Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 9
Funktioner (2), argumenter En funktion kan tage argumenter som input function bingohat($arg1, $arg2) { echo “<p>Krig er “ . $arg1 . “, PHP er “ . $ARG2 . “</p>”;} Argumenter kan være i form tekststrenge, variabler, arrays, m.m. $klaphat = ”godt”;bingohat(”skidt”, $klaphat); Resultat: Krig er skidt, PHP er godt Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 10
Funktioner (3), echo eller return? En funktion bør gøre brug af ENTEN echo eller return function multiplicer_ver1($tal1,$tal2) { echo ”<p>” . $tal1 . ” gange ” . $tal2 . ” er lig ” . ($tal1*$tal2) . ”</p>”;}multiplicer_ver1(12,4); function multiplicer_ver2($tal1,$tal2) { $result = ”<p>” . $tal1 . ” gange ” . $tal2 . ” er lig ”. ($tal1*$tal2) . ”</p>”; return $result;}$regnetal = 16; $res = multiplicer_ver1($regnetal,3);echo $res; Resultat: 12 gange 4 er lig 48 16 gange 3 er lig 48 Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 11
Funktioner (4), echo eller return? • Hvad er forskellen på echo og return? Return en bredere anvendelig fordi • echo skriver direkte til brugeren, mens return giver mulighed for videremanipulation, inden der skrives til brugeren (hvis der overhovedet skal skrives til brugeren...) • Eksempel: • function multiplicer_ver2($tal1,$tal2) { return ($tal1*$tal2);}$res = multiplicer_ver2(16,3); • if ($res > 50) { ...} else { ...} Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 12
Funktioner (5), variable på tværs af funktioner Variable eksisterer ikke både i og udenfor rammerne af en funktion Eksempel: function multiplicer_ver2($tal1,$tal2) { $resultat = $tal1*$tal2;}multiplicer_ver2(16,3); echo $resultat; Resultat: [ ] Fejl: $resultat er oprettet inde i funktionen, men ikke givet med ud (return $resultat), opsamlet ($res = multiplicer_ver2(16,3)) for herefter at være tilgængelig også udenfor... Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 13
Funktioner (6), quiztime Quiz: Find 5 fejl !! function multiplicer_ver1($tal1,$tal22) { echo ”<p>” . $tal1 . ” gange ” . $tal2 . ” er lig ” . (tal1*$tal22) . ”</p>”;}multiplicer_ver1($regnetal,4); function multiplicer_ver2($tal1,$tal2) { $result = ”<p>” . $tal1 . ” gange ” . $tal2 . ” er lig ($tal1*$tal2) . ”</p>”; return $result}$regnetal = 16; multiplicer_ver1(16,3);echo $result; Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 14
If-else konstruktioner Ofte bruges if-else blot i små passager fx ifm formvalidering Eksempel: if ($submitknap) { $pattern = "^[A-Za-z0-9_-\.]+@[A-Za-z0-9_-]+\.[A-Za-z0-9_-\.]+$“; $mailok = ereg($pattern,$email); if ($mailok) { // alt i orden, toget kører videre } else { // dårlig mail, fætter, prøv igen }} NB: Har brugeren klikket på submit? Se http://www.it-c.dk/people/xls/w2/ under rettelser til opgavesæt 5... Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 15
If-else konstruktioner (2) Men if-else konstruktioner kan også bruges til fx at omkranse et helt script og dermed være med til at styre udfaldet af et gennemløb... Eksempel: function executeSQL($strSQL) { if (!$link = mysql_connect(.. .. ..)) { echo "<p>Ingen server.<br>" . mysql_error() ."</p>"; return false; } else { if (!mysql_select_db(..,$link)) { echo "<p>Ingen database.<br>" . mysql_error() ."</p>"; return false; } else { $res = mysql_query($strSQL, $link); if (!$res = mysql_query($strSQL, $link)) { echo "<p>Query fejlede.<br>" . mysql_error() ."</p>"; return false; } else { return $res; } }mysql_close($link); }} Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 16
Hvad returner mysql_query() / executeSQL()? • mysql_query() kan returnere 3 forskellige ting, alt afhængig af forespørgselstypen. • Der findes grundlæggende to forskellige slags databaseforespørgsler, dem der returnerer data (”resultatsæt”) og dem, der ikke gør. • Førstnævnte returner enten data eller false, sidstnævnte returnerer true eller false • Eksempler på SQL-kommandoer, der returnerer data: • SELECT, COUNT, DESCRIBE... • Eksempler på SQL-kommandoer, der IKKE returnerer data: • CREATE, INSERT, UPDATE, DELETE, DROP, ALTER... Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 17
Validering af mysql_query() Udfaldet af mysql_query bør testes, enten internt i executeSQL() eller ved kaldstedet – fx inden resultatsættet gives videre til mysql_fetch_row(). Eksempel: if ($res = executeSQL(”SELECT navn,email FROM brugere”)) { if (mysql_num_rows($res) > 0) { while ($row = mysql_fetch_row($res)) { echo ... } } else { echo ”<p>Forespørgslen returnerede ingen rækker</p>”; }} else { echo ”<p>Forespørgslen fejlede...</p>”;} Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 18
Fejlmeddelelser med mysql_error() Ved validering af mysql-operationer kan man – hvis operationen fejler – få mysql-databasens egen fejlmeddelelse vha funktionen mysql_error(). Eksempel: function executeSQL($strSQL) { if (!$link = mysql_connect(.. .. ..)) { echo "<p>Ingen server.<br>" . mysql_error() ."</p>"; return false; } else { ... Se yderligere forklaring på http://www.php.net/manual/en/function.mysql-error.php Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 19
Online resourcer W2: http://www.it-c.dk/people/xls/w2/ PHP: http://www.webcafe.dk/artikler/php/ http://www.webcafe.dk/artikler/sql/ http://hotwired.lycos.com/webmonkey/programming/php/ http://www.zend.com/zend/tut/ MySQL: http://www.php.net/manual/en/ref.mysql.php http://hotwired.lycos.com/webmonkey/99/21/index2a.html SQL: http://www.w3schools.com/sql/default.asp Lasse Steensgaard [xls] Opsamlende forelæsning på W2, 2. april 2003 slide 20