[PHP]Feedback formulier met database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Senaxx
  • Registratie: December 2010
  • Laatst online: 15:34
Ik ben een klein opdrachtje bezig om een feedback formulier te maken. De bedoeling is dat cursisten hierop hun beoordeling van de cursus kunnen geven.

Nu had ik dit mooi op 1 regel alles in tig kolommen kunnen gooien, (niet efficient, maar het kan) maar er is toch wat meer vereist. Dus ik ben begonnen in MySQL de tabellen op te zetten als volgt:

Afbeeldingslocatie: http://imgf.tw/274474438t.jpg
Bij dit formulier: http://senaxx.mycloudnas.com/ilionx/

De bedoeling is als volgt:
De "evaluatie" tabel dient voor alle antwoorden van het formulier.
De "cursist" tabel dient voor alle cursisten.
De rest van de tabellen worden gevuld doormiddel van cms'je

Op dit moment is het nog niet zo maar het is uiteindelijk de bedoeling dat het formulier gegenereerd wordt uit de database komt en hier kom ik ook nog wel uit, waar ik een beetje spaak loop is bij de submit/insert.

Alle waardes (cursus, trainer, vragen) komen met hun id uit de database in het formulier, alleen de cursist is nieuw (en heeft dus nog geen id). En nu was dit op te lossen door van te voren een cursist aan te maken (zodat deze ook een id heeft) maar dat willen ze niet.

Nu wil ik bij de submit dus alles in de "evaluatie" tabel stoppen, maar omdat de cursist nog niet bestaat is er geen id en kan je deze niet meenemen naar de "evaluatie" tabel. Vandaar mijn probleem.

Nu terwijl ik dit typ kwam ik wel met een oplossing maar ik weet niet of dit mogelijk is?
* Op moment van submit:
* Cursist insert'en in de cursist tabel, op dat moment wordt er een id aangemaakt
* Select op de cursist tabel met de waardes (naam, bedrijf, e-mail) nu met een id
* Join met antwoorden
* Insert in evaluatie tabel

Wie kan me een duw in de juiste richting geven?

Acties:
  • 0 Henk 'm!

  • phex
  • Registratie: Oktober 2002
  • Laatst online: 17-09 09:59
Je zou alle data in een sessie kunnen opslaan totdat je het hele formulier hebt doorlopen.

Zo hoef je pas een cursist aan te maken aan het eind.

Acties:
  • 0 Henk 'm!

  • Senaxx
  • Registratie: December 2010
  • Laatst online: 15:34
phex schreef op dinsdag 13 september 2011 @ 14:22:
Je zou alle data in een sessie kunnen opslaan totdat je het hele formulier hebt doorlopen.

Zo hoef je pas een cursist aan te maken aan het eind.
Nu ben ik zelf niet zo'n php / sql expert en zou graag hier wat meer uitleg over willen. Nu weet ik dat je sessie's kan aanmaken bij het openen van de pagina, en hier tijdelijk data in opgeslagen kan worden.

Betekend dit dan:
*sessie openen
*formulier invullen
*cursist aanmaken en "inserten"
*sessie informatie samenvoegen met cursist
*de rest inserten insert'en?

Ik ga iig even http://www.php.net/manual/en/book.session.php doornemen.

[ Voor 3% gewijzigd door Senaxx op 13-09-2011 14:49 ]


Acties:
  • 0 Henk 'm!

  • phex
  • Registratie: Oktober 2002
  • Laatst online: 17-09 09:59
Nou ik ben er misschien iets te vluchtig van uit gegaan dat je meerdere formulieren doorloopt.

Maar ik dacht dat jouw ongeveer situatie zo is:

Cursist info invullen
Stap 1
Stap 2
Stap 3
Controlleer
Opslaan

Tot en met stap 3 zou je dan het formulier in een sessie kunnen opslaan:
PHP:
1
$_SESSION['formData']['form1'] = $_POST;


Dat output je bij je controle stap.
Bij het opslaan maak je eerst een user aan, vang je de laatst geinserte id op, en vul je dan alle antwoorden in met het user id.


Maar misschien ben ik al te ver. Waarom mag je van te voren niet een cursist aanmaken?

Acties:
  • 0 Henk 'm!

  • Senaxx
  • Registratie: December 2010
  • Laatst online: 15:34
phex schreef op dinsdag 13 september 2011 @ 14:52:
Nou ik ben er misschien iets te vluchtig van uit gegaan dat je meerdere formulieren doorloopt.

Maar ik dacht dat jouw ongeveer situatie zo is:

Cursist info invullen
Stap 1
Stap 2
Stap 3
Controlleer
Opslaan

Tot en met stap 3 zou je dan het formulier in een sessie kunnen opslaan:
PHP:
1
$_SESSION['formData']['form1'] = $_POST;


Dat output je bij je controle stap.
Bij het opslaan maak je eerst een user aan, vang je de laatst geinserte id op, en vul je dan alle antwoorden in met het user id.

Maar misschien ben ik al te ver. Waarom mag je van te voren niet een cursist aanmaken?
De bedoeling van dit rapport is dat ik hier uiteindelijk weer een SAP Universe, en SAP BO Rapportages op gebouwd gaat worden. En het is bedoeling dat de trainers deze url geven na een training. De trainers hebben / krijgen niet de optie om gebruikers toe te voegen. En is van te voren nooit bekend hoeveel en welke mensen er allemaal bij een cursus aanschuiven.

Vandaar dat we dat zo open mogelijk willen houden. Ik zal eens gaan stoeien met die Sessie's en kijken of ik het dan voor elkaar krijg.

  • Senaxx
  • Registratie: December 2010
  • Laatst online: 15:34
Ik heb een proberen uit te zoeken hoe je dit met sessions voor elkaar moet krijgen, maar ik kom er nog niet uit. Als ik het een beetje probeer te begrijpen is onderstaande dan juist?

* Ik roep het formulier aan, en start de php sessie
* Cursist vult cursist info in
* Drukt op submit

Er gebeurt nu:
* SQL INSERT in de cursist tabel - Zodra er gesubmit wordt wordt deze in de table "cursist" gezet, en een id gegenereerd.
*SQL SELECT de regel die net gesubmit is op basis van cursist naam / bedrijf / email, en selecteer deze keer het id mee
*haal het form uit de sessie
*SQL INSERT het form met de id's en toelichting (de feedback) in de evaluatie tabel en nu met het id van de cursist erbij

Is dit zo ongeveer de juiste denk wijze?

[ Voor 3% gewijzigd door Senaxx op 14-09-2011 00:35 ]


  • Mod_Aap
  • Registratie: Oktober 2004
  • Laatst online: 12:20
Op deze manier ga je trouwens maar 1 evaluatie per cursus kunnen hebben en 1 een vraag per evaluatie. Lijkt me niet helemaal de bedoeling? Volgens mij moet je nog wat verder normalizeren.

Voor de rest netjes elke beantwoorde vraag in de db opslaan en niet in sessies en dan kan je dus ook meteen netjes de cursist aanmaken na het beantwoorden van de eerste vraag.

[ Voor 32% gewijzigd door Mod_Aap op 14-09-2011 00:41 ]


  • Senaxx
  • Registratie: December 2010
  • Laatst online: 15:34
Mod_Aap schreef op woensdag 14 september 2011 @ 00:38:
Op deze manier ga je trouwens maar 1 evaluatie per cursus kunnen hebben en 1 een vraag per evaluatie. Lijkt me niet helemaal de bedoeling? Volgens mij moet je nog wat verder normalizeren.

Voor de rest netjes elke beantwoorde vraag in de db opslaan en niet in sessies en dan kan je dus ook meteen netjes de cursist aanmaken na het beantwoorden van de eerste vraag.
Hoe moet ik het interpreteren dat je zegt "de cursist opslaan na aanmaken van de eerste vraag?" Het gaat zeg maar om naam_cursist, bedrijf_cursist en email_cursist die opgeslagen moeten worden in de cursisten tabel, zodat er een id aan gekoppeld wordt en ik deze kan opvragen om mee te nemen naar de evaluatie tabel.

Blijkbaar reikt mijn kennis niet ver genoeg en heb ik een iets groter duwtje nodig O-)

Maar wat is nu een gestructureerde manier om eerst de cursist op te slaan, zorgen dat je dat id terug krijg, zodat ik en ik de id kan meenemen naar de evaluatie tabel? Is het dan tussendoor mogelijk d.m.v. sessie data te gaan storen in de sql? Of hoe moet ik dat zien?

*EDIT

Ik denk dat ik de oplossing heb:

code:
1
2
mysql_query("INSERT INTO cursist(cursist_naam,cursist_bedrijf,cursist_email,cursist_titel) VALUES ('Test1', 'test2', 'Test-Email', 'Dhr.')");
$cursist_id = mysql_insert_id();


Hiermee krijg ik het ID terug van de laatst auto_increment id van de vorige query en dat is in dit geval de id van de cursist. Nu dacht dat hierbij eventueel een race condition zou kunnen onstaan, maar er wordt vermeld dat elke mysql_insert_id() voor elke unieke mysql connectie is. Dus mochten ze tegelijk op submit drukken dan krijg je toch de juiste ID terug voor de sessie. (correct me if i'm wrong)

[ Voor 21% gewijzigd door Senaxx op 14-09-2011 12:12 ]

Pagina: 1