Авто рассчитать возраст от Доб с Javascript

Как новичок в программировании, мне нужна ваша помощь в создании небольшого приложения, которое будет автоматически рассчитывать возраст из dob в полях формы ниже с php код! Есть ли способ достичь этого?

Мой 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-код подключения к базе данных MySQL:

<?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, а также с сохранением данных в базе данных.

3 ответа

Решение

Кто-то из друзей дал решение для моего ответа, но, к сожалению, кто-то должен стереть его, поэтому я даю решение, поскольку я предупреждаю, чтобы скопировать сценарий! Большое спасибо одному, предоставившему этот скрипт!

<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>
  • 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) Пока вы получаете положительные оценки за использование объектно-ориентированных взаимодействий MySQL, в PHP; вы все еще подвержены внедрению SQL и потенциальному злоупотреблению базой данных. Вместо того, чтобы вставлять переменные PHP непосредственно в ваш SQL, вы хотите использовать подготовленные операторы и параметризованные запросы. Сделайте это сейчас, прежде чем вы получите шанс выучить какие-либо вредные привычки PHP!


Источники:

Вы можете получить хорошее приближение по возрасту, разделив количество дней на 365,25.

У меня есть все основания полагать, что сегодня существуют люди старше 47 лет, так что вы не можете использовать значения времени PHP для хранения даты их рождения (и если вы работаете в 32-битной системе, у вас будут проблемы после 2038 года). Следовательно, я бы порекомендовал делать математику в базе данных. Действительно, самый первый пример в руководстве по MySQL иллюстрирует эту точную проблему (и на этот метод не влияет проблема смещения при округлении, созданная при делении на 365.25):

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

Но почему вы храните возраст в базе данных вообще? Это будет неправильно в какой-то момент в будущем. Если у вас есть дата рождения, вы можете рассчитать ее при получении данных.

Другие вопросы по тегам