Interaktionsudvikling, Multimediedesigneruddannelsen, Århus Erhvervsakademi

Dag 3 -PHP forms

Konstruktion og modellering

Plan :

 

I grundbogen:

Powers kap.5

 


Forms og håndtering af formdata

Det er en af PHP's afgørende styrker, at det som serverside sprog er i stand til at opsamle og registrere input fra brugerne. Når brugeren i rollen som klient via en browser afsender en formular (dvs. aktiverer formens submit-knap), er det muligt, med PHP installeret på serveren at opsamle denne information.

 

Eksempel fra Powers contact2.php hvor der via en form opsamles input fra brugeren til en email.

Contact us

Ut enim ad minim veniam, quis nostrud exercitation consectetur adipisicing elit. Velit esse cillum dolore ullamco laboris nisi in reprehenderit in voluptate. Mollit anim id est laborum. Sunt in culpa duis aute irure dolor excepteur sint occaecat.

 
	
	

 

Når man trykker på 'send message' vil de indtastede data blive gemt et array som har variabel navnet $_POST.

 

<div id="maincontent">
<h1>Contact us </h1>
<p>Ut enim ad minim veniam, quis nostrud exercitation consectetur adipisicing elit. Velit esse cillum dolore ullamco laboris nisi in reprehenderit in voluptate. Mollit anim id est laborum. Sunt in culpa duis aute irure dolor excepteur sint occaecat.</p>

<form id="feedback" method="post" action="">
<p>
<label for="name">Name:</label>
<input name="name" id="name" type="text" class="formbox" />
</p>
<p>
<label for="email">Email:</label>
<input name="email" id="email" type="text" class="formbox" />
</p>
<p>
<label for="comments">Comments:</label>
<textarea name="comments" id="comments" cols="60" rows="8"></textarea>
</p>
<p>
<input name="send" id="send" type="submit" value="Send message" />
</p>
</form>


<pre>
<?php if ($_POST) {print_r($_POST);} ?>


</pre>
</div>

 

PHP kommandoen <?php if ($_POST) {print_r($_POST);} ?> gør at, hvis der er indhold i $_POST arrayet, vil det blive skrevet ud på clienten via print_r( ) funktionen ( en funktionen der er beregnet til at udskrive arrays).

 

I nogle tilfælde vil man gerne have at dataerne i formularen sendes til et specifikt PHP dokument, der så efterfølgende behandler disse. Dette gøres ved at sætte action attributten = navnet på PHP dokument, hvis det

ligger i samme mappen eller at angive en URL til PHP dokumentet..

 

<form name="myForm" method="post" action="http://www.slipsager.net/mdu/2sem/PHP/form_feedback.php" onsubmit="return validateForm()">  

 

Se eksempel

 

Associativ Array

Arrayet $_POST er opbygget som et såkaldt associativt array (omtalt dag1), og vi kan derfor få fat i, hvad der er indtastet i de enkelte input elementer, ved at associere/referere til inputfelternes name attribut.

$_POST["name"], $_POST["email"],$_POST["comments"]

Dette kan så f.eks. bruges sådan.

echo("<h1>Hej med dig ". $_POST["name"]."</h1>");

 

Get og Post metoden

I FORM-elementet angiver attributten method, at indholdet skal videresendes med metoden post. Der findes en alternativ metode get.

Prøv at ændre ovenstående kode så der i form elementet i stedetfor står :

<form id="feedback" method="get" action="">

<?php if ($_GET) {print_r($_GET);} ?>

Forskellen på de to metoder er, at mens indholdet med metoden post sendes til serveren som en message, bliver indholdet med metoden get sendt via URL'en , og dermed bliver formindholdet synligt i browserens adresselinje.

Dette kaldes også for en Query string.

Generelt anbefales det at begrænse anvendelsen af get til forespørgsler, f.eks. i forbindelse med søgninger eller fremvisning af oplysninger fra database.

Drejer det sig derimod om afsendelse af data mhp. lagring eller opdatering af eksisterende data, bør metoden post anvendes. Da vi netop her afsender data til til serveren mhp. registrering, er metoden post det korrekte valg.

 

Input fra forskellige typer af formulare

 


Radiobutton

Option

Se http://www.phpartikler.dk/artikler/formular.php

 


Mails via Forms

Læs følgende artikel om mail forms:

http://www.phpartikler.dk/artikler/mail.php#formmailer

Det kan være problemer med at sende mail fra WAMP serveren så for at teste formmaileren skal den gerne være uploadet til en remote webserver.

Eksempel

Denne type form mailer er meget åben og kan med fordel gøres mere sikkert og robust via:

Herved kommer man frem til Powers contact09.php (gemt som tekst fil !!)

 

 

 

 

 


 

Opgaver/Øvelser

 

Opg. 1

Prøv at få dette eksempel til at kører på den lokale testserver. Dvs. ved at gemme form_validation_id.html på testserveren og så lave en formfeedback.php side som bliver aktiveret når brugeren trykker på submit.

<form name="myForm" method="post" action="form_feedback.php" onsubmit="return validateForm()">  

 

Opg. 2

Lav en formfeedback side på bestillingsformularen som I lavede i forbindelse med VisitDanmark projektet.

 

Opg. 3 Serverside validering

Lav via PHP en serverside validering af opg. 1. som kan bruges i stedet for client side valideringen som sker via javascript.

 

Tip: Du kan her benytte funktionerne strlen og is_numeric (se nærmere på www.php.net, hvor du finder samtlige php-funktioner dokumenteret).

Overvej fordele og ulemper ved at benytte henholdsvis klientside og serverside validering. Hvilken valideringsform bør foretrækkes? Begrund dit svar.

 

Opg. 4

Lav en formfeedback side som kan præsentere data fra følgende bestillingsformular. http://www.sawmac.com/missing/javascript/tutorials/examples/chapter09/complete_9.2.html