Inschrijfforumilier - max 320 personen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Geert Baas

Geert Baas

26/01/2017 10:46:10
Quote Anchor link
Goedemorgen,

Aangezien ik vrij nieuw ben met PHP, heb ik een aantal vraagjes..

Voor de kindervakantie week hier in de buurt zijn we bezig met het opzetten van een nieuwe website, de oude beheerder is hiermee gestopt neem ik het stokje over. Met Wordpress en HTML heb ik al redelijk wat ervaring.

Nu zitten wij met het volgende probleem, over een aantal maanden gaat de inschrijving weer beginnen voor de kindervakantie week. De inschrijving zal online verlopen. Er kunnen maximaal 320 plekken verdeeld worden, waarvan de laatste 20 op de reserve lijst geplaatst worden.

We hebben eerst zitten kijken om de inschrijving te laten gaan via WooCommerce, maar hier ga je een hoop gegevens missen (bijv. de naam, leeftijd etc. van de kinderen)

Nu is het idee dus ontstaan om het via een inschrijfpagina te doen, waar mensen al hun gegevens kunnen invullen (en die van de kinderen) die vervolgens in een database terecht komen.

Alleen nu is mijn vraag, hoe is dit te realiseren.
Met wat googelen ben ik al een heel eind gekomen, maar hoe zorg ik er voor dat er niet meer dan 300 normale inschrijvingen en 20 op de reserve lijst ga krijgen?

Ook is het zo dat vorig jaar binnen 20 minuten alle beschikbare plekken op waren.

Mocht iemand ideeën of tips hebben hoor ik het graag!

Met vriendelijke groet,
Geert
 
PHP hulp

PHP hulp

02/12/2024 17:42:29
 
Ward van der Put
Moderator

Ward van der Put

26/01/2017 11:13:33
Quote Anchor link
Geert Baas op 26/01/2017 10:46:10:
Ook is het zo dat vorig jaar binnen 20 minuten alle beschikbare plekken op waren.

Niet direct een technisch antwoord, maar als de vraag het aanbod zó overtreft, zouden jullie dan niet eerst wat aan het aanbod doen?
 
Adoptive Solution

Adoptive Solution

26/01/2017 11:25:17
Quote Anchor link
Wie het eerst komt, het eerst maalt.

En maak dat duidelijk!

Vertel ieder die zich heeft ingeschreven wat zijn volgnumner op de lijst is.

Ook als je nummer 600 bent.

In de loop der tijd zal er wel iemand afvallen, en dat schuift iedereen een plekje op.

En voer een sluitingsdatum in.

Dit probleem had je trouwens al in de tijd van voor de computer. Het denkproces blijft hetzelfde.
 
Geert Baas

Geert Baas

26/01/2017 11:32:24
Quote Anchor link
Dank allen voor het snelle aanbod.

Het aanbod kan helaas niet vergroot worden, er is gewoon geen ruimte voor hoe graag we ook zouden willen.
Is er niet iets mogelijk dat aanmelder 321 bijv geweigerd word omdat het helaas vol zit dan?

De sluitingsdatum zal bereikt worden wanneer alle inschrijvingen compleet zijn.

Mijn vraag is dus eigenlijk, is het mogelijk om een script te schrijven wat na de 320 aanmeldingen zichzelf sluit en een melding geeft dat het vol is?

Groetjes,

Geert
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/01/2017 11:37:46
Quote Anchor link
Uiteraard is dit mogelijk. Kwestie van een if en else. Je hebt een query nodig die het aantal aanmeldingen leest uit de database. zijn dit er meer dan 320 dan toon je pagina 'volisvol.php' en anders 'register.php'.
 
- Ariën  -
Beheerder

- Ariën -

26/01/2017 11:38:33
Quote Anchor link
Opzich kan je met MySQL primma tellen hoeveel mensen er zijn. Als dit groter is dan 320 zal het een melding geven. Of je tussen 320 en 340 de mensen een status van RESERVE kunnen meegeven, zodat je een reservelijst hebt.
 
Ivo P

Ivo P

26/01/2017 11:39:06
Quote Anchor link
speudo code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT COUNT(1) AS aantal FROM inschrijvingen

execute query

if(aantal < 320) :

  TOON FORM

else:
  TOON helaaspindakaas melding
endif;


En dan nog bij het opslaan controleren of de teller niet alsnog te hoog wordt.
Als namelijk 25 mensen de pagina openen op het moment dat de teller op 319 staat, dan zien zij allen je form.
Alleen de eerste die submit, is nog optijd


(optie: als teller de 300 nadert, melden bij je form dat je bijna aan de limiet zit)
 
Adoptive Solution

Adoptive Solution

26/01/2017 11:44:34
Quote Anchor link
Tel het aantal records en toon het op scherm.

Als het minder is dan 320, inschrijven kan.

Als het groter is dan 320, melding dat inschrijven gesloten is.

Wie net op dat kantelmoment inschrijft doet nog mee.

En waarom vastpinnen op dat getal? Laat iedereen zich inschrijven.

En sluit de inschrijving om middernacht. Vervolgens form niet meer laten zien.

Probeer het probleem op te lossen met nadenken.

Dan komen de instructies (in je gedachten) welke code je moet schrijven vanzelf.

Maar goed, ik heb makkelijk lullen. Ik ben nog uit de tijd dat er geen forums waren.
 
Geert Baas

Geert Baas

26/01/2017 11:54:17
Quote Anchor link
Hardstikke bedankt allen!

Geweldig, ik denk dat ik nu al een heel eind verder ben gekomen dankzij jullie hulp.
Ik ga zometeen eens even de optie's proberen zoals hierboven vermeld zijn.

Mocht ik nog wat problemen tegen komen zullen jullie het wel horen.

Voorals nog hardstikke bedankt voor de snelle en goede hulp!

Geert
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2017 12:59:06
Quote Anchor link
Als het zo storm kan lopen is de pseudo-code van Ivo mogelijk niet voldoende.

De twee opeenvolgende queries (een voor de controle of het maximum is bereikt, en een voor het wegschrijven van de inschrijving) vormen namelijk geen ondeelbare (atomaire) actie (en de pseudocode heeft het alleen over het tonen van het formulier, nog niet eens over de verwerking hiervan alwaar je deze controle opnieuw zult moeten uitvoeren). Het kan dan dus gebeuren dat er bijvoorbeeld 100 personen het formulier versturen als de teller op 319 staat. Allereerst wordt gecontroleerd of het maximaal aantal inschrijvingen nog niet is bereikt, mogelijk wordt dan voor een behoorlijk percentage geconstateerd (zeg 50 van de 100) dat het maximum nog niet is bereikt waarna de inschrijving wordt geregistreerd. Vervolgens heb je 369 inschrijvingen.

Dit probleem zou je op kunnen lossen met database-transacties. Wat je in wezen doet is het vergrendelen van de inschrijftabel vanaf het moment van de controle totdat de inschrijving is voltooid. Dit garandeert dat er op enig moment maximaal één inschrijving tegelijkertijd wordt weggeschreven nadat is geconstateerd dat er nog plek is. En dit garandeert op zijn beurt dat het maximum ook echt niet overschreden wordt.

Een alternatieve aanpak kan natuurlijk ook: je hebt een vaste inschrijfperiode en na sluiting verloot je de beschikbare plekken.

Ook zul je misschien moeten kijken naar hoe je kunt voorkomen dat mensen zich dubbel opgeven om zich zo van een plek te verzekeren.
Gewijzigd op 26/01/2017 13:19:55 door Thomas van den Heuvel
 
Geert Baas

Geert Baas

31/01/2017 17:37:56
Quote Anchor link
Nogmaals bedankt allemaal.

Ik heb het script van vorig jaar nog kunnen bemachtigen uit een oude back-up.
Helaas heb ik niet heel veel verstand van PHP.

Ik kan nergens vinden wanneer de inschrijving geopend word in de bestanden. Kan iemand mij hier misschien mee helpen?

Dit stukje kan ik dus nergens terug vinden :
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 // kleurtjes tonen
// OPEN                          CLOSE

  $o_year   = $contArray['sy'];    $c_year   = $contArray['sy'];
  $o_month  = $contArray['ism'];   $c_month  = $contArray['icm'];
  $o_day    = $contArray['isd'];   $c_day    = $contArray['icd'];
  $o_hour   = $contArray['ish'];   $c_hour   = $contArray['ich'];
  $o_minute = $contArray['ismin']; $c_minute = $contArray['icmin'];
  $o_second = 0;                   $c_second = 0;

  $openmsg  = 'De inschrijving opent op: <span class="red"> '.giveDate($o_year, $o_month, $o_day).' om '.$o_hour.':'.$o_minute.'u</span>';
  $closemsg = 'De inschrijving is gesloten op '.giveDate($c_year, $c_month, $c_day).' om  '.$c_hour.':'.$c_minute.'u';

  $closedate = mktime($c_hour, $c_minute, $c_second, $c_month, $c_day, $c_year, -1);
  $opendate  = mktime($o_hour, $o_minute, $o_second, $o_month, $o_day, $o_year, -1);
  $today     = time();
?>




Met vriendelijke groet,

Geert.
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 31/01/2017 20:33:53 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

31/01/2017 20:35:11
Quote Anchor link
Er moet dan nog wel meer code dan dit zijn, waarin je het bestand aanmaakt/opent en daar de bewerkingen in doet.

Maar een database is hier veel makkelijker voor. Dan kan je er meteen statistieken uit halen, en makkelijk tellen hoeveel mensen er zich hebben aangemeld.
Gewijzigd op 31/01/2017 20:35:27 door - Ariën -
 
Geert Baas

Geert Baas

01/02/2017 11:05:54
Quote Anchor link
Klopt, de code bestaat uit een bestand of 10 à 15. Die kan ik niet allemaal hier posten denk ik?
 
- Ariën  -
Beheerder

- Ariën -

01/02/2017 11:52:32
Quote Anchor link
Ik denk niet dat iemand hier in dit topic zin heeft om 15 codeblokken met honderden regels door te spitten.
Als ik zo kijk denk ik dat je beter de boel van begin af aan kan opbouwen en meteen met een database kan beginnen. Dan heb je een goed gestructureerde en overzichtelijke lijst met inschrijvers.

Of kan je kort vertellen hoe het wordt opgeslagen op dit moment?
Gewijzigd op 01/02/2017 11:54:43 door - Ariën -
 



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.