Stel ik heb een formulier met 3 velden, maakt opzich niet uit wat voor veld het is.

Het formulier mag alleen verstuurd worden als er maar liefst 1 of meerdere zijn ingevuld/geselecteerd.
Hoe doe ik dat?
Het maakt dus niet uit welke geselecteerd zijn, als het maar minimaal 1 is?
Je kunt toch gewoon een controle doen? Niet getest.
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(isset($_POST['veld_1'],$_POST['veld_2'],$_POST['veld_3']) && (trim($_POST['veld_1'] != "") || trim($_POST['veld_2'] != "") || trim($_POST['veld_3'] != "")) {
echo 'Minimaal een van de velden is ingevuld.';
}
}
?>
Of je kan de formulier-elemrnten in de array ook tellen met count(). Dan hoef je niet te hardcoden ;-)
Jorn Reed op 19/02/2020 03:59:50
ingevuld/geselecteerd.


Dit impliceert al twee verschillende validatieregels:
- een regel waarbij een veld simpelweg "niet leeg" is, wat dat ook moge zijn
- een regel waarbij een waarde uit een lijst van toegestane waarden is geselecteerd

Ik vind het sowieso een beetje een raar criterium, dat ten minste één ingevuld veld al voldoet. Doorgaans moet de validatie van alle velden succesvol zijn om formulierinvoer te accepteren. Want hoe verwerk je dit verder? Verwerk je enkel het veld dat goed was ingevuld?

Maar goed, als dat is wat je daadwerkelijk wilt, dan zou je het aantal succesvolle validaties kunnen tellen.

Maar wat "succesvol" is hangt dus van het type invoer af en wat jij beschouwt als "acceptabele invoer".

Ben ik toch benieuwd waarom het formulier zo in elkaar zit, waar het zo zou moeten werken, en wat je hiermee denkt te bereiken?
Kan natuurlijk ook iets van een poll zijn die je aanmaakt, of een enquête met meerdere aantwoorden waarvan je minimaal iets moet invoeren. Ben benieuwd....
Mja, maar zouden dat soort zaken niet nog steeds onder één "veld" gegroepeerd zijn? Die heten toch doorgaans allemaal hetzelfde? Dus dan zou nog steeds alles gevalideerd moeten zijn, zelfs als je een "niet van toepassing" keuze hebt ofzo, die is dan nog steeds ingevuld.
Maar goed... Om even in te haken op de vraag van de topicstarter:


    <form action="" method="POST">
        Keuze 1: <input type="text" name="keuze[]"><br>
        Keuze 2: <input type="text" name="keuze[]"><br>
        Keuze 3: <input type="text" name="keuze[]"><br>
        <input type="submit" name="submit" value="Verstuur!"><br>
        
    </form>
<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
	$arrayCleaned = array_filter($_POST['keuze']);
    	echo "<pre>".print_r($arrayCleaned ,true)."</pre>";
}
?>

Dit stript de lege velden, zodat je uiteindelijk met count() op de $arrayCleaned kan tellen.

Ik zou eerst kijken naar wat je precies probeert te doen met het formulier, en zien of je dit niet op een andere manier aan kunt vliegen, op een zodanige manier dat je voorkomt dat het merendeel van je formulier mogelijk niet is ingevuld.

Dit (aanpak TS) lijkt mij gewoon de verkeerde insteek, omdat je dan op een niet-/quasi-deterministische manier moet gaan beoordelen of je de invoer doorlaat of niet.

Tenzij je de combinaties die zijn toegestaan op een of andere manier volledig vastlegt. Maar ook dat lijkt mij een gekunstelde oplossing. Als je al deze problematiek simpelweg kunt voorkomen door je formulier anders op te zetten dan zou je dat gewoon moeten doen omdat dat de simpelste oplossing qua code levert.

Maar de topicstarter heeft niet verduidelijkt waarom deze opzet noodzakelijk zou zijn / er geen andere insteek mogelijk is.

Ik kijk liever eerst naar de aanpak voordat ik een oplossing formuleer.
Laten we eerst maar even horen wat de TS precies wilt, want misschien is het toch de juiste insteek of het helpt het hem op weg.

Sorry voor de laatste reactie. Het is de bedoeling dat ik bijvoorbeeld 3 velden heb, het gaat hier om een opleidingscentrum. Er is 1 inschrijvingsformulier. Je kunt je op de opleiding voor 3 soorten inschrijven (cursus, workshop, opleiding). Het kan dus zijn dat je een workshop kiest, maar bijvoorbeeld geen cursus of opleiding. Dan wil ik dat het formulier nog steeds verstuurd kan worden ondanks dat je dan bijvoorbeeld 2 velden leeg hebt gelaten.

[size=xsmall]Toevoeging op 24/02/2020 16:16:12:[/size]

Stel ik gebruik die manier van arrays in de inputs, zou ik dan ook ervoor kunnen kiezen dat als je een opleiding kiest, dat er in de php komt te staan `opleiding: Pedicure`. Dus dat het type van de opleiding meegegeven word via de array waardes, zonder dat ik het er hardcoded in hoef te zetten.

Reageren