TSR Posted December 7, 2012 Share Posted December 7, 2012 Complete php newb here. I'm trying to run 3 different form validation scripts - one to validate the basic info fields (check if they're empty etc.) one to verify a credit card number, and the last one is a CAPTCHA. The validation scripts is on the same page as the form and are set to run when the submit button is clicked. The basic format is if validate1(parameters) { // display errors } else { $validate1pass = true; } if validate2(parameters) { // etc... } Where $validate1pass is declared at the beginning of my php code as false. The idea was for each function to set it's pass variable to true, so the form action (using post method) would check to see if validate1pass && validate2pass && validate3pass == true and if it is echo the location of my success page. Here's what happens - if there are any errors, everything works great and the page reports the them. However if the form is filled out perfectly, it just reloads. No error messages, and no data in the fields. The variables are apparently now all set to true, since clicking the submit button again, no matter what the form data is goes to my success page witch gets any data entered. Curious, I added an else argument in the form action line to send me to a non-existing page. I tried it again - entered data wrong, got corrected, entered it right and 404. I think the problem is that the button that trigers all my validation functions is the submit button, and it ends up trigering the form action first, which ends up being "". So is this 3 boolean variables approach completely wrong (in which case what would be a good alternative?), or can it be fixed? Would it be possible to make an invisible submit button and have my script trigger that one after the variables are set? Quote Link to comment https://forums.phpfreaks.com/topic/271706-boolean-variables-as-a-prequisite-to-form-action/ Share on other sites More sharing options...
Christian F. Posted December 7, 2012 Share Posted December 7, 2012 Show us the code. It sounds like you have some logic errors in your script, and we can't tell you what they are without seeing the actual code. Quote Link to comment https://forums.phpfreaks.com/topic/271706-boolean-variables-as-a-prequisite-to-form-action/#findComment-1398054 Share on other sites More sharing options...
TSR Posted December 7, 2012 Author Share Posted December 7, 2012 I kinda hoped to avoid it since the code'sa mess and parts of it being in Serbian don't exactly help, but here it goes. this is the form page <?php if (!defined('WEB_ROOT') || !isset($_GET['step']) || (int)$_GET['step'] != 1) { exit; } $errorMessage = ' '; ?> <script language="Javascript" type="text/javascript" src="funkcije/kupovina.js"></script> <script language="Javascript" type="text/javascript" src="funkcije/kartica.js"></script> <script type="text/javascript"> <!-- function load(){ rowCard.style.display == 'none'; rowBank.style.display == 'none'; } //--></script> <?PHP $valCCARD = false; $valCAPTCHA = false; $valinfo = false; $formaction = ""; require_once "formvalidator.php"; echo "<b> <center>"; class MyValidator extends CustomValidator { function DoValidate(&$formars,&$error_hash) { return true; } } if(isset($_POST['btnStep1'])) { $validator = new FormValidator(); $validator->addValidation("txtPaymentFirstName","req","Unesite ime narucioca"); $validator->addValidation("txtPaymentLastName","req","Unesite prezima narucioca"); $validator->addValidation("txtPaymentAddress1","req","Unesite adresu narucioca"); $validator->addValidation("txtPaymentPhone","req","Unesite broj telefona narucioca"); $validator->addValidation("txtPaymentState","req","Unesite zemlju narucioca"); $validator->addValidation("txtPaymentCity","req","Unesite grad narucioca"); $validator->addValidation("txtPaymentPostalCode","req","Unesite poštanski broj narucioca"); $validator->addValidation("txtShippingFirstName","req","Unesite ime uplatioca"); $validator->addValidation("txtShippingLastName","req","Unesite prezima uplatioca"); $validator->addValidation("txtShippingAddress1","req","Unesite adresu uplatioca"); $validator->addValidation("txtShippingPhone","req","Unesite broj telefona uplatioca"); $validator->addValidation("txtShippingState","req","Unesite zemlju uplatioca"); $validator->addValidation("txtShippingCity","req","Unesite grad uplatioca"); $validator->addValidation("txtShippingPostalCode","req","Unesite poštanski broj uplatioca"); if(isset($_POST['chkCard'])) { if (checkCreditCard ($_POST['CardNumber'], $_POST['CardType'], $errornumber, $errortext)) { $valCCARD = true; }else{ echo "<center>$errortext</center><br>"; // Display ERROR Type/Text } } else { $valCCARD = true; } // Get a key from https://www.google.com/recaptcha/admin/create $publickey = "6Lc5_NkSAAAAAM2LMamTTpiJWRymRTdp2PWQlLYh"; $privatekey = "6Lc5_NkSAAAAAOjOgMXwVMBXoQEaviNbb5nRpEms"; # the response from reCAPTCHA $resp = null; # the error code from reCAPTCHA, if any $error = null; # was there a reCAPTCHA response? if ($_POST["recaptcha_response_field"]) { $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) { echo "Uneli ste pogresan CAPTCHA kod."; } else { $valCAPTCHA = true; } } if($validator->ValidateForm()) { $valinfo = true; } else { $error_hash = $validator->GetErrors(); foreach($error_hash as $inpname => $inp_err) { echo "<center><p>$inp_err</p></center>\n"; } } } if ($valCCARD && $valCAPTCHA && $valinfo == 1) { $formaction = "kupovina.php?step=2"; } echo "</b></center>"; ?> <table width="550" border="0" align="center" cellpadding="10" cellspacing="0"> <tr> <td>Korak 1 Od 3 : Unesite podatke </td> </tr> </table> <p id="errorMessage"><?php echo $errorMessage; ?></p> <form action="<?php echo $formaction;?>" method="post" name="frmCheckout" id="frmCheckout"> <table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable"> <tr class="entryTableHeader"> <td colspan="2">Podaci o naručiocu</td> </tr> <tr> <td width="150" class="label">Ime</td> <td class="content"><input name="txtPaymentFirstName" type="text" class="box" id="txtPaymentFirstName" size="30" maxlength="50"></td> </tr> <tr> <td width="150" class="label">Prezime</td> <td class="content"><input name="txtPaymentLastName" type="text" class="box" id="txtPaymentLastName" size="30" maxlength="50"></td> </tr> <tr> <td width="150" class="label">Adresa</td> <td class="content"><input name="txtPaymentAddress1" type="text" class="box" id="txtPaymentAddress1" size="50" maxlength="100"></td> </tr> <tr> <td class="content"><input name="txtPaymentAddress2" type="hidden" class="box" id="txtPaymentAddress2" size="50" maxlength="100"></td> </tr> <tr> <td width="150" class="label">Tel.</td> <td class="content"><input name="txtPaymentPhone" type="text" class="box" id="txtPaymentPhone" size="30" maxlength="32"></td> </tr> <tr> <td width="150" class="label">Zemlja</td> <td class="content"><input name="txtPaymentState" type="text" class="box" id="txtPaymentState" size="30" maxlength="32"></td> </tr> <tr> <td width="150" class="label">Grad</td> <td class="content"><input name="txtPaymentCity" type="text" class="box" id="txtPaymentCity" size="30" maxlength="32"></td> </tr> <tr> <td width="150" class="label">Poštanski broj</td> <td class="content"><input name="txtPaymentPostalCode" type="text" class="box" id="txtPaymentPostalCode" size="10" maxlength="10"></td> </tr> <tr> <td class="label">Plaćam kreditnom karticom</td> <td><input type="checkbox" name="chkCard" id="chkCard" value="checkbox" onclick="CreditForm(this.checked);"> </tr> <tr id="rowCard" order="1" style="display:none;"> <td width="150" class="label">Broj Kartice</td> <td class="content"><input name="CardNumber" id="CardNumber" type="text" class="box" size="24" maxlength="24"></td> </tr> <tr id="rowBank" order="2" style="display:none;"> <td width="150" class="label">Vrsta kreditne kartice</td> <td class="content"><select name="CardType" id="CardType"> <option value="">--Izaberite--</option> <option value="AmEx">American Express</option> <option value="MasterCard">MasterCard</option> <option value="Visa">Visa</option> </select> <img src="slike/kartice.jpg"> </td> </tr> </table> <p> </p> <table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable"> <tr class="entryTableHeader"> <td width="150">Podaci o primaocu</td> <td><input type="checkbox" name="chkSame" id="chkSame" value="checkbox" onclick="setPaymentInfo(this.checked);"> <label for="chkSame" style="cursor:pointer">Isto kao naručilac</label></td> </tr> <tr> <td width="150" class="label">Ime</td> <td class="content"><input name="txtShippingFirstName" type="text" class="box" id="txtShippingFirstName" size="30" maxlength="50"></td> </tr> <tr> <td width="150" class="label">Prezime</td> <td class="content"><input name="txtShippingLastName" type="text" class="box" id="txtShippingLastName" size="30" maxlength="50"></td> </tr> <tr> <td width="150" class="label">Adresa</td> <td class="content"><input name="txtShippingAddress1" type="text" class="box" id="txtShippingAddress1" size="50" maxlength="100"></td> </tr> <tr> <td class="content"><input name="txtShippingAddress2" type="hidden" class="box" id="txtShippingAddress2" size="50" maxlength="100"></td> </tr> <tr> <td width="150" class="label">Tel.</td> <td class="content"><input name="txtShippingPhone" type="text" class="box" id="txtShippingPhone" size="30" maxlength="32"></td> </tr> <tr> <td width="150" class="label">Zemlja</td> <td class="content"><input name="txtShippingState" type="text" class="box" id="txtShippingState" size="30" maxlength="32"></td> </tr> <tr> <td width="150" class="label">Grad</td> <td class="content"><input name="txtShippingCity" type="text" class="box" id="txtShippingCity" size="30" maxlength="32"></td> </tr> <tr> <td width="150" class="label">Poštanski broj</td> <td class="content"><input name="txtShippingPostalCode" type="text" class="box" id="txtShippingPostalCode" size="10" maxlength="10"></td> </table> <p align="center"> <center> <?php //require_once('recaptchalib.php'); $publickey = "6Lc5_NkSAAAAAM2LMamTTpiJWRymRTdp2PWQlLYh"; // you got this from the signup page echo recaptcha_get_html($publickey); ?> <input class="box" name="btnStep1" type="submit" id="btnStep1" value="Dalje >>"> </center> </p> </form> <p align="center"> <img src="slike/ssl.png"> </p> Quote Link to comment https://forums.phpfreaks.com/topic/271706-boolean-variables-as-a-prequisite-to-form-action/#findComment-1398057 Share on other sites More sharing options...
TSR Posted December 7, 2012 Author Share Posted December 7, 2012 And here is the required formvalidator.php <?PHP /* ------------------------------------------------------------------------- PHP Form Validator (formvalidator.php) Version 1.1 This program is free software published under the terms of the GNU Lesser General Public License. This program is distributed in the hope that it will be useful - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For updates, please visit: http://www.html-form-guide.com/php-form/php-form-validation.html Questions & comments please send to info@html-form-guide.com ------------------------------------------------------------------------- */ /** * Carries information about each of the form validations */ class ValidatorObj { var $variable_name; var $validator_string; var $error_string; } /** * Base class for custom validation objects **/ class CustomValidator { function DoValidate(&$formars,&$error_hash) { return true; } } /** Default error messages*/ define("E_VAL_REQUIRED_VALUE","Please enter the value for %s"); define("E_VAL_MAXLEN_EXCEEDED","Maximum length exceeded for %s."); define("E_VAL_MINLEN_CHECK_FAILED","Please enter input with length more than %d for %s"); define("E_VAL_ALNUM_CHECK_FAILED","Please provide an alpha-numeric input for %s"); define("E_VAL_ALNUM_S_CHECK_FAILED","Please provide an alpha-numeric input for %s"); define("E_VAL_NUM_CHECK_FAILED","Please provide numeric input for %s"); define("E_VAL_ALPHA_CHECK_FAILED","Please provide alphabetic input for %s"); define("E_VAL_ALPHA_S_CHECK_FAILED","Please provide alphabetic input for %s"); define("E_VAL_EMAIL_CHECK_FAILED","Please provide a valida email address"); define("E_VAL_LESSTHAN_CHECK_FAILED","Enter a value less than %f for %s"); define("E_VAL_GREATERTHAN_CHECK_FAILED","Enter a value greater than %f for %s"); define("E_VAL_REGEXP_CHECK_FAILED","Please provide a valid input for %s"); define("E_VAL_DONTSEL_CHECK_FAILED","Wrong option selected for %s"); define("E_VAL_SELMIN_CHECK_FAILED","Please select minimum %d options for %s"); define("E_VAL_SELONE_CHECK_FAILED","Please select an option for %s"); define("E_VAL_EQELMNT_CHECK_FAILED","Value of %s should be same as that of %s"); define("E_VAL_NEELMNT_CHECK_FAILED","Value of %s should not be same as that of %s"); /** * FormValidator: The main class that does all the form validations **/ class FormValidator { var $validator_array; var $error_hash; var $custom_validators; function FormValidator() { $this->validator_array = array(); $this->error_hash = array(); $this->custom_validators=array(); } function AddCustomValidator(&$customv) { array_push($this->custom_validators,$customv); } function addValidation($variable,$validator,$error) { $validator_obj = new ValidatorObj(); $validator_obj->variable_name = $variable; $validator_obj->validator_string = $validator; $validator_obj->error_string = $error; array_push($this->validator_array,$validator_obj); } function GetErrors() { return $this->error_hash; } function ValidateForm() { $bret = true; $error_string=""; $error_to_display = ""; if(strcmp($_SERVER['REQUEST_METHOD'],'POST')==0) { $form_variables = $_POST; } else { $form_variables = $_GET; } $vcount = count($this->validator_array); foreach($this->validator_array as $val_obj) { if(!$this->ValidateObject($val_obj,$form_variables,$error_string)) { $bret = false; $this->error_hash[$val_obj->variable_name] = $error_string; } } if(true == $bret && count($this->custom_validators) > 0) { foreach( $this->custom_validators as $custom_val) { if(false == $custom_val->DoValidate($form_variables,$this->error_hash)) { $bret = false; } } } return $bret; } function ValidateObject($validatorobj,$formvariables,&$error_string) { $bret = true; $splitted = explode("=",$validatorobj->validator_string); $command = $splitted[0]; $command_value = ''; if(isset($splitted[1]) && strlen($splitted[1])>0) { $command_value = $splitted[1]; } $default_error_message=""; $input_value =""; if(isset($formvariables[$validatorobj->variable_name])) { $input_value = $formvariables[$validatorobj->variable_name]; } $bret = $this->ValidateCommand($command,$command_value,$input_value, $default_error_message, $validatorobj->variable_name, $formvariables); if(false == $bret) { if(isset($validatorobj->error_string) && strlen($validatorobj->error_string)>0) { $error_string = $validatorobj->error_string; } else { $error_string = $default_error_message; } }//if return $bret; } function validate_req($input_value, &$default_error_message,$variable_name) { $bret = true; if(!isset($input_value) || strlen($input_value) <=0) { $bret=false; $default_error_message = sprintf(E_VAL_REQUIRED_VALUE,$variable_name); } return $bret; } function validate_maxlen($input_value,$max_len,$variable_name,&$default_error_message) { $bret = true; if(isset($input_value) ) { $input_length = strlen($input_value); if($input_length > $max_len) { $bret=false; $default_error_message = sprintf(E_VAL_MAXLEN_EXCEEDED,$variable_name); } } return $bret; } function validate_minlen($input_value,$min_len,$variable_name,&$default_error_message) { $bret = true; if(isset($input_value) ) { $input_length = strlen($input_value); if($input_length < $min_len) { $bret=false; $default_error_message = sprintf(E_VAL_MINLEN_CHECK_FAILED,$min_len,$variable_name); } } return $bret; } function test_datatype($input_value,$reg_exp) { if(ereg($reg_exp,$input_value)) { return false; } return true; } function validate_email($email) { return eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $email); } function validate_for_numeric_input($input_value,&$validation_success) { $more_validations=true; $validation_success = true; if(strlen($input_value)>0) { if(false == is_numeric($input_value)) { $validation_success = false; $more_validations=false; } } else { $more_validations=false; } return $more_validations; } function validate_lessthan($command_value,$input_value, $variable_name,&$default_error_message) { $bret = true; if(false == $this->validate_for_numeric_input($input_value, $bret)) { return $bret; } if($bret) { $lessthan = doubleval($command_value); $float_inputval = doubleval($input_value); if($float_inputval >= $lessthan) { $default_error_message = sprintf(E_VAL_LESSTHAN_CHECK_FAILED, $lessthan, $variable_name); $bret = false; }//if } return $bret ; } function validate_greaterthan($command_value,$input_value,$variable_name,&$default_error_message) { $bret = true; if(false == $this->validate_for_numeric_input($input_value,$bret)) { return $bret; } if($bret) { $greaterthan = doubleval($command_value); $float_inputval = doubleval($input_value); if($float_inputval <= $greaterthan) { $default_error_message = sprintf(E_VAL_GREATERTHAN_CHECK_FAILED, $greaterthan, $variable_name); $bret = false; }//if } return $bret ; } function validate_select($input_value,$command_value,&$default_error_message,$variable_name) { $bret=false; if(is_array($input_value)) { foreach($input_value as $value) { if($value == $command_value) { $bret=true; break; } } } else { if($command_value == $input_value) { $bret=true; } } if(false == $bret) { $default_error_message = sprintf(E_VAL_SHOULD_SEL_CHECK_FAILED, $command_value,$variable_name); } return $bret; } function validate_dontselect($input_value,$command_value,&$default_error_message,$variable_name) { $bret=true; if(is_array($input_value)) { foreach($input_value as $value) { if($value == $command_value) { $bret=false; $default_error_message = sprintf(E_VAL_DONTSEL_CHECK_FAILED,$variable_name); break; } } } else { if($command_value == $input_value) { $bret=false; $default_error_message = sprintf(E_VAL_DONTSEL_CHECK_FAILED,$variable_name); } } return $bret; } function ValidateCommand($command,$command_value,$input_value,&$default_error_message,$variable_name,$formvariables) { $bret=true; switch($command) { case 'req': { $bret = $this->validate_req($input_value, $default_error_message,$variable_name); break; } case 'maxlen': { $max_len = intval($command_value); $bret = $this->validate_maxlen($input_value,$max_len,$variable_name, $default_error_message); break; } case 'minlen': { $min_len = intval($command_value); $bret = $this->validate_minlen($input_value,$min_len,$variable_name, $default_error_message); break; } case 'alnum': { $bret= $this->test_datatype($input_value,"[^A-Za-z0-9]"); if(false == $bret) { $default_error_message = sprintf(E_VAL_ALNUM_CHECK_FAILED,$variable_name); } break; } case 'alnum_s': { $bret= $this->test_datatype($input_value,"[^A-Za-z0-9 ]"); if(false == $bret) { $default_error_message = sprintf(E_VAL_ALNUM_S_CHECK_FAILED,$variable_name); } break; } case 'num': case 'numeric': { $bret= $this->test_datatype($input_value,"[^0-9]"); if(false == $bret) { $default_error_message = sprintf(E_VAL_NUM_CHECK_FAILED,$variable_name); } break; } case 'alpha': { $bret= $this->test_datatype($input_value,"[^A-Za-z]"); if(false == $bret) { $default_error_message = sprintf(E_VAL_ALPHA_CHECK_FAILED,$variable_name); } break; } case 'alpha_s': { $bret= $this->test_datatype($input_value,"[^A-Za-z ]"); if(false == $bret) { $default_error_message = sprintf(E_VAL_ALPHA_S_CHECK_FAILED,$variable_name); } break; } case 'email': { if(isset($input_value) && strlen($input_value)>0) { $bret= $this->validate_email($input_value); if(false == $bret) { $default_error_message = E_VAL_EMAIL_CHECK_FAILED; } } break; } case "lt": case "lessthan": { $bret = $this->validate_lessthan($command_value, $input_value, $variable_name, $default_error_message); break; } case "gt": case "greaterthan": { $bret = $this->validate_greaterthan($command_value, $input_value, $variable_name, $default_error_message); break; } case "regexp": { if(isset($input_value) && strlen($input_value)>0) { if(!preg_match("$command_value",$input_value)) { $bret=false; $default_error_message = sprintf(E_VAL_REGEXP_CHECK_FAILED,$variable_name); } } break; } case "dontselect": case "dontselectchk": case "dontselectradio": { $bret = $this->validate_dontselect($input_value, $command_value, $default_error_message, $variable_name); break; }//case case "shouldselchk": case "selectradio": { $bret = $this->validate_select($input_value, $command_value, $default_error_message, $variable_name); break; }//case case "selmin": { $min_count = intval($command_value); if(isset($input_value)) { if($min_count > 1) { $bret = (count($input_value) >= $min_count )?true:false; } else { $bret = true; } } else { $bret= false; $default_error_message = sprintf(E_VAL_SELMIN_CHECK_FAILED,$min_count,$variable_name); } break; }//case case "selone": { if(false == isset($input_value)|| strlen($input_value)<=0) { $bret= false; $default_error_message = sprintf(E_VAL_SELONE_CHECK_FAILED,$variable_name); } break; } case "eqelmnt": { if(isset($formvariables[$command_value]) && strcmp($input_value,$formvariables[$command_value])==0 ) { $bret=true; } else { $bret= false; $default_error_message = sprintf(E_VAL_EQELMNT_CHECK_FAILED,$variable_name,$command_value); } break; } case "neelmnt": { if(isset($formvariables[$command_value]) && strcmp($input_value,$formvariables[$command_value]) !=0 ) { $bret=true; } else { $bret= false; $default_error_message = sprintf(E_VAL_NEELMNT_CHECK_FAILED,$variable_name,$command_value); } break; } }//switch return $bret; }//validdate command } /************************************************************************************************************ * This function has been placed in the public domain as detailed at: * * http://www.braemoor.co.uk/software/index.shtml * * * * "You are welcome to download and use any of this software, but please note that: * * All software is provided as freeware for personal or commercial use without obligation by either party. * * The author will not accept responsibility for any problems that may be incurred by use of this software, * * although any errors reported will be corrected as soon as possible. * * Re-distribution of this software is NOT permitted without explicit permission." * ************************************************************************************************************ This routine checks the credit card number. The following checks are made: 1. A number has been provided 2. The number is a right length for the card 3. The number has an appropriate prefix for the card 4. The number has a valid modulus 10 number check digit if required If the validation fails an error is reported. The structure of credit card formats was gleaned from a variety of sources on the web, although the best is probably on Wikepedia ("Credit card number"): http://en.wikipedia.org/wiki/Credit_card_number Input parameters: cardnumber number on the card cardname name of card as defined in the card list below Output parameters: cardnumber number on the card cardname name of card as defined in the card list below Author: John Gardner webmister@braemoor.co.uk Date: 4th January 2005 Updated: 26th February 2005 additional credit cards added 1st July 2006 multiple definition of Discovery card removed 27th Nov. 2006 Additional cards added from Wikipedia 8th Dec 2007 Problem with Solo card definition corrected 18th Jan 2008 Support for 18 digit Maestro cards added 26th Nov 2008 Support for 19 digit Maestro cards added 19th June 2009 Support for Laser debit cards 11th September 2010 Improved support for Diner Club cards by Noe Leon 27th October 2011 Minor updates by Neil Cresswell (neil@cresswell.net): * VISA now only 16 digits as 13 digits version withdrawn and no longer in circulation * Deprecated eregi replaced by preg_match in two places * Deprecated split replaced by explode in two places 10th April 2012 New matches for Maestro, Diners Enroute and Switch 17th October 2012 Diners Club prefix 38 not encoded if (isset($_GET['submitted'])) { if (checkCreditCard ($_GET['CardNumber'], $_GET['CardType'], $ccerror, $ccerrortext)) { $ccerrortext = 'This card has a valid format'; } } ==============================================================================*/ function checkCreditCard ($cardnumber, $cardname, &$errornumber, &$errortext) { // Define the cards we support. You may add additional card types. // Name: As in the selection box of the form - must be same as user's // Length: List of possible valid lengths of the card number for the card // prefixes: List of possible prefixes for the card // checkdigit Boolean to say whether there is a check digit // Don't forget - all but the last array definition needs a comma separator! $cards = array ( array ('name' => 'AmEx', 'length' => '15', 'prefixes' => '34,37', 'checkdigit' => true ), array ('name' => 'Diners Club Carte Blanche', 'length' => '14', 'prefixes' => '300,301,302,303,304,305', 'checkdigit' => true ), array ('name' => 'Diners Club', 'length' => '14,16', 'prefixes' => '36,38,54,55', 'checkdigit' => true ), array ('name' => 'Discover', 'length' => '16', 'prefixes' => '6011,622,64,65', 'checkdigit' => true ), array ('name' => 'Diners Club Enroute', 'length' => '15', 'prefixes' => '2014,2149', 'checkdigit' => true ), array ('name' => 'JCB', 'length' => '16', 'prefixes' => '35', 'checkdigit' => true ), array ('name' => 'Maestro', 'length' => '12,13,14,15,16,18,19', 'prefixes' => '5018,5020,5038,6304,6759,6761,6762,6763', 'checkdigit' => true ), array ('name' => 'MasterCard', 'length' => '16', 'prefixes' => '51,52,53,54,55', 'checkdigit' => true ), array ('name' => 'Solo', 'length' => '16,18,19', 'prefixes' => '6334,6767', 'checkdigit' => true ), array ('name' => 'Switch', 'length' => '16,18,19', 'prefixes' => '4903,4905,4911,4936,564182,633110,6333,6759', 'checkdigit' => true ), array ('name' => 'VISA', 'length' => '16', 'prefixes' => '4', 'checkdigit' => true ), array ('name' => 'VISA Electron', 'length' => '16', 'prefixes' => '417500,4917,4913,4508,4844', 'checkdigit' => true ), array ('name' => 'LaserCard', 'length' => '16,17,18,19', 'prefixes' => '6304,6706,6771,6709', 'checkdigit' => true ) ); $ccErrorNo = 0; $ccErrors [0] = "Niste odabrali vrstu kartice"; $ccErrors [1] = "Niste uneli broj kartice"; $ccErrors [2] = "Broj kartice je nepravilan"; $ccErrors [3] = "Broj kartice je nevažeci"; $ccErrors [4] = "Broj kartice je pogrešne dužine"; // Establish card type $cardType = -1; for ($i=0; $i<sizeof($cards); $i++) { // See if it is this card (ignoring the case of the string) if (strtolower($cardname) == strtolower($cards[$i]['name'])) { $cardType = $i; break; } } // If card type not found, report an error if ($cardType == -1) { $errornumber = 0; $errortext = $ccErrors [$errornumber]; return false; } // Ensure that the user has provided a credit card number if (strlen($cardnumber) == 0) { $errornumber = 1; $errortext = $ccErrors [$errornumber]; return false; } // Remove any spaces from the credit card number $cardNo = str_replace (' ', '', $cardnumber); // Check that the number is numeric and of the right sort of length. if (!preg_match("/^[0-9]{13,19}$/",$cardNo)) { $errornumber = 2; $errortext = $ccErrors [$errornumber]; return false; } // Now check the modulus 10 check digit - if required if ($cards[$cardType]['checkdigit']) { $checksum = 0; // running checksum total $mychar = ""; // next char to process $j = 1; // takes value of 1 or 2 // Process each digit one by one starting at the right for ($i = strlen($cardNo) - 1; $i >= 0; $i--) { // Extract the next digit and multiply by 1 or 2 on alternative digits. $calc = $cardNo{$i} * $j; // If the result is in two digits add 1 to the checksum total if ($calc > 9) { $checksum = $checksum + 1; $calc = $calc - 10; } // Add the units element to the checksum total $checksum = $checksum + $calc; // Switch the value of j if ($j ==1) {$j = 2;} else {$j = 1;}; } // All done - if checksum is divisible by 10, it is a valid modulus 10. // If not, report an error. if ($checksum % 10 != 0) { $errornumber = 3; $errortext = $ccErrors [$errornumber]; return false; } } // The following are the card-specific checks we undertake. // Load an array with the valid prefixes for this card $prefix = explode(',',$cards[$cardType]['prefixes']); // Now see if any of them match what we have in the card number $PrefixValid = false; for ($i=0; $i<sizeof($prefix); $i++) { $exp = '/^' . $prefix[$i] . '/'; if (preg_match($exp,$cardNo)) { $PrefixValid = true; break; } } // If it isn't a valid prefix there's no point at looking at the length if (!$PrefixValid) { $errornumber = 3; $errortext = $ccErrors [$errornumber]; return false; } // See if the length is valid for this card $LengthValid = false; $lengths = explode(',',$cards[$cardType]['length']); for ($j=0; $j<sizeof($lengths); $j++) { if (strlen($cardNo) == $lengths[$j]) { $LengthValid = true; break; } } // See if all is OK by seeing if the length was valid. if (!$LengthValid) { $errornumber = 4; $errortext = $ccErrors [$errornumber]; return false; }; // The credit card is in the required format. return true; } /*============================================================================*/ /* * This is a PHP library that handles calling reCAPTCHA. * - Documentation and latest version * http://recaptcha.net/plugins/php/ * - Get a reCAPTCHA API Key * https://www.google.com/recaptcha/admin/create * - Discussion group * http://groups.google.com/group/recaptcha * * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net * AUTHORS: * Mike Crawford * Ben Maurer * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * The reCAPTCHA server URL's */ define("RECAPTCHA_API_SERVER", "http://www.google.com/recaptcha/api"); define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api"); define("RECAPTCHA_VERIFY_SERVER", "www.google.com"); /** * Encodes the given data into a query string format * @param $data - array of string elements to be encoded * @return string - encoded request */ function _recaptcha_qsencode ($data) { $req = ""; foreach ( $data as $key => $value ) $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; // Cut the last '&' $req=substr($req,0,strlen($req)-1); return $req; } /** * Submits an HTTP POST to a reCAPTCHA server * @param string $host * @param string $path * @param array $data * @param int port * @return array response */ function _recaptcha_http_post($host, $path, $data, $port = 80) { $req = _recaptcha_qsencode ($data); $http_request = "POST $path HTTP/1.0\r\n"; $http_request .= "Host: $host\r\n"; $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; $http_request .= "Content-Length: " . strlen($req) . "\r\n"; $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; $http_request .= "\r\n"; $http_request .= $req; $response = ''; if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { die ('Could not open socket'); } fwrite($fs, $http_request); while ( !feof($fs) ) $response .= fgets($fs, 1160); // One TCP-IP packet fclose($fs); $response = explode("\r\n\r\n", $response, 2); return $response; } /** * Gets the challenge HTML (javascript and non-javascript version). * This is called from the browser, and the resulting reCAPTCHA HTML widget * is embedded within the HTML form it was called from. * @param string $pubkey A public key for reCAPTCHA * @param string $error The error given by reCAPTCHA (optional, default is null) * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) * @return string - The HTML to be embedded in the user's form. */ function recaptcha_get_html ($pubkey, $error = null, $use_ssl = true) { if ($pubkey == null || $pubkey == '') { die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); } if ($use_ssl) { $server = RECAPTCHA_API_SECURE_SERVER; } else { $server = RECAPTCHA_API_SERVER; } $errorpart = ""; if ($error) { $errorpart = "&error=" . $error; } return '<script type="text/javascript" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script> <noscript> <iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br/> <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/> </noscript>'; } /** * A ReCaptchaResponse is returned from recaptcha_check_answer() */ class ReCaptchaResponse { var $is_valid; var $error; } /** * Calls an HTTP POST function to verify if the user's guess was correct * @param string $privkey * @param string $remoteip * @param string $challenge * @param string $response * @param array $extra_params an array of extra variables to post to the server * @return ReCaptchaResponse */ function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()) { if ($privkey == null || $privkey == '') { die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); } if ($remoteip == null || $remoteip == '') { die ("For security reasons, you must pass the remote ip to reCAPTCHA"); } //discard spam submissions if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { $recaptcha_response = new ReCaptchaResponse(); $recaptcha_response->is_valid = false; $recaptcha_response->error = 'incorrect-captcha-sol'; return $recaptcha_response; } $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", array ( 'privatekey' => $privkey, 'remoteip' => $remoteip, 'challenge' => $challenge, 'response' => $response ) + $extra_params ); $answers = explode ("\n", $response [1]); $recaptcha_response = new ReCaptchaResponse(); if (trim ($answers [0]) == 'true') { $recaptcha_response->is_valid = true; } else { $recaptcha_response->is_valid = false; $recaptcha_response->error = $answers [1]; } return $recaptcha_response; } /** * gets a URL where the user can sign up for reCAPTCHA. If your application * has a configuration page where you enter a key, you should provide a link * using this function. * @param string $domain The domain where the page is hosted * @param string $appname The name of your application */ function recaptcha_get_signup_url ($domain = null, $appname = null) { return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname)); } function _recaptcha_aes_pad($val) { $block_size = 16; $numpad = $block_size - (strlen ($val) % $block_size); return str_pad($val, strlen ($val) + $numpad, chr($numpad)); } /* Mailhide related code */ function _recaptcha_aes_encrypt($val,$ky) { if (! function_exists ("mcrypt_encrypt")) { die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); } $mode=MCRYPT_MODE_CBC; $enc=MCRYPT_RIJNDAEL_128; $val=_recaptcha_aes_pad($val); return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); } function _recaptcha_mailhide_urlbase64 ($x) { return strtr(base64_encode ($x), '+/', '-_'); } /* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ function recaptcha_mailhide_url($pubkey, $privkey, $email) { if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . "you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>"); } $ky = pack('H*', $privkey); $cryptmail = _recaptcha_aes_encrypt ($email, $ky); return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail); } /** * gets the parts of the email to expose to the user. * eg, given johndoe@example,com return ["john", "example.com"]. * the email is then displayed as john...@example.com */ function _recaptcha_mailhide_email_parts ($email) { $arr = preg_split("/@/", $email ); if (strlen ($arr[0]) <= 4) { $arr[0] = substr ($arr[0], 0, 1); } else if (strlen ($arr[0]) <= 6) { $arr[0] = substr ($arr[0], 0, 3); } else { $arr[0] = substr ($arr[0], 0, 4); } return $arr; } /** * Gets html to display an email address given a public an private key. * to get a key, go to: * * http://www.google.com/recaptcha/mailhide/apikey */ function recaptcha_mailhide_html($pubkey, $privkey, $email) { $emailparts = _recaptcha_mailhide_email_parts ($email); $url = recaptcha_mailhide_url ($pubkey, $privkey, $email); return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) . "' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]); } ?> Quote Link to comment https://forums.phpfreaks.com/topic/271706-boolean-variables-as-a-prequisite-to-form-action/#findComment-1398058 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.