我正在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函数呢?因此不能读取文件的其余部分?
是否有一种实用的方法来研究这个问题,或者我需要重新构建我的功能来包含所有的信用卡验证代码?
发布于 2012-11-13 12:44:43
您正在尝试将$cc作为check_cc_string函数中的一个参数访问。$.ajax向控制器发送一个httprequest,默认情况下数据通过$_POST传递。当调用check_cc时,应该使用$this->
试试这个:
function check_cc_string() {
$c = $_POST['cc'];
$check = $this->check_cc($c, true);
...发布于 2012-11-13 12:47:08
在这一点上,我不完全确定我用URL做的事情是否真的正确
这只有在将javascript在发送到客户端之前由PHP解析时才有意义。
您是否真正定义了函数或这些方法?在后一种情况下,不存在check_cc(),但可能存在$this->check_cc()。可以通过声明方法来在方法中创建函数--但在调用该方法之前,函数是不存在的--请考虑:
class t {
// constructor method....
function t($r) {
print "method called\n";
// inline function defn.....
function t($r) {
print "function called\n";
}
}
}
$a=new t(''); // try commenting this
print t('hello');https://stackoverflow.com/questions/13360736
复制相似问题