从输入的出生日期

时间:2015-11-09 15:19:23

标签: php html

我是这个网站的新手,我发现了一些与我的系统错误相关的问题,但不幸的是他们无法修复错误。我正在为我的capstone项目创建一个离线的基于Web的信息系统,我不明白为什么 P_Bday 未定义..这是我的代码

这是我输入Birthdate的代码:

input type="text" id = "P_Bday" name = "P_Bday" class="form-control" data-inputmask="'alias': 'dd/mm/yyyy'" data-mask placeholder="dd/mm/yyyy" required

这是我计算年龄的代码:

function ageCalculator($dob){
    if(!empty($dob)){
        $birthdate = new DateTime($dob);
        $today   = new DateTime('today');
        $age = $birthdate->diff($today)->y;
        return $age;
    }
    else{
        return 0;
    }
}

$dob = $_POST["P_Bday"];

我在这里调用我的功能,它应该根据输入的生日显示计算的年龄:

input type='text' name = 'P_Age' id='disabledTextInput' class='form-control' value='".ageCalculator($dob)."' readonly

每次我运行代码时都会说:

  

注意:未定义的索引:P_Bday in    C:\ xampp \ htdocs \ PISGDH \ recordclerk \ RecordEntry \ addPatient.php 在线   的 47

3 个答案:

答案 0 :(得分:0)

如果在通过$dob = $_POST["P_Bday"];发送任何内容之前正在页面上运行POST行,则$_POST[foo]无效。

将行更改为:

if(isset($_POST["P_Bday"])) $dob = $_POST["P_Bday"];
    else $dob = null;

或者:

$dob = isset($_POST["P_Bday"]) ? $_POST["P_Bday"] : null;

答案 1 :(得分:0)

调试非常简单Undefined index错误。您从错误消息C:\xampp\htdocs\PISGDH\recordclerk\RecordEntry\addPatient.php中提到的文件开始,然后转到错误消息line 47中提到的行,并在该行P_Bday上找到有问题的未定义索引,并且绝对肯定地知道在您的代码中,您已经定义了该变量的索引。您可以按照向后的方式通过代码来尝试找出错误。错误可能是拼写错误(您使用了错误的大小写/变量名称),或者您可能忘记正确初始化变量。

避免未定义变量/索引错误的最佳方法是始终初始化并早期初始化。在少数情况下,您无法确定变量是否已正确初始化(例如使用$_POST / $_GET或其他外部变量受客户端输入控制)您想要使用isset以避免错误,并且可以合并空值或编写逻辑,以防止代码在用户错误的情况下继续使用未初始化的值。

实施例

if (!isset($_POST['P_Bday'])) {
    die("You forgot to fill out your birthday!");
} else {
    echo "Yay!";
}

$_POST / $_GET

的一些良好的初始化技术

在处理用户输入时,“始终初始化并初始化”的最佳做法是为表单中的预期输入设置一组默认值并从中初始化,以便不落入这个陷阱。

实施例

$defaultValues = [
    'P_Bday'  => null,
    'Option1' => 'default',
    'Option2' => 1,
];
/* Let's say the user only supplied Option1 */
$_POST = ['Option1' => 'foo'];
/* This makes sure we still have the other index initialized */
$inputValues = array_intersect_key($_POST, $defaultValues) + $defaultValues;

/**
 * Now you can pass around $inputValues safely knowing all expected values
 * are always going to be initialized without having to do isset() everywhere
 */

doSomething(Array $inputValues) {
    if (!$inputValues['P_Bday']) { // notice no isset() check is necessary
        throw new Exception("You didn't give a birthday!!!");
    }
    return (new DateTime)->diff(new DateTime($inputValues['P_Bday']))->y;
}

答案 2 :(得分:0)

在调用函数后,您正在声明变量$ dob。你必须在函数调用之前声明你的变量,并且还使用如下的条件语句: 请按如下方式编写代码:

if(isset($_POST["P_Bday"])){
    $dob = $_POST["P_Bday"];
} else {
    $dob ="";
}
function ageCalculator($dob){
    if(!empty($dob)){
        $birthdate = new DateTime($dob);
        $today   = new DateTime('today');
        $age = $birthdate->diff($today)->y;
        return $age;
    }
    else{
        return 0;
    }
}