Verwerken van formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jules Kreutzer

Jules Kreutzer

07/09/2014 19:59:56
Quote Anchor link
Goede avond,

Ik zit met een probleem waar ik al enkele dagen over aan het denken ben. Ik ben bezig met een website waar mensen een soort van wedstrijd kunnen starten. Hiervoor moeten ze een aantal vragen invullen. Zo zijn er vragen die bij alle onderwerpen terug komen en en zijn vragen die specifiek zijn voor bepaalde onderwerpen.

De manier waarop ik de formulieren wil verwerken op dit moment is het volgende:
- Eerst selecteert de gebruiker een onderwerp en gaat hij verder naar de volgende pagina (step2.php);
- Op step2.php worden alle vragen geselecteerd die bij alle onderwerpen terug komen. Wanneer de gebruiker verder gaat, gaat hij naar de pagina step3.php;
- Op de pagina step3.php worden alle vragen getoond die specifiek zijn voor het onderwerp.
Wanneer deze vragen zijn ingevuld, moeten alle gegevens van de 3 formulieren worden opgeslagen in een database.

Aangezien dat de standaard vragen altijd gelijk zijn, is het makkelijk om de waarden hiervan toe te kennen aan een variabele. Maar de vragen voor een onderwerp kunnen verschillen in aantal, bv. voor het ene onderwerp 3 vragen en voor het andere onderwerp 5 vragen.

Het liefste wil ik alle antwoorden op vragen in een aparte variabele die ik dan doorgeef aan een functie die zorgt dat alles in een database komt te staan.

Nu is mijn vraag hoe ik dit het beste kan doen. Alle voorstellen zijn welkom en wanneer je een andere manier hebt wat volgens jou op een makkelijkere en/of snellere manier werkt hoor ik het graag!

Alvast heel erg bedankt!
 
PHP hulp

PHP hulp

26/04/2024 14:48:26
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/09/2014 23:19:20
Quote Anchor link
Ik neem aan dat de formulieren door middel van de POST methode verstuurd worden.

de ingevulde waarden kunnen in dat geval met $_POST[..] uitgelezen worden. $_POST is hier gewoon een array welke je met een foreach kunt doorlopen:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

foreach($_POST as $key => $value) {
    echo 'veld ' . $key . ' heeft de waarde ' . $value . '<br>';
}


?>
 
Jules Kreutzer

Jules Kreutzer

08/09/2014 07:57:05
Quote Anchor link
Klopt, formulieren worden inderdaad via de POST-methode verstuurd.

Op de plaats van de echo moet ik dan dus de waarde doormiddel van een function doorsturen?

De opbouw van mijn functions is dat ik de waarde meegeef, de sql query opbouw, dan de waarden doe binden en daarna alles doe uitvoeren. Kan ik dit ook toepassen bij jouw voorbeeld frank?

Moet ik het dan op deze manier doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach($_POST as $key => $value){
    NewGame($value);
}

?>


Nu ik dit typ merk ik dat het naar mijn mening niet gaat lukken omdat ik dan voor elke vraag de functie oproep.

Op kan ik dat doen en elke keer een nummer meegeven om zo de vragen met hetzelfde nummer aan elkaar te koppelen?

Hopelijk is het allemaal duidelijk wat ik hierboven heb getypt, alvast bedankt!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/09/2014 10:13:00
Quote Anchor link
In de plaats van de echo moet natuurlijk iets anders komen dat er voor gaat zorgen dat de waarden in de database worden weggeschreven.

Ik probeer het kwartje bij je te laten vallen..
Je hebt voor ieder veld in je formulier een name attribuut. Als je die 'name' nu eens gelijk maakt aan de kolomnaam in de database.. dan weet je dus welke kolom welke waarde dient te krijgen

gauw even een voorbeeldje in elkaar gezet. Je moet nog wel zorgen dat je fouten gaat afvangen, bijvoorbeeld als een kolomnaam niet bestaat.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

// Test array $_POST
$_POST = array('naam' => 'Frank', 'email' => '[email protected]');

// kolomnamen achter elkaar zetten met komma's er tussen
$columnnames = implode(', ', array_keys($_POST));

// alle $_POST variabelen in een nieuwe array met quotes er omheen
foreach($_POST as $value) {
    $values[] = "'" .  mysql_real_escape_string($value) . "'";
}


// waardes achter elkaar zetten met komma's er tussen
$values = implode(', ', $values);

// query opbouwen
$query = "INSERT INTO table_name (" . $columnnames . ") VALUES (" . $values . ")";

echo $query;


?>
 
Jules Kreutzer

Jules Kreutzer

08/09/2014 13:58:38
Quote Anchor link
Bedankt,

Ik wist niet helemaal zeker hoe ik de kolomnamen en waardes moest verwerken. Bovenstaande code lijkt me in ieder geval vrij logisch. Ik ga het straks eens proberen. Mocht het niet lukken laat ik het weten.

In ieder geval alvast heel erg bedankt Frank!!
 
Eddy E

Eddy E

08/09/2014 14:48:04
Quote Anchor link
Let op dat je de submit nu ook gaat opslaan.
Maar dat zal je waarschijnlijk niet in je database doen. En dus een foutmelding geven.

Daarnaast beveilig je nu wel de waarden, maar als ik een formulier verzend naar jouw verwerkscript, met als kolomnaam iets als onzin'); DROP TABLE table_name;, dan ben je dus alles mooi kwijt.
 
Jules Kreutzer

Jules Kreutzer

08/09/2014 15:08:56
Quote Anchor link
Natuurlijk, dat spreekt voor zich.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/09/2014 17:16:07
Quote Anchor link
Maak gewoon een zogenaamde whitelist aan met geldige kolomnamen en controleer voor ieder element in de $_POST array of deze in de lijst voorkomt. Zo niet dan sla je die niet op in de database.
 
Jules Kreutzer

Jules Kreutzer

08/09/2014 17:21:58
Quote Anchor link
Dat is nog niet een heel gek idee Frank, heb je een script dat je zou aanbevelen?
Bij een sneller google search kom ik op een script uit op de website codewall.

Iemand die ervaring heeft met whitelist systemen en een bepaald systeem kan aanraden?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/09/2014 17:42:35
Quote Anchor link
Je denkt te moeilijk Jules :-)

stel je hebt deze kolommen in de database: naam, email, telefoon.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// Test array $_POST
$_POST = array('naam' => 'Frank', 'email' => '[email protected]', 'verzenden' => '');

$whitelist = array('naam', 'email', 'telefoon');

foreach($_POST as $key => $value)
{

    if(in_array($key, $whitelist))
        $post[$key] = $value;
}


// $post bezit nu enkel geldige Postvariabelen.
print_r($post);

?>
 
Jules Kreutzer

Jules Kreutzer

08/09/2014 17:46:17
Quote Anchor link
Ahh, klopt inderdaad, ik denk te moeilijk na
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.