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

0

Решение

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

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

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

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

0

Другие решения

  • 1) Вы хотите использовать PHP DateTime Учебный класс. Вы делаете два DateTime объекты, один для даты рождения и один для прямо сейчас, а затем сравните два.

    Предполагая, что нам не нужно копаться в локали часовых поясов (что вполне возможно, но выходит за рамки этого Q&А) это даст вам точный результат.

    Пример класса 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!


Источники:

0

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

<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
По вопросам рекламы [email protected]