PHP visitekaartjes generator

Ik heb voor het vak ServerSide Scripting (SSS) een visitekaartjes generator gemaakt. Dit was de eerste maakopdracht voor het vak PHP, Justus heeft al meerdere malen gehamerd op het feit dat je altijd alle user input moet verifiëren voordat je dit kan verwerken.

Zelf vind ik het belangrijk om presentatie zoveel mogelijk te scheiden van functie, hier is een functie die ik in mijn visitekaartjes generator gebruik om te zorgen dat alle POST input beveiligd is, maar er in mijn HTML code geen tig verwijzingen staan naar opschoon functie’s (zoals de HTML_transform van Justus).

function getPostInput($input) {
    //loop whole input array
    for($i = 0, $size = sizeof($input); $i < $size; ++$i)
    {
    //map input pairs items to (safe) POST array pairs and 
    //store them in output array
        $output[$input[$i]] = transformHTML($POST[$input[$i]]);
    }
    return $output;
}

Je gebruikt de functie als volgt:

$safePost = getPostInput( array('naam','beroep') );
echo $safePost['naam'];

Je gebruikt hem (nadat je een array met alles wat je nodig hebt erin hebt gestopt) hetzelfde als je normaal $_POST zou gebruiken.

Nu doet de functie nog niet zo heel veel, je voert hem een Array van POST items die je wil gaan gebruiken en je krijgt een array terug met alle items door de HTML_transform gegooid. Dit opzich lijkt heel weinig maar als je met grote formulieren werkt wil je dit liever centraal op een punt houden (zoals Justus al zei: Single Point of Entry).

Ook maakt deze functie het heel makkelijk om bijvoorbeeld alle waarden die je gelijk wil gebruiken ook in een database te stoppen, als je dit aan de functie toe voegt (in de for loop) wordt alles verder automagisch voor je geregeld.

Ik doe ook wat dingetjes met jQuery en CSS3 (roteren tekst), alle code kan je op mijn github vinden.

Posted at November 27, 2011, under PHP.

Server Side Scripting: Arrays, POST en GET

In mijn vorige post heb ik de basis van het SSS vak behandeld, hoewel arrays een stapje moeilijker zijn behoren ze nog steeds tot de basis.

Justus heeft het hier in de hoorcolleges al over gehad maar het is voor nog steeds niet iedereen duidelijk. Een array is een variabele waar je andere waarden in kan stoppen.

Je kan zo’n array zelf maken op een aantal verschillende manieren (zoals Justus heeft uitgelegd in zijn hoorcollege) daarnaast worden er onder water al een paar arrays aangemaakt door PHP zelf. De belangrijkste hiervan zijn $_GET en $_POST, de inhoud van deze arrays gebruik je om gegevens te verwerken die met het script zijn meegestuurd.

Denk bijvoorbeeld aan een HTML formulier, zodra iemand dit formulier verstuurd heeft moet jij met de ingevulde gegevens aan de slag in je PHP script. Zo’n HTML formulier kent velden gemarkeerd met termen als naam, e-mail, telefoonnummer, bericht, etc. In de HTML code van je formulier geef je deze velden ook een code mee: de name attribuut.

Zodra dit formulier verzonden wordt krijgt het script dat het moet verwerken een array mee, afhankelijk hoe het formulier verstuurd is is dat $_GET of $_POST. Deze arrays zijn allebei literal (tekst) indexed arrays, zoals Justus ons verteld heeft kan je zo’n array op de volgende manier uitlezen.

echo $array['waarde'];

Dit gaat bij GET en POST arrays op dezelfde manier, en daar is key (hetgeen wat je tussen [”] zet) de name attribuut van het HTML formulier.

GET en POST zijn dus manieren om data van een browser / client naar je PHP script te sturen.

De functie isset(); controleert of een bepaalde variabele geset is of niet (ergens op uitkomt).

if ( !isset($_POST['mail']) ) { }

Deze if statement controleert of iemand bij een formulier het veld heeft ingevuld met de name ‘mail’. Uit de if komt het omgekeerde (if it is not set) door het uitroepteken (een logische not).

Posted at November 19, 2011, under PHP.

Server Side Scripting: basis PHP

In deze post zal ik de basis van PHP behandelen die je nodig hebt om het vak Server Side Scripting (V1 CMDA) te begrijpen.

PHP Zoals de naam van het vak suggereert is PHP een server-side taal, dit betekent dat alle PHP code normaliter nooit te zien is in een browser (op een client). Daar staat tegenover dat PHP ook niks te maken heeft met HTML code, PHP gaat hier hetzelfde mee om als met gewone tekst:

Als je met HTML bezig bent dan zorg je er bijvoorbeeld voor dat je elementen netjes nest, oftewel dit probeert te voorkomen:

<h2><span>Hello</h2></span>

Met al deze HTML dingen heb je in PHP niks te maken. De onderstaande code heeft dezelfde ‘foute’ HTML code in zich maar is goede PHP, het kan de server namelijk niks schelen hoe de HTML er wel of niet uitziet (of het wel uberhaupt HTML is).

echo '<h2><span>Hello</h2></span>';

In dit geval is de ‘foute’ HTML code de output van het PHP script, echter hoeft een script niet altijd een output te hebben. Denk bijvoorbeeld aan een PHP script die mail verstuurd of iets update in een database, die scripts hebben wel een gevolg maar dit is geen directe output.

Functies in PHP Zoals je misschien nog kan herinneren van AS3 kan je functies gebruiken om je code te ordenen en om stukken code te kunnen hergebruiken. In PHP heb je ook het voordeel dat je een functie uit een bestand (zodra je die overal include) in al je andere bestanden kan gebruiken.

In PHP ziet een functie er zo uit:

function doeIets() {
    //code
}

Je moet sowieso begrijpen dat een functie uit zichzelf niks doet, daarvoor moet hij aangeroepen worden:

doeIets();

Als je dus een functie hebt waar tekst (of html) met het echo commando wordt uitgevoerd en de functie wordt nergens aangeroepen dan wordt is die tekst ook nooit output.

code

function echoName() {
    echo '<p>mike</p>';
}
function echoAge() {
    echo '<p>20</p>';
}

Output

<p>20</p>
<p>mike</p>

De output bevat dus ook alle HTML tags (ook al zie je die niet standaard in je browser). Zie dat de de volgorde van de output afhankelijk is van de volgorde van het aanroepen functies en niet van de volgorde waarop de functies in je code staan.

Functies met argumenten in PHP Functies zijn tot nu toe dus eigenlijk altijd hetzelfde, maar wat als je een functie wilt die iets doet met een variabele of afhankelijk van iets dan kan je met argumenten werken.

Hoe ziet dit eruit?

function echoVar($var) {
    echo $var;
}
$naam = 'mike';
echoVar($naam);

De functie echoVar schreeuwt (echo’d) alles uit wat je hem meegeeft. Oftewel de functie kan opzich pas iets doen zodra je hem zijn ingrediënten meegeeft (In een oude AS3 tutorial leg ik meer uit over de gedachtegang achter argumenten).

Let op dat je de functie niet perse een variabele hoeft te voeren, je kan hem ook op deze manier uitvoeren:

echoVar('mike');

Binnenin de functie wordt ‘mike’ omgezet in de variabele $var.

Posted at November 18, 2011, under PHP.

Techlab Tutorial: Eenvoudig je eigen layer opzetten

Deze tutorial is gericht op Interactieve Media studenten aan de HvA. Ik maak namelijk gebruik van de stap server die alleen maar voor IAM studenten aan de HvA beschikbaar is.

Deze tutorial is gemaakt op basis van deze tutorial van Layar zelf, in de mijne ga ik ook in op een database maken op de stap server en hoe je een tabel maakt en de data er in zet.

Hier ga ik behandelen hoe je heel snel je eigen layer opzet, ik ga redelijk snel door de theorie heen want deze tutorial is gericht op het zo snel mogelijk realiseren van je layer.

more

Posted at May 16, 2011, under PHP.

Houd de snelheid van je php script bij

Ik vroeg me af hoeveel impact een bepaalde PHP functie op de rendertijd van de output had. Een makkelijke manier om hierachter te komen is om bij te houden hoelaat PHP begint aan je script en hoelaat hij eindigt. Echo het verschil en je weet precies hoe lang je moet wachten tot dat de server je pagina uitspuugt.

Houdt er rekening mee dat de klok pas begint met lopen zodra de server de request heeft ontvangen (wat altijd later is dan wanneer je een verzoek doet tot de pagina vanaf een browser ivm. het internet). Ook stopt de klok _al_ zodra de server klaar is, hierna moet de webpagina nog verstuurd worden naar de client.

//helemaal aan het begin van je script zet je dit
$startTime = microtime(true)

// …

Nu kan je in je broncode van je html onderaan vinden hoelang de pagina ermee bezig was, iets in deze trend:

Ik kwam er al snel achter dat als je PHP in combinatie met SQL gebruikt (wat je altijd doet als je data op wilt slaan) er geen pijl meer op te trekken is hoelang de pagina erover doet.

Posted at January 05, 2011, under PHP.