Как новичок в программировании, мне нужна ваша помощь в создании небольшого приложения, которое будет автоматически рассчитывать возраст из 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, а также с сохранением данных в базе данных.
Вы можете получить хорошее приближение по возрасту, разделив количество дней на 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
объекты, один для даты рождения и один для прямо сейчас, а затем сравните два.
Предполагая, что нам не нужно копаться в локали часовых поясов (что вполне возможно, но выходит за рамки этого 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
Источники:
Кто-то из друзей дал решение моего ответа, но, к сожалению, кто-то должен стереть его, поэтому я даю решение, так как я предупреждаю о необходимости скопировать скрипт! Большое спасибо одному, предоставившему этот скрипт!
<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>