Php 使用javascript从出生日期自动计算年龄

Php 使用javascript从出生日期自动计算年龄,php,forms,mysqli,dob,Php,Forms,Mysqli,Dob,作为一名编程新手,我需要你的帮助来构建一个小应用程序,它将使用php代码在下面的表单字段中从dob自动计算年龄!有没有办法做到这一点 我的html代码是: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>form prac

作为一名编程新手,我需要你的帮助来构建一个小应用程序,它将使用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的表单字段中以及将数据保存在数据库中相关的内容。

通过将天数除以365.25,可以很好地近似计算年龄

据我所知,今天有47岁以上的人活着,所以你不能使用PHP时间值来存储他们的出生日期,如果你在32位系统上运行,2038年后你会遇到问题。因此,我建议在数据库中进行数学运算。事实上,MySQL手册中说明了这一问题,该方法不受除以365.25时产生的舍入偏移量问题的影响:

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

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

一些朋友给出了我答案的解决方案,但不幸的是,必须有人将其删除,因此我给出了解决方案,因为我要先复制脚本!非常感谢一个提供了这个脚本的人

1您希望使用PHP DateTime类。创建两个DateTime对象,一个用于生日,另一个用于现在,然后比较这两个对象

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

DateTime类示例:

PHP 5.6.29

$age的完整输出低于print\r$age:

2如Symcbean所述,您确实不需要也不应该将此人的年龄添加到数据库中,如下所示:

在将来的某个时候,这将是错误的。如果您有出生日期,您可以在检索数据时计算出生日期

-

3.在PHP中使用面向对象的MySQL交互时,您得到了积极的评价;您仍然会受到SQL注入和潜在的数据库滥用的影响。与直接将PHP变量插入SQL不同,您希望。在你有机会学习任何坏的PHP习惯之前,现在就开始吧! 4用于解决此计算的MySQL方法。 资料来源:


非常感谢您提供的信息!真的帮助了我!你的问题是用PHP和MySQL来回答的,但是你的答案没有使用这两种语言,而是使用Javascript。马丁:答案不是我的!别人给了我剧本,作为做我要求的事情的另一种方式,而为了别人的帮助,我只是复制别人的答案!谢谢,但是你问了一个关于PHP/MySQL的问题,你说[上面]你想要的答案是Javascript!!请澄清你真正想要什么,以及你真正想要实现什么!谁的答案不重要,重要的是你说这个答案是你需要的,即使它与你问的实际问题没有直接关系!!!为什么会有负面反馈?只是有些人看着树,想念森林……如果你要喝茶,当你一直说你真的想要咖啡时,对那些给你提供茶的人来说,这是不合逻辑的,也是令人沮丧的。虽然我不反对,但消极的标志不是美赞克斯·伊万卡@ThanosZacharias如果有用,请随意+1这个答案-
<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>
$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.";
DateInterval Object
(
    [y] => 2
    [m] => 6
    [d] => 23
    [h] => 5
    [i] => 34
    [s] => 11
    [days] => 935
 )