Form Submissions Not Saving: Diagnostic PlaybookPRO
“My form isn’t saving” is the #1 support ticket class for every form plugin, but the phrase covers very different problems with very different fixes. This page walks through the six-step check that tells you exactly which one you’re hitting, then maps each symptom to its root cause and fix.
Open FormForge > Entries in a second browser tab. If your test submission is at the top of the table, the form IS saving; you have a downstream problem (missing notification, missing file, wrong redirect) that’s separate from “not saving.” Jump to the downstream problems section below. If the entry is NOT there, the submission failed before the save step; work through the diagnostic below.
The six-step check from click to Entries table
Every FormForge Pro submission goes through the same six checkpoints between the visitor clicking Submit and the entry landing in the database. Failures at each step surface differently, and identifying the specific step where things break points at the specific fix.
The Submit click triggers a JavaScript AJAX request
FormForge submits via AJAX to wp-admin/admin-ajax.php. If jQuery isn’t loaded, the FormForge script errored out before running, or a plugin conflict blocks the click handler, nothing happens on click. Symptom: click does absolutely nothing, no spinner, no error, no message.
The server checks the security nonce
FormForge verifies the nonce embedded in the form matches the one WordPress issued when the page rendered. Expired or missing nonces reject here. Symptom: visitor sees the error message “Security verification failed.”
The server loads the form and checks it’s still active
If the form was deleted or set to inactive between page render and submission, the server rejects. Symptom: “Form not found or inactive.”
The server runs spam checks and validation
Honeypot, reCAPTCHA or Turnstile (whichever is configured), then per-field validation (required, email format, custom rules). Symptom for spam: “Spam detected.” Symptom for validation: “Please correct the errors below” with red-bordered fields inline.
The server runs any payment processing and permission checks
Stripe or PayPal payment verification runs here if a payment field is present. Per-user and per-IP submission limits fire here too. Symptom: payment gateway’s specific error message, or “You are not allowed to submit this form.”
The server inserts the entry into the database
The final step: FormForge writes the row into its entries table. Failures here are almost always a corrupt or missing table (unusual outside a botched migration). Symptom: “Failed to save entry.”
If every checkpoint passes, the visitor sees the success message and the entry appears at the top of FormForge > Entries. Anywhere something breaks, the specific message tells you which step to focus on.
Symptom-to-fix map
| What the visitor sees | Root cause | Fix |
|---|---|---|
| Click Submit and nothing happens | JavaScript error, jQuery missing, plugin conflict | Open browser console, look for red errors, deactivate other plugins one at a time |
| “Security verification failed” | Expired or missing nonce, usually because the page was cached or left open for more than 24 hours | Hard-refresh the page; exclude the form’s embed page from page caching |
| “Form not found or inactive” | Form deleted or deactivated after the page rendered | Reactivate the form in FormForge > All Forms |
| “Spam detected” | Honeypot was filled (bot detected), or reCAPTCHA / Turnstile verification failed | For legitimate submissions blocked: confirm the reCAPTCHA / Turnstile widget renders on the form (visible v2, invisible v3 or Turnstile). Verify the site + secret keys in FormForge > Settings match the domain you’re submitting from. Disable other plugins that might be pre-filling the honeypot field |
| “Please correct the errors below” but every field looks filled | A required field is failing validation somewhere, usually a conditionally-hidden required field | Scroll the form for red-bordered fields; on multi-page forms FormForge auto-navigates to the erroring page. Uncheck Required on any conditionally-hidden field |
| Form spins forever, no message | AJAX request never returned: firewall block, PHP fatal, execution timeout | Open browser Network tab, look at the admin-ajax.php request status: 403 = firewall, 500 = PHP fatal, hangs then times out = execution limit |
| Payment gateway error (Stripe or PayPal) | Card declined, payment auth failed, or gateway keys misconfigured | Read the gateway’s specific error text; for setup issues see the Stripe Integration doc |
| “You are not allowed to submit this form” | Per-user or per-IP submission limit reached, or the form is gated to logged-in users only and the visitor is logged out | Adjust submission limits in the form’s Advanced settings, or share the form’s login requirement with the visitor |
| “Failed to save entry” | Database write failed. Almost always because the FormForge Pro entries table is missing (rare, usually after a botched migration or a manual database change) | Deactivate then reactivate FormForge Pro from Plugins. Activation runs a CREATE TABLE IF NOT EXISTS pass that re-creates any missing tables without touching existing data. If the tables ARE present and inserts still fail, that’s a deeper wpdb issue: contact support with your wp-content/debug.log |
Diagnostic recipes for the three trickiest symptoms
Click Submit and nothing happens
This is the most confusing symptom because there’s no error message to work from. The AJAX call never even fired. Two most common causes: jQuery isn’t loaded on the page, or another plugin threw a JS error before FormForge could bind its submit handler.
Diagnostic steps:
- Right-click the form, choose Inspect, open the Console tab. If it’s already full of red-text errors, that’s the culprit. Copy the first error message; if it names a specific plugin’s JavaScript file, that plugin is the conflict.
- In the console, type
typeof jQueryand press Enter. If it returns"undefined", jQuery isn’t loaded on the page. This usually means a theme or optimizer plugin has removed it. Deactivate JS optimizers first (Autoptimize, WP Rocket’s JS deferral, LiteSpeed’s JS delay, ForgeCache’s script optimizer). Retry. - Try in an incognito window with browser extensions disabled. If it works there, an extension on the visitor’s browser is blocking the submit; not something you can fix on the site.
- If steps 1–3 don’t reveal the cause, deactivate every non-FormForge plugin, then reactivate them one at a time, retesting the form after each. The one that reintroduces the failure is your conflict.
Form spins forever and never resolves
The AJAX request left the browser but never came back. Three common causes: a firewall or security plugin is blocking the request, PHP crashed while processing the submission, or the request is genuinely just slow (large file upload, slow integration, slow email delivery).
Diagnostic steps:
- Open browser DevTools > Network tab. Filter for “admin-ajax”. Submit the form again and watch the request appear.
- If the request returns quickly with status 403: a firewall or security plugin is blocking
admin-ajax.phpfor logged-out users. Common culprits: Wordfence, GuardPress, Sucuri, Cloudflare’s WAF, host-level ModSecurity. Whitelist the endpoint or lower the challenge level for logged-out visitors. - If the request returns with status 500: PHP crashed. Enable
WP_DEBUGandWP_DEBUG_LOGinwp-config.php, submit again, then checkwp-content/debug.logfor the fatal error. Common causes: missing PHP extension, custom code in a hook throwing an exception, memory-limit exhaustion on large forms. - If the request hangs and eventually times out with a browser error: the submission is genuinely slow. If your form uploads large files, run a hosted integration (Zapier, Salesforce, Mailchimp), or generates a PDF, the request can exceed PHP’s
max_execution_time(default 30 seconds). Raise the limit via host support or aphp.iniedit, or offload the slow work to a background job.
“Please correct the errors below” but every field looks filled
The server-side validator caught something, but the field with the error isn’t visually obvious. Two common causes: a required field on a page you didn’t look at, or a required field hidden by conditional logic.
Diagnostic steps:
- On multi-page forms, FormForge auto-navigates to the page with the errored field on submit. Look for the field with the red border and inline error message. If the page didn’t change, scroll top to bottom looking for red highlights.
- If you find a required field that’s currently hidden by conditional logic, that’s the cause. The server enforces Required regardless of the field’s visibility state. Edit the form, open that field, uncheck Required, save. Or restructure so the field isn’t hidden when the visitor submits (see the Conditional Logic gotchas for the safe pattern).
- If no field looks red-bordered, open browser DevTools Console and inspect the AJAX response body. The response returns an
errorsobject with field-ID keys pointing to the failing fields. That tells you exactly which field ID failed, even if the visual highlight got missed.
Downstream problems (entry saved, but something after that didn’t)
If FormForge > Entries shows your test submission, the form itself is working correctly. Any remaining problem is downstream of the save step. These are separate issues with separate documentation.
| Symptom after successful save | Where to look |
|---|---|
| No notification email arrived | Email Notifications: Setup and Troubleshooting (SMTP is the fix) |
| Entry saved but the uploaded file is missing | File Uploads: Setup and Troubleshooting (usually a PHP upload_max_filesize issue) |
| Payment recorded but Stripe / PayPal didn’t charge | Stripe Integration (verify test / live keys and webhooks) |
| Zapier / Google Sheets integration didn’t fire | The integration’s dashboard task log will show the trigger; usually a webhook URL mismatch or field mapping error |
| Confirmation redirect went to the wrong page | Form settings > Confirmation tab; check the redirect URL or page selector |
FAQ
How do I check whether a FormForge Pro entry actually saved?
Go to FormForge > Entries in the WordPress admin. If your test submission appears at the top of the table, the entry saved successfully and the form is working. Any downstream issue (missing notification, missing file, wrong redirect) is a separate problem to diagnose. If the entry is not in the table, the submission failed before the save step and you need to debug the form itself, starting with the six-step check above.
I click Submit and nothing happens. Why?
Almost always a JavaScript problem. FormForge Pro submits via AJAX, so it needs jQuery and its own script to be loading correctly. Open the browser console (right-click the form, Inspect, Console tab), click Submit, and look for red-text errors. A common cause is a plugin or theme conflict that breaks jQuery, or an aggressive JS minifier that corrupts the FormForge script. Deactivate other plugins one at a time until Submit works, then reactivate the culprit and report it to support. Full diagnostic in the recipes section.
What does “Security verification failed” mean?
The form’s security nonce is invalid or expired. WordPress nonces last 24 hours by default, so if a page has been sitting open in a tab for more than a day, or a page cache is serving old HTML with an expired nonce embedded, the submission will fail this check. Fix: hard-refresh the form page (Ctrl+Shift+R / Cmd+Shift+R) so a fresh nonce loads, then submit again. If it happens systemically, exclude the form’s embed page from page-cache plugins so the nonce always renders fresh.
I filled every field but I still see “Please correct the errors below”. Why?
Server-side validation caught a field that failed a rule, but the field with the error might not be visible if it’s on a hidden page or hidden by conditional logic. On multi-page forms, FormForge auto-navigates to the page containing the errored field. On single-page forms, scroll through and look for any field with a red border and an inline error message. The most common cause is a required field marked Required but hidden by conditional logic, which the server still enforces. Either uncheck Required, or restructure so the field isn’t hidden when the visitor submits. See the Conditional Logic gotchas.
The form shows a loading spinner forever and never resolves. Why?
The AJAX request to admin-ajax.php never came back. Three common causes: (1) A security plugin or WAF is blocking the /wp-admin/admin-ajax.php endpoint for logged-out users. (2) A server-side PHP fatal error killed the request mid-flight and no JSON response came back. (3) A very slow submission (large file upload, slow email delivery, slow integration) exceeded the PHP execution time limit. Fix: open the browser Network tab, submit again, look at the admin-ajax.php request; if it returns 403 you have a firewall block, if it returns 500 you have a PHP error, if it hangs then times out you have an execution-time issue. See the recipes section.
I see the success message but the entry isn’t in FormForge > Entries. Is that possible?
In current FormForge Pro versions this is extremely rare because the success response only fires after the entry is created in the database. If you’re seeing this, the most likely cause is that you’re viewing the Entries table filtered by a different form; check the form-selector dropdown at the top of the Entries page. Second possibility: an integration or add-on plugin has hooked into the after-submission action and deleted the entry immediately after creation. Deactivate other FormForge add-ons one at a time to isolate.
The entry saved but no notification email arrived. What now?
That’s not a save problem, it’s an email delivery problem, and it’s the most common one there is. See Email Notifications: Setup and Troubleshooting for the full playbook. Spoiler: WordPress cannot deliver mail reliably on most shared hosts without an SMTP plugin. Install Royal SMTP or WP Mail SMTP and connect it to a real mail provider.
Can I see the raw AJAX response to help debug?
Yes. Open the browser DevTools, go to the Network tab, submit the form. Click the admin-ajax.php request in the list and view the Response tab. FormForge returns a JSON object with either success: true plus a data object with the confirmation message, or success: false plus a data object with the error message and (if validation failed) a data.errors object mapping field IDs to error strings. That response tells you exactly what the server thinks went wrong.