[PHP] Groot formulier verwerken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • koenevers
  • Registratie: Maart 2004
  • Laatst online: 15-04-2021
Afbeeldingslocatie: http://www.wvvz.com/form2.jpg


Bovenstaand formulier heb ik zoals je ziet voor elkaar gekregen. Mijn probleem zit hem echter in het verwerken.

Alseerst een deel van hoe het formulier is opgebouwd:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?

        for ($i = 1; $i <= 10; $i++)
        {

        echo '
        <tr>
        <td><input type="text" size="8" name="datum['.$i.']" value="'.$_POST['datum'][$i].'"></td>
        <td><input type="text" size="20" name="tegenstander['.$i .']" value="'.$_POST['tegenstander'][$i].'"></td>
        <td><center><input type="text" size="5" name="aanwezig['.$i.']" value="'.$_POST['aanwezig'][$i].'"></center></td>
        <td><center><input type="text" size="5" name="aanvang['.$i.']" value="'.$_POST['aanwezig'][$i].'"></center></td>
        <td><input type="text" size="25" name="opmerkingen['.$i .']" value="'.$_POST['opmerkingen'][$i].'"></td>
        </tr>';
        
        }

?>


Eerlijk gezegd heb ik geen idee hoe ik dit formulier op een correcte wijze kan verwerken. Wat ik tot op heden heb is dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<? 

        if ($_POST['toevoegen'] == 1) {


        echo '<tr>
        <td colspan="4">';

$error = false;
for($i = 0;$i < 10;$i++)
{
    if($_POST['tegenstander'][$i] == "")
    {
        echo "Je Je hebt niet alle tegenstanders ingevuld";
        $error = true;
        break;
    }
}
for($i = 0;$i < 10;$i++)
{
    if($_POST['datum'][$i] == "")
    {
        echo "Error";
        $error = true;
        break;
    }
}
if($error==false)
{
    // ga verder
}else
{
    // ga terug
}


        echo '</td>
        </tr>';
        }

?>



Dit stukje controlleert of alle velden zijn ingevoerd. Verder ben ik helaas nog niet gekomen. Kan iemand mij misschien een werkend voorbeeld sturen, of mij een beetje op weg helpen aan de hand van voorbeelden?

De bedoeling is dat deze wedstrijden uiteindelijk in een mysql database met de tabelnaam sm_2005_wedstrijden worden geplaatst.

Bedankt,

Koen Evers

[ Voor 45% gewijzigd door koenevers op 12-08-2005 00:30 ]


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 14:26

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
PHP:
1
mysql_query("INSERT INTO veldnaam(voornaam) VALUES('".$_POST['firstname']."')");

Je bedoelt gewoon inserten dus :) ?

[ Voor 22% gewijzigd door We Are Borg op 12-08-2005 00:23 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

koenevers schreef op vrijdag 12 augustus 2005 @ 00:19:
Kan iemand mij misschien een werkend voorbeeld sturen, of mij een beetje op weg helpen aan de hand van voorbeelden?
Werkende voorbeelden doen we hier niet aan, zoals ik in de sluitmessage van je vorige topic al zei. :)

Verder weet je al hoe je alle velden af moet gaan (want dat doe je al). Wat is dan het probleem eraan om alle velden af te gaan, en per iteratie van je loop een query uit te voeren die een record toevoegt/update in je database? :)

edit:
Trouwens, we hebben hier op GoT tags om code wat netter uit te laten zien. Zou je in het vervolg [php] of [code=taal]-tags kunnen gebruiken? En wil je daarmee ook je startpost even aanpassen om je code wat leesbaarder te maken? :)

[ Voor 20% gewijzigd door NMe op 12-08-2005 00:26 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • koenevers
  • Registratie: Maart 2004
  • Laatst online: 15-04-2021
uiteindelijk wel ja, maar er moet ook een controle plaatsvinden. Stel dat iemand bijvoorbeeld maar 8 wedstrijden invoert, dan insert hij 2 lege rijen in mijn tabel. Dat is niet de bedoeling.

Ik bedoel een soort werking net zoals PHPmyAdmin heeft bij het invoeren van tabellen

Iemand een idee?

edit:

Wat ik eigenlijk wil hebben is dat het script elke rij appart afgaat. Hij controlleert 1 rij op bepaalde IF statements. Zodra er ergens een fout wordt geconstateerd, dan een error. Mocht het formulier uiteindelijk helemaal correct zijn, dan invoeren.

Een voorbeeld van een IF statement welke ik wil gebruiken is zoiets:

ALS de hele regel leeg is, dan overslaan en de volgende regel checken.

Het script dat ik nu heb controlleert het hele form, niet per regel

[ Voor 46% gewijzigd door koenevers op 12-08-2005 00:29 ]


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

PHP:
1
if (!empty($_POST['veld'])) { }

:?

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
-NMe- schreef op vrijdag 12 augustus 2005 @ 00:25:
[...]

Werkende voorbeelden doen we hier niet aan, zoals ik in de sluitmessage van je vorige topic al zei. :)

Verder weet je al hoe je alle velden af moet gaan (want dat doe je al). Wat is dan het probleem eraan om alle velden af te gaan, en per iteratie van je loop een query uit te voeren die een record toevoegt/update in je database? :)
Zou het niet slimmer zijn om alle records in 1 keer toe te voegen? :)
Dynamisch een insert querie'tje bouwen, zodat je geen 10 inserts krijgt maar gewoon 1.

zoals dit:
code:
1
INSERT INTO sm_2005wedstrijden (kolommen) VALUES (waarden), (waarden) enz


Ik weet niet of het een drukbezochte pagina gaat worden, maar ik neem aan dat 1 query sneller is dan 10 :).

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Zet je code pls tussen [php]-blokken, en ident. Dat maakt het stukken leesbaarder.
uiteindelijk wel ja, maar er moet ook een controle plaatsvinden. Stel dat iemand bijvoorbeeld maar 8 wedstrijden invoert, dan insert hij 2 lege rijen in mijn tabel. Dat is niet de bedoeling.
In diezelfde loop zetten:
PHP:
1
2
3
if( $_POST['firstname'] != "" ) {
  mysql_query("INSERT INTO veldnaam(voornaam) VALUES('".$_POST['firstname']."')");
}

Acties:
  • 0 Henk 'm!

  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 20-09 21:58
koenevers schreef op vrijdag 12 augustus 2005 @ 00:25:
uiteindelijk wel ja, maar er moet ook een controle plaatsvinden. Stel dat iemand bijvoorbeeld maar 8 wedstrijden invoert, dan insert hij 2 lege rijen in mijn tabel. Dat is niet de bedoeling.

Ik bedoel een soort werking net zoals PHPmyAdmin heeft bij het invoeren van tabellen

Iemand een idee?
PHP:
1
2
3
if ($_POST[iets] != "") {
 //gooi in database
}


of bedoel je dat niet ?

//edit
koenevers schreef op vrijdag 12 augustus 2005 @ 00:25:
edit:

Wat ik eigenlijk wil hebben is dat het script elke rij appart afgaat. Hij controlleert 1 rij op bepaalde IF statements. Zodra er ergens een fout wordt geconstateerd, dan een error. Mocht het formulier uiteindelijk helemaal correct zijn, dan invoeren.

Een voorbeeld van een IF statement welke ik wil gebruiken is zoiets:

ALS de hele regel leeg is, dan overslaan en de volgende regel checken.

Het script dat ik nu heb controlleert het hele form, niet per regel
PHP:
1
2
3
foreach ($_POST as $key => $value) {
 //doe iets
}


moet volgens mij wel werken want $_POST is als het goed is een array :)

[ Voor 45% gewijzigd door Sv3n op 12-08-2005 00:35 ]

Last.fm
Films!


Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 14:26

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Simpel, check of de velden leeg zijn:

PHP:
1
2
3
4
5
If (!empty($_POST['veldX'])) {
//doe query
} else {
// niet query doen, want veld is leeg
}

[ Voor 5% gewijzigd door We Are Borg op 12-08-2005 00:29 . Reden: <? echo 'spuit 11'; ?> ]


Acties:
  • 0 Henk 'm!

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Sv3n schreef op vrijdag 12 augustus 2005 @ 00:28:
[...]


PHP:
1
2
3
if ($_POST[iets] != "") {
 //gooi in database
}


of bedoel je dat niet ?
Doe dan iig

PHP:
1
2
3
4
5
6
7
8
QUERY = "INSERT INTO sm_2005_wedstrijden (kolommen) VALUES "

if ($_POST[iets] != "") {
QUERY = QUERY & "(waarden)"
}
if ($i < 10) {
QUERY = QUERY & ", "
}


Ik ben niet echt een phpguru dus vergeef me de sytaxfoutjes :).

dat dan uiteraard in de loop en aan het eind de query executen.

[ Voor 14% gewijzigd door Mischa_NL op 12-08-2005 00:34 ]


Acties:
  • 0 Henk 'm!

  • koenevers
  • Registratie: Maart 2004
  • Laatst online: 15-04-2021
Dit laatste voorbeeld controlleert toch niet rij voor rij? Bij dit voorbeeld zou ik voor elke waarde een aparte IF statement moeten maken

PHP:
1
2
if (empty($_POST[''datum1] )) { echo 'datum 1 is niet ingevuld';}
elseif (empty($_POST[''datum2] )) { echo 'datum 2 is niet ingevuld';}


Dan krijg ik bijna 70 if statements

Acties:
  • 0 Henk 'm!

  • koenevers
  • Registratie: Maart 2004
  • Laatst online: 15-04-2021
Misha, kun je mij je laatste voorbeeld een uitleggen?
Wat gebeurd er daar precies...
Kun je dit scriptje ook voor mij in een loop zetten?

Bedankt!

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

koenevers schreef op vrijdag 12 augustus 2005 @ 00:35:
Dit laatste voorbeeld controlleert toch niet rij voor rij? Bij dit voorbeeld zou ik voor elke waarde een aparte IF statement moeten maken

PHP:
1
2
if (empty($_POST[''datum1] )) { echo 'datum 1 is niet ingevuld';}
elseif (empty($_POST[''datum2] )) { echo 'datum 2 is niet ingevuld';}


Dan krijg ik bijna 70 if statements
Hoe kom je ineens bij datum1 en datum2? Net had je nog arrays? (inputs met name datum[1] of gewoon datum[]). Wanneer je arrays gebruikt op die manier, kun je gewoon dit doen:
PHP:
1
2
3
4
5
foreach ($_POST['datum'] as $datum) {
  if (!isset($datum) && !empty($datum)) {
    //doe iets
  }
}

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • koenevers
  • Registratie: Maart 2004
  • Laatst online: 15-04-2021
Nme, zoals jij het doet zou ik het ook graag willen!
Alleen stel dat iemand maar 5 wedstrijden invoert, en de overige velden allemaal leeglaat...met jouw script krijg ik dan een error, want in jouw script moeten alle $datum velden ingevoerd zijn?

Acties:
  • 0 Henk 'm!

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$QUERY = "INSERT INTO sm_2005_wedstrijden (kolommen) VALUES "

for ($i = 0 ; $i < 10 ; $i++)
{
    if ($_POST[iets] != "") {

        $QUERY = $QUERY & "(waarden)"

        if ($i < 10) {
            $QUERY = $QUERY & ", "
        }
    }
}
?>


Iets als dat zou moeten werken.

edit/ php prefixed vars met een $, ff vergeten ;)

[ Voor 22% gewijzigd door Mischa_NL op 12-08-2005 00:44 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

koenevers schreef op vrijdag 12 augustus 2005 @ 00:42:
Nme, zoals jij het doet zou ik het ook graag willen!
Alleen stel dat iemand maar 5 wedstrijden invoert, en de overige velden allemaal leeglaat...met jouw script krijg ik dan een error, want in jouw script moeten alle $datum velden ingevoerd zijn?
Nee hoor, wat denk je dat isset() en empty() doen? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • koenevers
  • Registratie: Maart 2004
  • Laatst online: 15-04-2021
Misha, zou je jouw script in het "normaal nederlands" willen uitleggen?
Wat doet dit script precies?

Sorry mensen, ik heb ietsdergelijks nog nooit eerder hoeven maken.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

koenevers schreef op vrijdag 12 augustus 2005 @ 00:47:
Misha, zou je jouw script in het "normaal nederlands" willen uitleggen?
Wat doet dit script precies?

Sorry mensen, ik heb ietsdergelijks nog nooit eerder hoeven maken.
Het script van Mischa_NL is pseudocode en doet dus niets. Het daadwerkelijke invullen zul je alsnog zelf moeten doen. Alles wat hij doet is meerdere toekomstige records aan elkaar plakken en in één insert query zetten.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
koenevers schreef op vrijdag 12 augustus 2005 @ 00:47:
Misha, zou je jouw script in het "normaal nederlands" willen uitleggen?
Wat doet dit script precies?

Sorry mensen, ik heb ietsdergelijks nog nooit eerder hoeven maken.
Sorry dan, maar dit is toch redelijk basiskennis php. En geloof me, ik heb nog nooit met php gewerkt.

Maargoed. komtie: inclusief commentaar:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$QUERY = "INSERT INTO sm_2005_wedstrijden (kolommen) VALUES " //begin van query

for ($i = 0 ; $i < 10 ; $i++) // loop 10 keer (van 0 tot 10 met stappen van 1)
{
    if (!empty($datum)) { // als datum niet leeg is 

        $QUERY = $QUERY & "(waarden)" //zet de waarden die je in je db wilt hebben

        if ($i < 10) { // als dit niet de laatste loop is: zet een komma zodat we doorkunnen met de query
            $QUERY = $QUERY & ", " // kommatje plaatsen dus
        } // end if
    } //end if
}//end for
?>


Wat je dus uiteindelijk dit oplevert:

SQL:
1
2
3
4
5
6
7
8
9
10
11
INSERT INTO sm_2005_wedstrijden (kolommen) VALUES 
(waarden), 
(waarden), 
(waarden), 
(waarden), 
(waarden), 
(waarden), 
(waarden), 
(waarden), 
(waarden), 
(waarden)


Deze waarden zijn uiteraard de waarden die jij in je database wilt hebben, in de kolommen die je daarboven gezet hebt.

duidelijker als dit kan ik het niet maken.
Misschien is het verstandig om eens een tutorial op google te zoeken.

[ Voor 25% gewijzigd door Mischa_NL op 12-08-2005 01:00 ]

Pagina: 1