PHP
informasjon
oppdatert: Mandag 10. juni 2002
PHP (PHP: Hypertext Preprocessor)
PHP er raskt å komme igang med å bruke, samtidig som det har nok slagkraftig for mer krevende oppgaver. PHP er spesialdesignet for bruk på weben og kan skrives rett inn i HTML-filer. Her følger et enkelt eksempel på PHP-kode. Trykk her for vise siden.
<html>
<head><title>Demo</title></head>
<body>
<?php echo "Dette er skrevet PHP-skriptet \"demo.php\"" ?>
</body>
</html>

Følgende synktaks er ekvivalent for å markere PHP-kode i dokumenter

  • <?php   #PHP-kode   ?>
  • <?   #PHP-kode   ?>
  • <script language="php">   #PHP-kode   </script>
Alternativt kan <?="verdi" ?> benyttes for utskrift av kun en verdi.

Det finnes en utmerket dokumentasjon av PHP på: http://www.php.net/manual/en/. Her vil vi derfor begrense oss å gjennomgå våre to eksemlpler "form to mail" og "sql-form".

Eksempel: From to mail
For å lese ut innhold av en HTML-form og formidle dette pr. mail kan følgende gjøres:
  • Ønsker du å lage et XHML-dokument bør det innholde XML-direktiv som forteller om hvordan karaktersettet er kodet. På grunn av XML-direktiver benytter samme syntaks som PHP-elementer må direktivet skrives ut av PHP.
    <?php echo '<?xml version="1.0" encoding="UTF-8" ?>' ?>
    
  • Verdier mottatt i POST- og GET-request kan leses ut av PHP-variablene:
    $_POST['parameternavn']
    $_GET['parameternavn']
    
  • For å sende e-post benyttes funksjonen mail
    bool mail (string to, string subject, string message, string hodefelt1, string hodefelt2 ..)
    
Her følger skriptet for side 2 i testskjema omtalt i dokumentasjonen av XHTML. For å test skjemaet, trykk her.
<?php echo '<?xml version="1.0" encoding="UTF-8" ?>' ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testskjema</title>
<link rel="stylesheet" type="text/css" href="http://servlets.no/css/a.css" media="screen" />
</head>

<body>
<p>
<span class="tekstAdvarsel">(demo)</span><br />
<span class="tekstOverskrift">XHML / PHP testskjema side 1</span>
</p>

<?php mail ($_POST["epost"],"Demo av XHTML og PHP","Denne mail er utsendt av et test eksempel vi har av XHTML og PHP, der vi vi oppfordrer kunder til å skrive inn egen e-postadresse. Vi beklager om oppgitt e-postadresse ikke er korrekt. E-postadressen og eventuell annen oppgitt informasjon er uansett ikke lagret hos oss.\n\nVennlig hilsen\nREGISTRAR.NO","From: demo@registrar.no\n"); ?>

<table border="0" cellspacing="0" cellpadding="1" class="feltVerdi">
<tr>
<td class="feltLeder">
<span class="tekstLeder"> E-post er sendt til: </span>
</td>
<td>
<?php echo $_POST["epost"]; ?>
</td>
</tr>
</table>

<p>
<span class="tekstAdvarsel">(demo)</span>
</p>

</body>
</html>

Eksempel: SQL-form
For å aksessere en sql-database fra et PHP-skript, kan du gjøre følgende:
  • Lag en forbindelse til databserver:
        $link = mysql_connect("db8.registrar.no", "testuser", "passord")
    
  • Velger database:
        mysql_select_db("testbase");
    
  • SQL-kall gjøres med funksjonen mysql_query. Eksempler:
        mysql_query("INSERT INTO Ordrer (Vare, Antall) VALUES ('ost', 4)");
    
        $result = mysql_query($query) or die("Query failed");
    
  • Fra resultat-objektet kan du så fiske ut f.eks. arrayer:
        while ($rad = mysql_fetch_array($result, MYSQL_ASSOC)) {
            print "\t<tr>\n";
            foreach ($rad as $feltVerdi) {
                print "\t\t<td>$feltVerdi</td>\n";
            }
            print "\t</tr>\n";
        }
    
Her følger skriptet som er benyttet i "SQL-form" eksemplet omtalt i dokumentasjonen av XHML. HTML-siden som kaller på skriptet inneholder to knapper. En for å lagre og en for slette alle varer. Ved lagring oversendes parametrene "vare" og "antall" som plasseres i som en ny linje i tabellen Ordrer. Hele tabellen skrives til slutt ut, trykk her for å se skjemaet:
<?php echo '<?xml version="1.0" encoding="UTF-8" ?>' ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testskjema</title>
<link rel="stylesheet" type="text/css" href="/css/b.css" media="screen" >
</head>

<body>
<form method="post" action="http://servlets.no/php/b1.php">

<span class="tekstAdvarsel">(demo)</span><br \>
<span class="tekstOverskrift">Testskjema (XHML / PHP): SQL-form</span>

<p>
<table border="0" cellspacing="0" cellpadding="2" >
<tr>
<td class="feltLederV">Vare</td>
<td class="feltLederH">Antall</td>
<td></td>

<?php
$db=mysql_connect("db8.registrar.no","servl_2","passord") or die("FEIL: Ikke forbindelse til MySQL");
mysql_select_db("servl_2") or die("FEIL: Ikke forbindelse til database");

if ($_POST["aksjon"] == "Lagre"){
$vare=$_POST["vare"];
$antall=$_POST["antall"];
$query="INSERT INTO Ordrer (Vare,Antall) VALUES ('$vare', $antall)";
$result=mysql_query($query) or die("FEIL: Query1");
}

if ($_POST["aksjon"] == "Slett alle varer"){
$query="DELETE FROM Ordrer";
$result=mysql_query($query) or die("FEIL: Query2");
}

$query="SELECT vare, antall FROM Ordrer";
$result=mysql_query($query) or die("FEIL: Query3");
while ($rad=mysql_fetch_array($result, MYSQL_ASSOC)){
printf ("<tr><td class=feltVerdiV>%s</td><td class=feltVerdiH>%d</td><td></td>", $rad['vare'], $rad['antall'] );
}

mysql_free_result($result);
mysql_close($db);
?>

</td>
<tr>
<td class="feltV"><input type="text" size="20" name="vare" \></td>
<td class="feltH"><input type="text" size="5" name="antall" \></td>
<td class="feltV"><input type="submit" value="Lagre" name="aksjon" \></td>
</table>
</p>

<p>
<input type="submit" value="Slett alle varer" name="aksjon" \>
</p>

<p>
<span class="tekstAdvarsel">(demo)</span>
</p>

</form>
</body>
</html>

ADVARSEL: Koden innholder passord til database. For å beskytte dine programfiler for innsyn må korrekte fil-rettigheter settes, se SSH.