I'm using snippets with formidable forms, see relevant code below, which should trigger an error (and used to!)
I have verified that "$errors['deadline']" IS populated (see my commented out echo statement)
But, the error handling is not kicking in. Any ideas out there?
I already emailed Formidable support and they sent me here.
Thanks for your help,
Roger
===============================================
add_filter('frm_validate_entry', 'validate_my_form', 20, 2);
function validate_my_form($errors, $values){
if ($values['form_id'] == 7){
.
.
.
if ($deadline == "Y") {
$errors['deadline'] = '<strong style="font-size:1.1em;">The deadline for this application has passed</strong>';
}
} // end form id = 7
// echo "Error: " . $errors['deadline'];
return $errors;
}
Where is the variable that defines $deadline to be able to check for "Y"?
I set that in previously called php code. I know that it does get set since I displayed the contents of $errors['deadline'], and it had been filled in with the msg I set.
Note: I left out most of the body of code to simplify your review.
RW
I had the same question as Bobby and then figured the "..." meant you left code out. I suggest pasting the full code somewhere such as paste2.org and posting the link.
OK, If you want to see the code, here it comes. Not sure how much it will help, tho...
Start your code here:
add_filter('frm_validate_entry', 'validate_my_form', 20, 2); function validate_my_form($errors, $values){ if ($values['form_id'] == 7){ $email = wp_eMember_get_user_details("email"); include "/home/customer/www/nepta.com/public_html/mysql_connect.php"; $recital = $_POST['item_meta']['448']; // if today is between Jan 1 and before March 2, renew date must be lastyear-0101 thru lastyear-09-30 // If today is betweeen Oct 15 and Dec 31,t then renew date must be thisyear-0101 thru this year-09-30 $today = date("Ymd"); $thisyear = date("Y"); $lastyear = $thisyear - 1; $JanDate = $lastyear . "-01-00"; $OctDate = $lastyear . "-10-01"; $JanDate2 = $thisyear . "-01-00"; $OctDate2 = $thisyear . "-10-01"; // Set and check deadlines $dlj1 = "20221211"; $dlj2 = "20221225"; $dlint1 = "20230101"; $dlint2 = "20230108"; $dlcomjz20 = "20230115"; $dlens = "20230305"; $dlsen = "20230208"; $dlfrei = "20230319"; $dlham = "20230326"; $dladult = "20230305"; $dlhalloween = "20221006"; $dlmushope = "20221023"; //Get date parms here $today1 = date("md"); $roger = "About to call editdata"; include "/home/customer/www/nepta.com/public_html/members/editData.php"; // Set and Check Oversubscription include "/home/customer/www/nepta.com/public_html/members/teacherchk.php"; // Return Errors if ($deadline == "Y") { $errors['deadline'] = '<strong style="font-size:1.1em;">The deadline for this application has passed</strong>'; } if ($overlimit == "Y") { $errors['overlimit'] = '<strong style="font-size:1.1em;">You have already reached your student limit</strong>'; } } // end form id = 7 // echo "Error: " . $errors['deadline']; return $errors; }
I still don't see $deadline being declared with a default value prior to the check of if ($deadline == "Y") {
That value is being set in editData.php.
Please note, I have already verified that $deadline is being set to "Y", and that $errors['deadline'] is indeed being populated.
Note the commented out echo line. When activated, it showed the error msg. So, I know all my code is working.
Maybe its a plugin conflict???
RW
I have to ask the boring questions, right?!? 🙂
Is "validate_my_form" being declared for any other function?
At least for me, this is going to be really hard to debug "at a distance". If you want to pay someone to debug, I would hope someone could do that. Otherwise, the only things I can think of are
1. Manually set $errors to something like $errors['xxx] = 'XXX' to eliminate the possibility that the HTML is messing something up.
2. Verify you have no other frm_validate_entry that's being run and overriding it.
3. Check your form settings for something odd
4. Check the java console for an error
5. Turn error checking on and check your WP log for errors.
Thank you for all your input. So, I deactivated the 2 snippets that were using the same function (frm_validate_entry) and it worked fine. So, now that we've narrowed down the problem, how do I activate these 2 snippets and be sure they all work? I have already shared the snippet in question. I will display the other 2 below and perhaps one of you can see my error.
add_filter('frm_validate_entry', 'validate_username6', 20, 2); function validate_username6($errors, $values){ if ($values['form_id'] == 6){ $dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); //Check connection if (mysqli_connect_errno()) { echo 'Could not connect to MySQL: ' . mysqli_connect_error() ; } mysqli_select_db ($dbc, DB_NAME ); $memberdb = "wphq_wp_eMember_members_tbl"; $user = $_POST['item_meta']['765']; $email = $_POST['item_meta']['173']; $check = mysqli_query($dbc,"SELECT * FROM $memberdb WHERE email = '$email'"); $rowcount = mysqli_num_rows($check); if ($rowcount != 0) {// email has been found - error $errors['my_error'] = 'This email already exists.'; return $errors; } $check = mysqli_query($dbc,"SELECT * FROM $memberdb WHERE user_name = '$user'"); $rowcount = mysqli_num_rows($check); if ($rowcount != 0) {// user name has been found - error $errors['my_error'] = 'This user name already exists.'; return $errors; } } }
/* Validate email address exists */ add_filter('frm_validate_entry', 'validate_email27', 20, 2); function validate_email27($errors, $values){ if ($values['form_id'] == 27){ $dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); //Check connection if (mysqli_connect_errno()) { echo 'Could not connect to MySQL: ' . mysqli_connect_error() ; } mysqli_select_db ($dbc, DB_NAME ); $memberdb = "wphq_wp_eMember_members_tbl"; // $user = $_POST['item_meta']['741']; $email = $_POST['item_meta']['772']; $check = mysqli_query($dbc,"SELECT * FROM $memberdb WHERE email = '$email'"); $rowcount = mysqli_num_rows($check); if ($rowcount == 0) { // email has not been found - error $errors['my_error'] = 'This email does not exist.'; return $errors; } } }
My guess is that the other two functions don't return $errors as a default, so when the code drops through, nothing is returned. My suggestion is to put them all in one function, like this https://paste2.org/vyDHvLfP and that will make debugging a lot easier. And make sure to always return $errors.
Thank you. Good suggestion...that seemed to do it.
Staging site working fine, Now I'll move to Live site.
Thanks again,
Roger
Big Thank You to Rob for his invaluble help in diagnosing and fixing this issue. I'm very glad we have this forum since the Formidable Support team offers very limited support.
When I get a chance, I will probably rewrite my other snippets similarly to this new one, thus avoiding future "conflicts".
And if you are comfortable in doing so, write up a post in the appropriate forum sharing your code and what it does such that it might help someone else.
Not sure where else to post this, but Rob sent me a perfect example:
Please login or Register to submit your answer