Page 1 of 1

CGBetterForms Input not sending array values.

Posted: Tue Jan 24, 2023 11:10 am
by WDJames
Hello,

I'm having an issue with CGBetterForms that is a bit difficult to explain. I have multiple inputs that share the same name which should return an array ie:

<input type="text" id="something1" name="something[]" value="">
<input type="text" id="something2" name="something[]" value="">
<input type="text" id="something3" name="something[]" value="">

However when a user submits the same value for those inputs, there is only one value on the resulting array. Also, when one or all of the inputs are left blank, it does not return an empty array.

Is there any way that blank values are registered as well as duplicates so the array can be something like this:

(" ", "something", " ")
("something", "something", "somethingelse")

I hope I've explained it clear enough.

Thanks in advance.

James

Re: CGBetterForms Input not sending array values.

Posted: Tue Jan 24, 2023 3:46 pm
by DIGI3
I think arrays are only supported in checkbox groups and multiselects, not text inputs. I haven't tested that, but I use checkbox groups and multiselects a lot and the arrays are always fine, and empty when no response is selected.

The module is no longer supported, but if you wanted this feature added you could probably sponsor it for the fork, SmartForms. You could also just make them separate text inputs then combine them into an array either via js on the form itself, or Smarty during processing.

Re: CGBetterForms Input not sending array values.

Posted: Tue Jan 24, 2023 4:46 pm
by WDJames
Thanks for getting back to me. Its odd because I've been using the text input's values as arrays on fields that would always have different values (eg names) and it works as expected (the values are added to the array). Just to try give a bit more background to what I'm needing it for:

I have a booking form that has the following fields:

1. Number of attendees - A text input which is attached to buttons that add and remove fields by cloning a div and its contents which are other fields (listed below).

2. Attendee Name - <input name="attendeename[]" value="" required>
3. Attendee ID - <input name="attendeeid[]" value="" required>
4. Additional Info - <input name="attendeeadd[]" value="">
5. Terms Checkbox - <input type="checkbox" name="attendeetc[]" value="checked">

So when a user clicks on the add button for "Number of attendees" the div containing fields 2 to 5 is cloned and when the remove button is clicked the last clone gets deleted. Upon submission, the arrays are collected and processed to be returned as "Name", "ID", "Info", "Terms" for each of the attendee.

However, when fields 4 and 5 are left blank (as they are not compulsory) the results fail altogether. I suppose what I'm after is for the blank fields to always return something even when left blank so it ends up as "Name", "ID", " ", " ".

Apologies for the long reply but I hope this explains it better.

Thanks,

James

Re: CGBetterForms Input not sending array values.

Posted: Tue Jan 24, 2023 4:50 pm
by DIGI3
Without modification to the module I think you'd just need to give them a value when empty, like x or 0 or something. Or, as I said, see if it's a feature that the developer of SmartForms could add then migrate to that.

Re: CGBetterForms Input not sending array values.

Posted: Tue Jan 24, 2023 4:55 pm
by WDJames
DIGI3 wrote: Tue Jan 24, 2023 4:50 pm Without modification to the module I think you'd just need to give them a value when empty, like x or 0 or something. Or, as I said, see if it's a feature that the developer of SmartForms could add then migrate to that.
I think thats the only option I can explore as I am not able to migrate to SmartForms (well not in the short term anyway). I'm hoping there is a way to give them a value when empty that doesn't use javascript. Thanks for your help.