php/mysql:信用卡验证是';行不通

php/mysql:信用卡验证是';行不通,php,html,Php,Html,我试图使这个程序,采取一个信用卡号码,并检查它是否有效,并让用户知道它,但在我的程序中,我没有得到回显消息在所有点击提交 <?php session_start(); if (isset($_POST['submit'])){ $number=$_POST['cc']; $total=0; $i=1; $last4= substr($number,-4,4); $number=$str_split($number); $number=arra

我试图使这个程序,采取一个信用卡号码,并检查它是否有效,并让用户知道它,但在我的程序中,我没有得到回显消息在所有点击提交

<?php
session_start();
if (isset($_POST['submit'])){
    $number=$_POST['cc'];
    $total=0;
    $i=1;
    $last4= substr($number,-4,4);
    $number=$str_split($number);
    $number=array_reverse($number);
    foreach($number as $digit){
        if(i%2==0){
            $digit*=2;
            if($digit>9){
                $digit -=9;
            }
        }
        $total += $digit;
        $i++;
    }
    if($total%10==0){
        echo "Your credit card number ending in ".$last4." is valid";
    }
    else
    {
        echo "Your credit card number ending in ".$last4." is invalid";
    }
}
?>
<html>
<head>
    <title>Credit Card Number</title>
</head>
<body>
<form action="cards.php">
    <input type="text" name="cc">
    <input type="submit" name="submit">
    </form>
</body>
</html>

信用卡号码
让我们一步一步地看一下

首先,以下条件永远不会得到满足,因为您正在对一个表单使用POST数组,而该表单中(特别地)不包含“POST”方法

由于表单在未暗示“POST”时默认为“GET”方法,因此需要包含它

<form action="cards.php" method="post">
需要删除它:

$number= str_split($number);
然后我们有以下错误(也从注释中提取并声明):

未定义常数i的使用-假定为“i”

这是由于
中的“i”(i%2==0)
缺少
$
,并且首先在
$i=1;
中声明

它查找了一个同名的,但由于没有找到,所以它向您抛出了那个错误

因此,应改为:

if($i%2==0)

在PHP中捕获post参数时,在表单标记中指定method,例如method='post'。NikunjSardhara现在我收到通知:未定义变量:第8行C:\xamppp\htdocs\cpu5001\cards.PHP中的str_split。致命错误:函数名必须是第8行C:\xamppp\htdocs\cpu5001\cards.PHP中的字符串。我很好奇,这是活动的吗?如果是,在SSL?t下他看起来非常危险的$str_split是错误的,应该是str_split。@Fred ii-lol不,我只需要为我的作业做这个。创建信用验证表格。谢谢你,顺便说一句,我有另一个问题,我希望你能帮助我?我不能在这里发布,因为我必须等待90分钟,但我真的需要我的答案:/现在验证工作,但什么时候我尝试将卡号输入我的phpmyadmin数据库,它显示0或array@DavidAdam不客气,大卫。开火吧,我看看我能做什么。$my_query=“插入
用户名
信用卡
到期日期
持卡人姓名
国家/地区
)值(空,“$ids”、“$number”、“$expiray”、“$carden”、“$country”)";这是我把它添加到我的数据库中的内容..我在C:\xamppp\htdocs\cpu5001\cards.php中得到一条关于数组到字符串转换的通知38@DavidAdam如果看不到完整的代码,我就无能为力了。请使用错误报告以及查询本身检查错误。因为您处理的是数组,所以有些地方不对劲,和/或未被视为数组。看到此
$expiray
表明存在拼写错误;
$expiry
可能吗?您可能需要等待并发布另一个问题。请确保db列类型正确且长度足够长,我能为您做的就是David。
$number= str_split($number);
if($i%2==0)