【问题标题】:Auto calculate age from dob with javascript使用 javascript 从 dob 自动计算年龄
【发布时间】:2023-03-10 02:47:01
【问题描述】:

作为一个编程新手,我需要您的帮助来构建一个小应用程序,该应用程序将使用php 代码自动从下面表单字段中的 dob 计算年龄!有没有办法做到这一点?

我的html代码是:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>form practice</title>

</head>

<body>

    <div class="form2" id="form2" name="form2">

        <form action="php/form2.php" method="post" id="Personalinfo">

            <label for="fname">Name:</label>
            <input type="text" id="fname" name="firstname" placeholder="Client 
        Name..">

            <label for="lname">Lastname:</label>
            <input type="text" id="lname" name="lastname" placeholder="Client 
        Lastname..">

            <label for="dob">Birthday:</label>
            <input type="text" id="dob" name="dob" placeholder="yyyy/mm/dd..">

            <label for="age">Age:</label>
            <input type="text" id="age" name="age" placeholder="Client Age..">

            <input type="submit" name="submitForm2" value="Submit">

        </form>
    </div>

</body>

</html>

和我的 php 代码连接到 mysqli 数据库:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error)
{
    die("Connection failed: " . $conn->connect_error);
}

if (isset($_POST['submitForm2']))
{
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $dob = $_POST['dob'];
    $age = $_POST['age'];
    $sql = "INSERT INTO info (firstname, lastname, dob, age)
       VALUES ('{$firstname}', '{$lastname}', '{$dob}', '{$age}')";
    if ($conn->query($sql) === TRUE)
    {
        echo "New record created successfully";
    }
    else
    {
        echo "Error: " . $sql . "<br />" . $conn->error;
    }
}
else
{
    echo "Are you sure you enter a firstname and the name of your html submit 
       is submitForm";
}

$conn->close();
?>

我在互联网上搜索并看到了许多从 dob 计算年龄的示例,但我找不到任何与将结果嵌套在名为 age 的表单字段中以及将数据保存在数据库中的相关内容。

【问题讨论】:

  • 谢谢伊万卡!!!

标签: php forms mysqli date


【解决方案1】:

您可以通过将天数除以 365.25 得到一个很好的年龄近似值

我有充分的权威,今天有 47 岁以上的人在世 - 所以你不能使用 PHP 时间值来存储他们的出生日期(如果你在 32 位系统上运行,那么之后你会遇到问题2038)。因此,我建议在数据库中进行数学运算。事实上,MySQL 手册中的the very first example 说明了这个确切的问题(并且此方法不受除以 365.25 时产生的舍入偏移问题的影响):

SELECT name, birth, CURDATE(),
TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
FROM pet;

但是你为什么要把年龄存储在数据库中呢?在未来的某个时候它会是错误的。如果你有出生日期,你可以在检索数据时计算出来。

【讨论】:

  • 非常感谢您提供的信息!真的帮了我!
【解决方案2】:
  • 1) 你想使用 PHP DateTime 类。您制作了两个DateTime 对象,一个用于生日,一个用于现在,然后比较两者。

    假设我们不需要深入研究时区语言环境(这是完全可能的,但超出了本问答的范围),这将为您提供准确的结果。

    DateTime 类示例:

    (PHP 5.6.29)

    $now =  new DateTime(); 
    
    // Note your SQL field should be a `DATE` column 
    // and formatted YYYY-MM-DD
    // assumed in this example $sqlData['dob'] = "2015-01-10";
    
    $birthday = new DateTime($sqlData['dob']);
    $age = $now->diff($birthday);
    //
    print "person is ".$age['y']." years old.";
    

    $age 的完整输出低于print_r($age):

    DateInterval Object
    (
        [y] => 2
        [m] => 6
        [d] => 23
        [h] => 5
        [i] => 34
        [s] => 11
        [days] => 935
     )
    

  • 2) 正如 Symcbean 所提到的,您确实不需要(并且可能不应该)将人的年龄添加到数据库中,如下所示:

    在未来的某个时候它会出错。如果你有出生日期,你可以在检索数据时计算出来。

    -- symcbean


  • 3) 当您在 PHP 中使用面向对象的 MySQL 交互时获得正面评价;您仍然受到 SQL 注入和潜在的数据库滥用的影响。与其将 PHP 变量直接插入到 SQL 中,不如成为Using prepared statements and parameterized queries。在你有机会学习任何不良的 PHP 习惯之前,立即行动吧!


来源:

【讨论】:

  • @ThanosZacharias 如果有用,请随时 +1 这个答案;-)
【解决方案3】:

一些朋友给出了我的答案的解决方案,但不幸的是有人必须删除它,所以我在阻止复制脚本时给出了解决方案!非常感谢提供此脚本的一位 ho!

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>form practice</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
    $(document).ready(function(){

        $("#dob").change(function(){
           var value = $("#dob").val();
            var dob = new Date(value);
            var today = new Date();
            var age = Math.floor((today-dob) / (365.25 * 24 * 60 * 60 * 1000));
            if(isNaN(age)) {

            // will set 0 when value will be NaN
             age=0;

            }
            else{
              age=age;
            }
            $('#age').val(age);

        });

    });
    </script>
</head>

<body>

<div class="form2" id="form2" name="form2">

<form action="php/form2.php" method="post" id="Personalinfo">

<label for="fname">Name:</label>
<input type="text" id="fname" name="firstname" placeholder="Client 
Name..">

<label for="lname">Lastname:</label>
<input type="text" id="lname" name="lastname" placeholder="Client 
Lastname..">

<label for="dob">Birthday:</label>
<input type="text" id="dob" name="dob" placeholder="yyyy/mm/dd..">

<label for="age">Age:</label>
<input type="text" id="age" name="age" placeholder="Client Age..">

<input type="submit" name="submitForm2" value="Submit">


</form>
</div>

</body>
</html>

【讨论】:

  • 您的问题是使用 PHP 和 MySQL 提出的,但您的答案既不使用这些东西,也没有使用 Javascript。
  • 马丁答案不是我的!其他人将脚本作为另一种方式来完成我所要求的事情,并且为了其他人的帮助,我只是复制了其他人的答案!谢谢
  • 但是你在问一个关于 PHP / MySQL 的问题,你在说 [上面] 你想要的答案是 Javascript!请澄清你真正想要什么,并试图实现!谁的答案无关紧要,重要的是您声明此答案是您需要的答案,即使它与您提出的实际问题没有直接关系!!!
  • 为什么会有负面反馈?只是有些人看了树就想念森林……
  • 如果您要喝茶,那么当您一直说您实际上想要咖啡时,这是不合逻辑的(并且让为您提供茶的人感到沮丧)。 (虽然我不同意,但负面标记不是我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2021-06-26
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多