我正在 Codeigniter 中构建一个基本的信用卡验证器,这是我的 HTML:
<input type="text" id="ccard" />
<input type="submit" onClick="check_cc()" name="submit_cc" value="Validar cartão!" id="checkcc" />
<div id="result"></div>
JavaScript 函数:
function check_cc() {
var cc;
cc = $("#ccard").val();
$.ajax({
url: '<?php echo base_url() . "js_tests/check_cc_string"; ?>',
type: 'POST',
data: {credit_card : cc},
success: function(output_string) {
setTimeout(function() {
$('#result').append(output_string);
}, 1000);
}
});
}
(此时我不完全确定我对 URL 所做的操作是否正确。该函数似乎在控制器上触发,但不确定是否cc
正在传递变量)
这是我的控制器:
function check_cc_string() {
$check = check_cc($_POST['cc'], true);
if ($check !== false) {
$output_string = $_POST['cc'] . " - " . $check;
} else {
$output_string = " - Not a match";
}
echo json_encode($output_string);
}
同样在控制器内部,信用卡检查器:
function check_cc($cc, $extra_check = false) {
$cards = array(
"visa" => "(4\d{12}(?:\d{3})?)",
"amex" => "(3[47]\d{13})",
"jcb" => "(35[2-8][89]\d\d\d{10})",
"maestro" => "((?:5020|5038|6304|6579|6761)\d{12}(?:\d\d)?)",
"solo" => "((?:6334|6767)\d{12}(?:\d\d)?\d?)",
"mastercard" => "(5[1-5]\d{14})",
"switch" => "(?:(?:(?:4903|4905|4911|4936|6333|6759)\d{12})|(?:(?:564182|633110)\d{10})(\d\d)?\d?)",
);
$names = array("Visa", "American Express", "JCB", "Maestro", "Solo", "Mastercard", "Switch");
$matches = array();
$pattern = "#^(?:" . implode("|", $cards) . ")$#";
$result = preg_match($pattern, str_replace(" ", "", $cc), $matches);
if ($extra_check && $result > 0) {
$result = (validatecard($cc)) ? 1 : 0;
}
return ($result > 0) ? $names[sizeof($matches) - 2] : false;
}
不幸的是,这给了我这个:
致命错误:调用未定义函数 check_cc()
我不是这些方面的专家,但我相信通过 jQuery 传递的 url 直接访问 PHP 函数是否正确?因此无法读取文件的其余部分?
有没有一种实用的方法来解决这个问题,或者我是否必须重建我的功能以包含所有信用卡验证码?