Tot nu toe was het mij gelukt om een simpel formulier op te slaan in een MYsql database.
Ik waag mij nu aan iets moeilijker. Het is een formulier verspreid over een 3 tal pagina's. Het uiteindelijke script om de gegevens weg te schrijven lijkt mij uitgevoerd te worden maar toch staat er niets in de database. Je kan een een ander eens uitproberen op www.telecomvanassche.be/formtevr.php.
Het uiteindelijke script om weg te schrijven is dit hier. Waar ga ik in de fout, ik ben al uren bezig met nonkel Google te teisteren.
Alvast bedankt als je mij mijn fouten kunt aantonen.

<?php
// open database

$username="xxxxxxxx";
$password="xxxxxxxx";
$database="xxxxxxxx";

mysql_connect("xxxxxxxxx.be.mysql",$username,$password);

@mysql_select_db($database) or die( "Unable to select database");




//let's start our session, so we have access to stored data
session_start();


//let's create the query
$insert_query = "insert into eva_tevr(
datum,
factnr,
email,
verkoper,
vriendwin,
uitleg,
crossel,
aanbod,
conform,
verkoop,
opm_winkel,
technieker,
vriendserv,
instserv,
afspraakserv,
uitlegserv,
crosselserv,
service,
opm_serv,
buralg,
bursnel,
buroplos,
admin,
opm_admin
) values (Default,
" . $_SESSION['datum'] . ",
" . $_SESSION['factnr'] . ",
" . $_SESSION['email'] . ",
" . $_SESSION['verkoper'] . ",
" . $_SESSION['vriendwin'] . ",
" . $_SESSION['uitleg'] . ",
" . $_SESSION['crossel'] . ",
" . $_SESSION['aanbod'] . ",
" . $_SESSION['conform'] . ",
" . $_SESSION['verkoop'] . ",
" . $_SESSION['opm_winkel'] . ",
" . $_SESSION['technieker'] . ",
" . $_SESSION['vriendserv'] . ",
" . $_SESSION['instserv'] . ",
" . $_SESSION['afspraakserv'] . ",
" . $_SESSION['uitlegserv'] . ",
" . $_SESSION['crosselserv'] . ",
" . $_SESSION['service'] . ",
" . $_SESSION['opm_serv'] . ",
" . $_POST['buralg'] . ",
" . $_POST['bursnel'] . ",
" . $_POST['buroplos'] . ",
" . $_POST['admin'] . ",
" . $_POST['opm_admin'] . "
)";

//let's run the query
mysql_query($insert_query);

//database sluiten
mysql_close();

# Redirect user to success page

header("Location: http://www.telecomvanassche.be/bedankttevr.html";);
?>
Wat staat er boven session_start()?
Hier mag geen output of witruimte van HTML staan, zelfs geen andere aanroep van session_start() ook al worden deze in een daar geincludeerd bestand gebruikt.

Verder is het geen $session, maar $_SESSION, en moeten strings zoals 'email' tussen single-quotes.
Misschien wordt het tijd voor een gestructureerde(re) aanpak :).

Net zoals het formulier opgedeeld is in meerdere pagina's kun je dit karwei het beste opsplitsen in een aantal deelproblemen.

Allereerst de observatie dat de code wel werkt in browser A en niet in browser B. De enige reden die ik hiervoor kan bedenken is (inderdaad) dat het uiteindelijke HTML-document op een of andere reden niet goed geinterpreteerd wordt door een browser. Dat gebeurt denk ik alleen als er iets scheef zit in de HTML-code.

Stap 1: zorg voor kloppende HTML-documenten.

Vervolgens: er zijn op een of andere manier problemen met sessies. Als je zorgt dat session_start() wordt aangeroepen op elke pagina, nog voordat je begint met het afdrukken van je HTML-document (het versturen van output) dan zou dit geen problemen moeten opleveren.

Het gebruik van sessies is in principe een vaste instelling van je (formulier)pagina's. Net zoals het gebruik van je database (we gaan er gemakshalve even vanuit dat je deze overal nodig hebt en niet alleen bij het verwerken van de laatste pagina), eventuele debug-instellingen voor bij de ontwikkeling et cetera.

Om te voorkomen dat je op een van de pagina's een instelling vergeet of wellicht net iets anders instelt zou ik ook zeker de suggestie van Aar overnemen, zodat op alle pagina's dezelfde condities (instellingen) gelden.

Stap 2: bundel al je instellingen in een apart configuratie-bestand, en laad deze instellingen in nog voordat je je HTML-document begint.

Dit zorgt ook voor meer overzicht: je "pagina"-code wordt schoner en als er ergens een foutje zit in configuratie dan hoef je dat maar op 1 plek te controleren, in plaats van X plekken.

Tot slot de structuur van je applicatie. Deze is in grote lijnen hetzelfde:

1. toon formulier #1, eventueel met terugkoppeling
--> verstuur
2. verwerk formulier #1, indien correct, ga verder naar 3, anders terug naar 1

3. toon formulier #2, eventueel met terugkoppeling
--> verstuur
4. verwerk formulier #2, indien correct, ga verder naar 5, anders terug naar 3

-- et cetera --

X. toon formulier #n, eventueel met terugkoppeling
--> verstuur
Y. verwerk formulier #n, indien correct... misschien wil je dan een gebruiker nog de mogelijkheid geven om al zijn/haar ingevulde gegevens nogmaals te tonen (te laten bevestigen) voor het uiteindelijk versturen / op te slaan? Daarnaast wil je een gebruiker misschien tussentijds de mogelijkheid geven om vrij te navigeren tussen de pagina's die reeds zijn ingevuld?

Wat je ook nog zou kunnen doen is alles op 1 pagina zetten, en de verschillende formulieren tonen/verbergen met tabs. Je kunt het formulier op tig manier implementeren, daarbij is het wel het beste om eerst een route te kiezen.

Stap 3: werk (in gedachten) de "flow" van de formulierenreeks uit en bedenk hierbij wat een gebruiker allemaal kan/mag. Krijgt de gebruiker bjivoorbeeld na afloop ook nog een mailtje met de ingevulde gegevens? Worden de gegevens ook opgeslagen (die keuze heb je al min of meer gemaakt) etc.


Beschouw het uitdenken van je code (voordat je er aan begint) als het volledig plannen van een reis. Dit is onderweg misschien minder avontuurlijk, maar een stuk comfortabeler :).

EDIT: de stappen hoeven niet noodzakelijkerwijs in die volgorde doorlopen te worden.
Structuur is zo:
1)Welkomstpagina met 3 mogelijkheden/
formulier winkel, formulier techniek, formulier administratie
Normaal gaan ze eerst naar formulier winkel en dan desgevallend naar techniek en/of administratie.
2)Formulier 1 winkel invullen laten verwerken door PHP script send.php naar database/tabel 1
vervolgens doorgestuurd naar
3) dankpagina waar er terug de keuze is om of naar formulier techniek of formulier administratie. het is wel de bedoeling dat het ingegeven mailadres en factuurnummer meegenomen worden uit formulier 1 (vandaar de session variabele) en automatisch ingevuld wordt op dit formulier.
Terug verwerking door een PHP script naar database / tabel 2
4)Naar dankpagina 2 waar terug de mogelijkheid bestaat om naar formulier administratie te gaan of uit te loggen en vooral weer met meename van mailadres en factuurnummer.
5) verwerking naar database / tabel 3
6) uiteindelijke bedankingspagina en slot.

Vraag: waar start ik de sessie van de 2 variabelen die ik wil meenemen.

En is deze syntax juist:
<?php echo .$_session['email']. ?>



Een mail hoeft de gebruiker niet te krijgen enkel de antwoorden komen in 3 tabellen.
Ignace Verschaeve op 27/01/2015 20:08:43

Vraag: waar start ik de sessie van de 2 variabelen die ik wil meenemen.

En is deze syntax juist:

<?php echo .$_session['email']. ?>


Vanwaar die punten? En verder is het $_SESSION.
PHP-regels eindigen we altijd met een punt-komma.

Bedankt bij deze aangepast. Ik heb al zoveel zitten prutsen dat ik het zelf niet meer weet.
Ondertussen begint het op een werkbaar formulier te lijken.
Waarvoor mijn dank.
Veel geleerd ondertussen, al zal ik wel nooit een specialist worden.
Nog even melden dat alles ondertussen werkt. Opgesplitst in 3 formulier waar alleen 2 velden via $_Session worden doorgegeven. Alles lijkt nu te werken zoals het hoort. Veel geleerd. Op naar de volgende uitdaging.
Aan allen bedankt. Mocht er iemand geinteresseerd zijn in de code, laat het weten. Ik stel ze graag ter beschikking.

Reageren