Blue Ribbon Campaign for Free Speech CGI Is Heel Makkelijk

of het schrijven van CGI scripts om Web formulieren te verwerken

Ga naar Bijlagen Ga naar andere tutorials

In English (in het Engels), door James Marshall
Auf deutsch (in het Duits), vertaald door Friedemann Wachsmuth
En español (in het Spaans), vertaald door René Alvarez
Em português (in het Portugees), vertaald door Claudio F. Chagas

Stel: Het is 16.00, je baas heeft een CGI script nodig om 16.30, en jij weet niet eens waar CGI voor staat. Je bent nu op de juiste plaats.

CGI is niet zo moeilijk, hoewel er allerlei bangmakende dingen over worden gezegd. Als je kan lezen vanuit STDIN en schrijven naar STDOUT, kun je CGI scripts schrijven. Als je al een programmeur bent, zul je in een paar minuten de basis van CGI onder de knie hebben. Als je geen programmeur bent, zal deze tutorial je niet veel leren -- sorry. Leer wat programmeren, ook shell scripting, en kom dan terug. Veel geluk!

Deze tutorial richt zich op het schrijven van CGI scripts om HTML formulieren op het Web te verwerken. Er worden wat details overgeslagen, maar daardoor zal het wel snel gaan (waarschijnlijk hooguit een uur), en zul je er in 90% van de situaties in het echte leven genoeg aan hebben. Als je dan toch meer nodig hebt, kijk dan eens naar de complete CGI specificatie . Voor hulp met het schrijven van HTML formulieren, kijk naar dit tutorial fragment, of deze documentatie bij NCSA.

Als je deze pagina hebt gelezen, kijk dan naar de bijlagen voor voorbeeld scripts en andere onderwerpen.


Wat is CGI?

CGI is geen taal. Het is een simpel protocol wat gebruikt kan worden om te communiceren tussen Web formulieren en jouw programma. Een CGI script kan worden geschreven in iedere taal die kan lezen van STDIN en schrijven naar STDOUT, en tevens environment variabelen kan lezen, als het ware iedere programmeertaal, waaronder C, Perl, of ook shell scripting.

Structuur van een CGI Script

Hier is de typische volgorde van de stappen in een CGI-script:
  1. Lees de formulierinvoer van de gebruiker.
  2. Doe wat je wil met de data.
  3. Schrijf het HTML-antwoord in STDOUT.
De eerste en laatste stap worden hieronder toegelicht.


Het lezen van de formulierinvoer van de gebruiker

Als de gebruiker het formulier verstuurt, ontvangt jouw script de data als een setje van naam-waarde paren. De namen heb je gedefinieerd in de INPUT tags (of SELECT of TEXTAREA tags), en de waarden zijn de dingen die de gebruiker heeft ingetypt of geselecteerd. (Gebruikers kunnen ook bestanden versturen met formulieren, maar deze tutorial gaat daar niet over.)

Die set van naam-waarde paren wordt aan jou gegeven als 1 lange tekst, die je moet rangschikken. Dat is niet heel moeilijk, en er zijn genoeg bestaande routines die het voor je doen. Hier is er een in Perl, een simpelere in Perl, of een in C. Voor meer afgewerkt CGI moet je eens naar Perl's CGI.pm module kijken. De CGI directory bij Yahoo bevat vele CGI routines (en voorgeschreven scripts) in verschillende talen.

Als dat genoeg voor je is, kun je verdergaan naar de volgende sectie. Als je het echt zelf wil doen, of je bent gewoon nieuwsgierig, is hier de opmaak van de lange string:

"naam1=waarde1&naam2=waarde2&naam3=waarde3"
Dus je moet de = en & tekens weghalen. Dan doe je nog twee dingen met iedere naam en waarde:
  1. Converteer alle + karakters naar spaties, en
  2. Converteer alle "%xx" volgordes naar een karakter waarvan de ascii waarde is "xx". Bijvoorbeeld, converteer "%3d" naar "=".
Dit is nodig omdat de originele lange string URL-gecodeerd is, te zien aan de = en &, en ga zo maar door.

Maar hoe kom je aan die lange string? Dat hangt af van de HTTP methode waarmee het formulier verstuurd was:

(Als je je afvraagt wat het verschil tussen GET en POST is, kijk naar de bijlage erover. Kort antwoord: POST is voor meer algemene doelen, maar GET is goed voor kleine formulieren.)


Het antwoord aan de gebruiker zenden

Schrijf eerst de regel:
Content-type: text/html
plus nog een lege regel naar STDOUT. Daarna schrijf je HTML antwoordpagina naar STDOUT, en het zal worden verzonden aan de gebruiker als je script afgelopen is. Dat is alles.

Ja, je schrijft gewoon pure HTML. Het is niet moeilijk, het is juist heel handig.

Als je een figuur wil terugsturen of een ander niet HTML-antwoord, lees hier hoe.
 


Dat is het. Veel geluk!

Zie je hoe makkelijk het is? Als je me nog steeds niet gelooft, ga dan verder met het schrijven van een script. Wees er zeker van dat je het bestand op de goede plek op je server plaatst, en maak het uitvoerbaar. Zie ook deze bijlage voor meer hints.

Voordat je te veel scripts schrijft, kijk eens naar CGI veiligheid.

Als je meer moet weten over CGI, kijk dan naar de complete CGI specificatie bij NCSA. W3C heeft ook een CGI pagina met links naar allerlei documenten die je mogelijk handig vindt.

O ja, CGI staat voor Common Gateway Interface-- in andere woorden, een standaard ("common") manier van communiceren ("interface") tussen procedures op verschillende machines ("gateway").


Andere dingen om mee te spelen

Kijk naar de Bijlagen-pagina voor het volgende:
  1. Voorbeelden van CGI programma's
  2. CGI Mailer Script
  3. CGI Scripts en veiligheid
  4. Het plaatsen van je script op de server
  5. Een eerder gemaakt bestand terugzenden als antwoord
  6. Andere bruikbare CGI Environment Variabelen
  7. Een plaatje of ander Niet-HTML antwoord terugsturen na een CGI script
  8. Wat is het verschil tussen GET en POST?
  9. Krijg meer controle met "non-parsed header scripts"


© 1996-1998 by James Marshall
© 1999-2000 Nederlandse vertaling by Simon Amstel
(commentaar is hartelijk welkom; voor vragen, lees alstublieft eerst de FAQ)
Opmerking: Commentaar op de inhoud graag (in het Engels) naar J. Marshall, commentaar op de vertaling (in Nederlands of Engels) naar S. Amstel

Laatst Gewijzigd (originele tekst): 18 april 1998 http://www.jmarshall.com/easy/cgi/
Laatst Gewijzigd (vertaling): 4 januari 2000 http://www.jmarshall.com/easy/cgi/dutch/