How to make forms read-only? (cont.)

  • Profile Image
    Asked on November 02, 2017 at 12:40 PM

    [Note: this is a continuation of my previous thread which I was told was getting too long. And, I was asked to please start a new thread. For background discussion on the comments in this thread, please see "How to make forms read-only?"]



    Amy (and colleagues) -

    Apologies that this continuing thread has become so long. While I appreciate the timeliness of your Support team's ability to jump right in and help, whoever seems to be on duty, part of the problem it seems is a lack of continuity. Each of you have a slightly different understanding of what I'm trying to achieve, and how to go about it. Some of you have been very helpful and seemed to have offered a good direction on how to help me get there. And others, while well-meaning, have introduced more questions to the conversation than they provided answers.

    Nevertheless, the bottom line of what I'm trying to do is achieve a work-around for the lack of user registration (security) features on your forms. I would like to have my forms be read-only for the general public to view; just the first page for multi-page forms. And, I want to require them to register before being able to enter data on my forms to submit them. All of the previous ideas, questions and discussions from the previous thread have been about your colleagues and my attempts to accomplish these two feature goals.

    First, I'm not wedded to the idea of using a modal. As such, re-directing users from the modal (either by text instructions or link) only applies if a modal is used in conjunction with disabled pages. However, if there's a better way to disable pages and force users to a register form, I'm all ears!

    Second, I'm curious why you weren't able to get the URL "?readonly" method to work!?! I think I understand the iFrame explanation you provided in the previous thread. But, I have it working flawlessly on my end. (However, my Weebly support rep couldn't get it to work from their offices. Not sure why Kevin_G and I can get it to work, but other people can't!?!) Any idea why this discrepancy is possible? We began the ?readonly line of reasoning as a simplistic alternative to using conditional logic to disable each and every element on my forms. This could be extremely tedious and time consuming, with the number of lengthy forms I have on my site. (All though, it occurs to me as I write this that I might be able to disable just the first page's elements, and somehow the tabs, to achieve the same objectives. Haven't tested that theory.) So, are we now bailing on the whole "?readonly" theory?

    Three, there seem to be at least two questions yet to be answered. One is (assuming we decide to proceed with the ?readonly method, which admittedly is in doubt at this point), is there a way to force the URL to automatically add the ?readonly extension by default, pending validation of some sort of a registered user (either by numeric calculation, or some other work-around method)? And two, is there a better, more preferred way of accomplishing these difficult tasks with the simplest and most effective means possible that can't be easily defeated or bypassed?

    Thanks for you and your team's patience and dedication to helping me work through these crucial programming issues!

  • Profile Image
    Answered on November 02, 2017 at 01:24 PM

    Thank you for providing us a detail explanation. 

    I checked a discussion on your other thread but I am not sure on which form you are working on. The form you provided on your other thread is currently disabled. 

    If I understood your request correctly, you want to prevent your users to fill the form if they did not register first. Will your users use some other form to register? If so, I would suggest you to password protect your form. You can add a register code field at the top of your form and disable all fields with the conditional logic if the code is not correct or you can simply hide the next button on the first page. Register code field can be required and you can set 'Allow navigation without validation' option to NO for the Form Tabs widget to prevent your users to go to the next page if the required fields on the first page are not filled. 

    Regarding the 'Registration code' - You can provide it to your user once they register.

    Here is my demo form: 

    Register code is 12345

    Feel free to test it and clone it

    Will this work for you? 

  • Profile Image
    Answered on November 03, 2017 at 03:35 AM

    1.  Will I still need to use conditional logic to disable the individual form elements with this method?

    Yes, you will still need to use the conditional logic to disable the form elements.

    2.  Can users bypass the registration code in any way with this method?

    As mentioned on the other thread with ?readonly method the user can bypass it by removing it from the form URL. With the method I suggest, the user can not bypass the registration code. The user can only try to to find which code are you using to enable the disabled fields. Beside guessing the code, the user can create a JotForm account clone your form and inspect the conditions you set to disable the fields. However, you can prevent other users to clone your forms. This can be done on the Settings page of your account, by checking the privacy option 'Do not allow my forms to be cloned by other users.'.


    3.  Can the registration code be unique to each user without violating JotForm's Terms & Conditions?

    You can create a unique code for each user without violating JotForm's Terms & Conditions. Just do not use words such as password, pass or similar, for the code field label. Password fields are not allowed and our system may suspend your account if you the words like 'password' or 'pass code'. You can use the phrases like 'Register code', 'Access code', 'Security code'. 

    4.  Do you have a link that describes this "registration code" process?

    On my demo form, I used Enable/Require Filed conditional logic and Show/Hide Field conditional logic. 

    Smart Forms Using Conditional Logic

    This are the conditions that I set inside of my form. 



    You can use only the first condition. However, if you want to provide each user a unique code, you will have to set the same condition for each code and you will have to set it upfront.

    If you do not want to set multiple conditions, you can use conditional state 'Does not Contain' and list there all your codes. The codes have to be separated with a comma. Here is an example.


    Here is my new form: 

    Register codes are 111, 222 or 333. 

    Regarding the unique code - You can use Unique ID widget

    I am only not sure how will your users register. Will they use a separate form? If so, above provided method should work and you can use Unique ID widget on your registration form to create Unique ID, which you can use then use on your main form as 'Register code'. 

    Hope this will help. 

  • Profile Image
    Answered on November 03, 2017 at 01:41 PM

    Thanks BJoanna!

    Now I think we're getting somewhere. Your explanation seems clear and concise. And, I appreciate you thinking ahead to possible problems I might encounter, like needing the Unique ID widget. No, I wasn't originally planning to use a separate registration forms. I was planning to use my "Public" forms from the tabs on my Home page as registration forms. It seems maybe I'll have to modify my approach, since they'll have to obtain an access code from me before entering data. Is there a way I can preload their registration data on all available forms once they've registered, and not just one? Let me know, and I'll test some new procedures, then have my Beta testers try a demo before letting you know how it all works out.

    Thanks again!

  • Profile Image
    Answered on November 03, 2017 at 01:56 PM

    You're welcome. 

    I am not sure if I understood your latest question correctly.

    Is there a way I can preload their registration data on all available forms once they've registered, and not just one? 

    Do you want to pre-populate all of your forms based on the access code that you previously provided to our users? 

    That could be achieved with the Spreadsheet to Form widget but you will have to create a separate spreadsheet for each of your forms, assuming that the forms are not exactly the same. 

    Inside of this guide, you can find how to use Spreadsheet to Form widget:

    How to Use the Spreadsheet to Form Widget

    If I did not understand your question correctly, please explain in more details what exactly are you trying to achieve. 

  • Profile Image
    Answered on November 03, 2017 at 02:53 PM

    BJoanna -

    Your suggestion to use the "Spreadsheet to Form" widget may be part of the solution. I'm not sure!?! What I'm trying to do is eliminate repetitive data input by my users. Apparently, what I need to do now is create a standard registration form that's hidden from navigation, and that collects basic user information for all site users and all forms (i.e., name, number, address, email address, etc.).

    Next, I want the data submitted on the registration form to pre-populate the 6 Public forms (those visible from my Home page) so users don't have to keep inputting the same data for each form. (Very amateurish!) I've already coded my Public forms to pre-populate their respective Private forms (the extended member-only forms listed under the More tab) upon submission. How do you suggest I accomplish this?

  • Profile Image
    Answered on November 03, 2017 at 03:53 PM

    I have read your posts and I see you would like to create a secure login form. Has anyone suggested the E-mail Validator widget?

    May I ask why are you so concerned with security? JotForm is highly secure by default. However you can implement maximum security by implementing encrypted forms.

    Encrypted Forms and How to Use Them  

    Hope that helps!


  • Profile Image
    Answered on November 04, 2017 at 04:00 PM

    No disrespect Aubrey, but I'm not sure how my question about pre-loading data has anything to do with security!?! Yes, I'm trying to create "secure" forms. But, my security issues have more to do with work-arounds for the lack of ability to create membership registrations with JotForm, and solutions to prevent transmitting "secure" pre-load data in the clear via URLs. As such, I'm not sure where you were going with your response.

    If you look at my forms, you'll see that I already use the E-mail Validator widget. But, that has nothing to do with my question. And, while I appreciate your suggestion to use encrypted forms, that hasn't come up in any of these lengthy discussions, until now. And, I think it's possibly overkill for what I'm trying to achieve. I'd appreciate it if someone would please respond to my last question to BJoanna with a more pertinent response?


  • Profile Image
    Answered on November 04, 2017 at 05:01 PM

    I'll get back to your last question "Is there a way I can preload their registration data on all available forms once they've registered, and not just one?" that was handled by BJoanna.

    She provided one solution for you which is workable for what you need, what is important regarding that solution is that you will have to populate the Spreadsheet (used in Spreadsheet to Form widget) with new data all the time and upload it to the form.

    If the users are known in advance then that solution is perfect, you create their data in the Sheet, provide them with the key they will enter in the form and they're good to go. They only need to enter the key and the data will prepopulate.

    On the other hand, if you have new-comers all the time or even occasionally, then that could be a process, so I would like to present you another way, and that is creating prepopulate link with data from the user and giving them that link in the Autoresponder email. So what they have to do is go to their email click the link and the data will show in the form.

    Here is what I mean:

    1) Let's say we have this form: and we want to give to the submitter a way to prepopulate name and email with the mentioned link.

    2) You will go to Autoresponder email settings and just write something like this:

    1509828686Screen Shot 2017-11-04 at 9.54

    The link I made there is this one:[first]={name:first}&name[last]={name:last}&email={email}

    The yellow is your form ID, notice green and blue "name", in the image above, you will see that that's the name of the field "Name", then for Email field, the name is "email". Green is a field that we target with data, and blue is a source of the data. They are the same in this case since we want the data from the same form.

    So if I fill my form with this data:

    1509828981Screen Shot 2017-11-04 at 9.59

    The link I will receive in the email will be:[first]=John&name[last]=Smith&

    So, next time I'm filling the form, I just have to click that link and the data will show as I inputted initially.

    Similarly, you can do the above with other fields as well.

    Feel free to check the link above as well as my form:

    Let us know if that could work for you.


  • Profile Image
    Answered on November 04, 2017 at 10:39 PM

    HEY Nik -

    Thanks for you detailed explanation! I'm already using that scheme to prepopulate my long (Interview) forms from data input to my short (Inquiry) forms. What I was wondering is if that's the same method I'd use to integrate the prepopulate function with BJoanna's suggestion to use Access Codes, and possibly a random number generator for the codes on the backend. If so, how?

    I have several forms I was planning to link to check boxes on my new Registration form so that users can select which form(s) they'd like access to. (See my "Membership Registration Form".) I've tried to use conditional logic to send prepopulated URLs to the short forms they select. However, I'm not sure if I can send multiple forms this way for multiple selections using Autoresponders, as you suggest. Or, is there a better way to go about this? And, can I still send a "Thank You" page as well?

  • Profile Image
    Answered on November 05, 2017 at 03:29 AM

    What I was wondering is if that's the same method I'd use to integrate the prepopulate function with BJoanna's suggestion to use Access Codes, and possibly a random number generator for the codes on the backend. If so, how?

    I understand that you are using a different form for registration and send the membership number along with the prepopulated link to the other form.

    On the test registration form I have used the Unique ID widget to get the membership number in the format REG1, REG2, REG3.... and so on.

    Please refer to the guide below that can help you with using Unique ID.

    Once the registration form is submitted, the user shall be receiving an email with the link to the other form(s) with the prepopulated fields as below:[first]=test&name[last]=test&

    If the Registration code is not passing the rules in the condition, the fields shall be disabled.

    You may clone the forms to your account. Let us know if that works for you.


  • Profile Image
    Answered on November 05, 2017 at 09:53 PM

    Thanks for the detailed explanation Kiran, and for the working demo forms! I've begun implementing them. Quick question..... other than sequential numbers vs. random numbers, what's the difference between using the "Unique ID" widget as you suggest to generate User IDs, and the "Random Value Generator" widget (with Check for Uniqueness set to "Yes") that I'd already begun using?

  • Profile Image
    Answered on November 05, 2017 at 11:14 PM

    Quick question..... other than sequential numbers vs. random numbers, what's the difference between using the "Unique ID" widget as you suggest to generate User IDs, and the "Random Value Generator" widget (with Check for Uniqueness set to "Yes") that I'd already begun using?

    Unique ID widget generates the number in the sequential order and it will be generated only after submitting the form while the Random value generator widget generates the number when the form is loaded. The uniqueness of the Random value generator widget needs to be enabled from the widget wizard.

    Hope this information helps!