0

我正在 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 函数是否正确?因此无法读取文件的其余部分?

有没有一种实用的方法来解决这个问题,或者我是否必须重建我的功能以包含所有信用卡验证码?

4

2 回答 2

1

您正在尝试将 $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-13T12:44:43.990 回答
1

在这一点上,我不完全确定我对 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');
于 2012-11-13T12:47:08.483 回答