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

check_cc_string 関数のパラメーターとして $cc にアクセスしようとしています。$.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 に答える