[php] geavanceerd inschrijfformulier

Pagina: 1
Acties:
  • 593 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het maken van een inschrijfformulier voor cursussen. Op deze cursussen kunnen zich een willekeurig aantal cursisten inschrijven.

Nu wil ik graag dat ik niet van te voren hoef op te geven hoeveel cursisten ingeschreven moeten worden, maar dat ik binnen het inschrijfformulier een submit button hebt dat telkens een cursist aan het formulier toevoegd. Echter, dit wil ik bereiken zonder gebruik te maken van een tabel in de database en zonder extra bestand.

Ter voorbeeld:

-> invoer
voornaam: jan
achternaam: holland

>>submit

->invoervelden voor nieuwe cursist
->gegevens over cursisten die zich al hebben ingeschreven.

Het is dus een beetje à la de poll van PHPBB. Ik heb al in deze code gekeken, maar ik kon er niet veel wijs uit worden, hoe zij continu de variabelen blijven onthouden na het verversen. Een keer verversen lukt wel, dan staan namelijk de gegevens van de ingevoerd cursist erbij, maar de tweede keer staan alleen de gegevens van de tweede inschreven cursis erbij ipv de gegevens van beide cursisten.

Nu is mijn vraag: Kan iemand een tip van sluier lichten hoe ik dit moet gaan aanpakken? :? Volgens mij moet het wel mogelijk zijn gezien het gebeuren van PHPBB

Acties:
  • 0 Henk 'm!

  • Xboty
  • Registratie: September 2003
  • Laatst online: 04-09 13:18
je kunt de variabelen opslaan in ee sessie www.php.net/session_start , of je slaat ze op in een database, of roept ze in het tweede form weer aan dmv van
$_POST['variabele'];

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Xboty schreef op 23 October 2003 @ 09:14:
je kunt de variabelen opslaan in ee sessie www.php.net/session_start , of je slaat ze op in een database, of roept ze in het tweede form weer aan dmv van
$_POST['variabele'];
Voor de duidelijkheid: Het is dus 1 form op 1 pagina. Een database gebruiken voor tijdelijke waarden wil ik niet. Verder: Voor de cursisten zijn de 2 velden, namelijk voornaam en achternaam. Aan de hand van een submit button ("voeg cursist toe") wil dus onbeperkt cursisten kunnen toevoegen. Pas als alles ingevoerd moet er een andere submit gedrukt worden ("Inschrijven") en moeten alle cursisten en andere informatie naar de database geschreven worden.

[ Voor 6% gewijzigd door Verwijderd op 23-10-2003 09:23 ]


Acties:
  • 0 Henk 'm!

  • Xboty
  • Registratie: September 2003
  • Laatst online: 04-09 13:18
Verwijderd schreef op 23 October 2003 @ 09:22:
[...]

Voor de duidelijkheid: Het is dus 1 form op 1 pagina. Een database gebruiken voor tijdelijke waarden wil ik niet.
hoeft toch niet je kunt de variabelen aanroepen met $_POST['variabele'];
en ze dan in je tweede formulierje in een hidden field zetten, en zo meesturen met het tweede formulier :)

[ Voor 5% gewijzigd door Xboty op 23-10-2003 09:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Xboty schreef op 23 oktober 2003 @ 09:30:
[...]
hoeft toch niet je kunt de variabelen aanroepen met $_POST['variabele'];
en ze dan in je tweede formulierje in een hidden field zetten, en zo meesturen met het tweede formulier :)
Ik betwijfel nog steeds of dit gaat werken, maar ik ga het nogmaals proberen. Wordt vervolgd....

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Het is inderdaad doorgeven van de toegevoegde gebruikers via $_POST of $_GET of met behulp van een cookie of een sessie variabele. Aangezien niet iedereen cookies accepteert is het misschien handiger om het via $_POST te doen, maar dat is een ontwerpbeslissing die je zelf moet maken.

[ Voor 38% gewijzigd door esf op 23-10-2003 09:53 ]

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tot dusver krijg ik het nog niet voor elkaar met $_POST en/of $_SESSION :
Wat ik dus uiteindelijk wil is het volgende:

invoer gegevens_cursist1
>>submit
weergeven gegevens_cursist1
invoer gegevens_cursist2
>>submit
weergeven gegevens_cursist1
weergeven gegevens_cursist2
invoer gegevens_cursist3

enzovoorts.

Mssn wil iemand me op weg helpen... BvD

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Wat heb je tot nu toe al gemaakt? Het gaat er eigenlijk om dat je voor iedere persoon een hidden field aanmaakt in je form (evt. twee voor voornaam en achternaam). Die wordt dan doorgegeven met het form. Om een willekeurig aantal personen toe te laten moeten die hidden fields als name een array hebben. Dus <input type="hidden" name="naam[1]">Piet</input> etc. Het getal tussen de [ en de ] moet bij iedere persoon uniek zijn en bij gebruik van twee hidden fields moeten de nummers voor voor- en achternaam overeenkomen.
Bij het parsen van de $_POST variabelen lees je met een for() lus de array $_POST["name"] uit en maak je voor ieder item dat er in zit een hidden field als hierboven beschreven om het hele verhaal weer opnieuw te laten werken.

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
esf schreef op 23 October 2003 @ 10:48:
Wat heb je tot nu toe al gemaakt? Het gaat er eigenlijk om dat je voor iedere persoon een hidden field aanmaakt in je form (evt. twee voor voornaam en achternaam). Die wordt dan doorgegeven met het form. Om een willekeurig aantal personen toe te laten moeten die hidden fields als name een array hebben. Dus <input type="hidden" name="naam[1]">Piet</input> etc. Het getal tussen de [ en de ] moet bij iedere persoon uniek zijn en bij gebruik van twee hidden fields moeten de nummers voor voor- en achternaam overeenkomen.
Bij het parsen van de $_POST variabelen lees je met een for() lus de array $_POST["name"] uit en maak je voor ieder item dat er in zit een hidden field als hierboven beschreven om het hele verhaal weer opnieuw te laten werken.
Thx, ik ga weer verder proberen.....

Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat je hetvolgende als basisopzet kan gebruiken:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
$controle = 1;
$verstuurd = 0;
$add_cursist = 0;
if($_SERVER['REQUEST_METOD']=='POST'){
 if(isset($_POST['add_cursist'])){
  $add_cursist = 1;
 } elseif(isset($_POST['verstuur'])){
  $verstuurd = 1;
 }
 if($verstuurd == 1){
  foreach($_POST as $onderdeel => $waarde){
   if(substr($onderdeel, 0, 4) == 'req_'){
    if(empty($_POST['onderdeel'])){
     $controle = 0;
    }
   }
  }
 }
}
if($verstuurd == 0 || $add_user == 1 || $controle == 0){
 ?>
 <html>
 <head>
 <title>Voeg cursisten toe</title>
 </head>
 <body>
 <form action="<?= $_SERVER['REQUEST_URI']; ?>" method="post">
 <table>
 <?php
 for($i=1; $i<count($_POST['cursist']); $i++){
  ?>  
  <tr>
   <td colspan="2"><center><b>Cursist <?= $i; ?></b></center></td>
  </tr>
  <tr>
   <td>Voornaam:</td>
   <td><input type="text" name="cursist[]<?= $i; ?>[]voornaam" value="<?= $_POST['cursist'][$i]['voornaam']; ?>"></td>
  </tr>
  <tr>
   <td>Achternaam:</td>
   <td><input type="text" name="cursist[]<?= $i; ?>[]achternaam" value="<?= $_POST['cursist'][$i]['achternaam']; ?>"></td>
  </tr>
  <?php
 }
 if(!isset($i)){
  $i = 1;
 }
 ?>
  <tr>
   <td colspan="2"><center><b>Cursist <?=$i; ?></b></center></td>
  </tr>
  <tr>
   <td>Voornaam:</td>
   <td><input type="text" name="cursist[]<?= $i; ?>[]voornaam"></td>
  </tr>
  <tr>
   <td>Achternaam:</td>
   <td><input type="text" name="cursist[]<?= $i; ?>[]achternaam"></td>
  </tr>
  <tr>
   <td colspan="2"><center>
    <input type="submit" name="add_cursist" value="Voeg cursist toe">&nbsp;
    <input type="submit" name="verstuur" value="Klaar met invullen, verstuur alles">&nbsp;
    <input type="reset" value="Opnieuw">
   </center></td>
  </tr>
 </table>
 </body>
 </html>
 <?php
} elseif($verstuurd == 1 && $controle == 1 && add_cursist == 0){
 echo 'Het script is nu verstuurd. De cursisten zijn dus toegevoegd';
} else {
 echo 'Er is iets verschikkelijk fout gegaan, want er is niet bekend wat er nu moet gebeuren';
}
?>

Het script moet nog wel uitgebreid worden (bijv. als het script verstuurd is, dat gedeelte moet nog flink uitgebreid worden, maar verder kan je dit, denk ik, wel als basis gebruiken.
Ik wil nog wel zeggen dat het met de array's creeren vanuit de input-tag hoogstwaarschijnlijk niet goed werkt. Ik weet absoluut niet hoe je dat precies moet doen. Wat hier staat is dus een absolute gok, maar ik denk dat je er toch wel wat aan hebt.

Interessant probleem trouwens.

Groeten, Cybertinus

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 23 October 2003 @ 11:13:
Ik denk dat je hetvolgende als basisopzet kan gebruiken:

Het script moet nog wel uitgebreid worden (bijv. als het script verstuurd is, dat gedeelte moet nog flink uitgebreid worden, maar verder kan je dit, denk ik, wel als basis gebruiken.
Ik wil nog wel zeggen dat het met de array's creeren vanuit de input-tag hoogstwaarschijnlijk niet goed werkt. Ik weet absoluut niet hoe je dat precies moet doen. Wat hier staat is dus een absolute gok, maar ik denk dat je er toch wel wat aan hebt.

Interessant probleem trouwens.

Groeten, Cybertinus
Thx voor het script Cybertinus. Het is me meteen een stuk duidelijker geworden.
Het lijkt bijna een script request ;) . Ik zal het bestuderen en eventueel bepaalde constructies toepassen in mijn eigen script! :)

Acties:
  • 0 Henk 'm!

  • Xboty
  • Registratie: September 2003
  • Laatst online: 04-09 13:18
Verwijderd schreef op 23 October 2003 @ 11:22:
[...]

Het lijkt bijna een script request ;) .
geluk dat je nog niet ge-banned bent door een mod

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
  $firstname_array = array();
  $lastname_array = array();
  $firstname_array = $_POST['firstname'];
  $lastname_array = $_POST['lastname'];

  $length = count($lastname_array);
  echo "Informatie:\n";
  for ($i=0; $i<$length; $i++){
    echo "$lastname_array[$i]\n";
    echo "<input type=hidden name=lastname[$i] value=$lastname_array[$i]>"; 
  } 
  echo "ARRAY lengte: $length";


Hier bij horen de volgende input boxen:
HTML:
1
2
3
4
5
6
7
8
<tr>
        <td width="273">Voornaam:</td>
        <td><input type=text name="firstname[<?php echo "$GLOBALS[length]"; ?>]"></td>
    </tr>
    <tr>
        <td width="273">Achternaam:</td>
        <td><input type=text name="lastname[<?php echo "$GLOBALS[length]"; ?>]"></td>
    </tr>

Dit werkt maar 1 keer, dus wanneer ik 1 cursist invoer. Bij de invoer van een tweede cursist wordt de array niet groter en wordt er geen informatie meer getoond. Wie bied hulp?

[ Voor 20% gewijzigd door Verwijderd op 23-10-2003 13:45 . Reden: layout & info ]


Acties:
  • 0 Henk 'm!

  • Xboty
  • Registratie: September 2003
  • Laatst online: 04-09 13:18
zou je niet beter met een database kunnen werken ??

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Xboty schreef op 23 October 2003 @ 14:05:
zou je niet beter met een database kunnen werken ??
Ik heb een hekel om tijdelijke informatie in een soort van tijdelijke tabel op te slaan. Bovendien brengt dit ook weer de nodige vraagstukken met zich mee. Ik wil het gewoon op deze manier proberen te fixen. :)

Acties:
  • 0 Henk 'm!

  • Xboty
  • Registratie: September 2003
  • Laatst online: 04-09 13:18
Verwijderd schreef op 23 October 2003 @ 14:41:
[...]
Bovendien brengt dit ook weer de nodige vraagstukken met zich mee.
hmm dit gelukkig niet he :) ik weet het nu ook niet :S

Acties:
  • 0 Henk 'm!

  • Blue_Thunder_NL
  • Registratie: Februari 2000
  • Laatst online: 15-09 20:31
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<form method='post'>
<?
    if (!empty($_POST)) {
        $volgnr = $_POST['volgnr']+1;
        
        foreach ($_POST['cursisten'] as $key=>$val) {
            echo "CURSIST ".$key.":<br>";
            echo "<input type='hidden' name='cursisten[".$key."][fname]' value='".$val['fname']."'>";
            echo "<input type='hidden' name='cursisten[".$key."][lname]' value='".$val['lname']."'>";
            echo $val['fname']." - ".$val['lname']."<hr>";
        }               
    } else {
        echo "<input type='hidden' name='volgnr' value='0'>";
        $volgnr = 0;
    }
?>
    <input type='hidden' name='volgnr' value='<?=$volgnr?>'>
    Voornaam:   <input type='text' name='cursisten[<?=$volgnr?>][fname]'><br>
    Achternaam: <input type='text' name='cursisten[<?=$volgnr?>][lname]'><br>
    <input type='submit' value='test'>
</form>


Zoiets zou moeten werken, maar volgens mij lijkt het heel veel op wat je zelf ook al had gedaan. Kloppen die $_GLOBALS vars wel? Bekijk anders de html-source eens nadat je 1 cursist heb toegevoegd.. Is je index dan wel opgehoogd?

Ik wil zoveel, maar ik doe zo weinig


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Blue_Thunder_NL schreef op 23 oktober 2003 @ 16:01:
Zoiets zou moeten werken, maar volgens mij lijkt het heel veel op wat je zelf ook al had gedaan. Kloppen die $_GLOBALS vars wel? Bekijk anders de html-source eens nadat je 1 cursist heb toegevoegd.. Is je index dan wel opgehoogd?
Ja die $_GLOBALS vars kloppen volgens mij wel. De lengte van de array gaat bij de eerste invoer naar 1 toem dus dit klopt ook. De index gaat van firstname[0] naar firstname[1] (de lengte van de array, want een array begint bij 0). Het gaat dan dus ook bij de eerste invoer wel goed, maar bij een tweede invoer wordt de lengte van de array niet verhoogd en wordt er geen informatie uit de array meer getoond.
Pagina: 1