En tant que débutant en programmation, j'ai besoin de votre aide pour créer une petite application qui calculera automatiquement l'âge à partir de dob dans les champs de formulaire ci-dessous avec le code php
! Y a-t-il un moyen d'y parvenir?
Mon code html est:
<!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>
Et mon code php se connectant à la base de données 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();
?>
J'ai cherché sur Internet et j'ai vu de nombreux exemples de calcul de l'âge à partir de dob, mais je n'ai rien trouvé de lié à l'imbrication du résultat dans un champ de formulaire nommé age et à la conservation des données dans la base de données.
2 réponses
Un ami a donné la solution à ma réponse mais malheureusement quelqu'un doit l'effacer, alors je donne la solution car je m'empêche de copier le script! Merci beaucoup à celui qui a fourni ce script!
<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>
Vous pouvez obtenir une bonne approximation de l'âge en divisant le nombre de jours par 365,25.
Je sais de bonne foi qu'il y a des personnes en vie aujourd'hui âgées de plus de 47 ans - vous ne pouvez donc pas utiliser les valeurs de temps PHP pour stocker leur date de naissance (et si vous utilisez un système 32 bits, vous aurez des problèmes après 2038). Par conséquent, je recommanderais de faire les calculs dans la base de données. En effet, le tout premier exemple du manuel MySQL illustre ce problème exact (et cette méthode n'est pas affectée par le problème de décalage d'arrondi créé lorsque vous divisez par 365,25):
SELECT name, birth, CURDATE(),
TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
FROM pet;
Mais pourquoi stockez-vous l'âge dans la base de données? Ce sera faux à un moment donné dans le futur. Si vous avez la date de naissance, vous pouvez la calculer lorsque vous récupérez les données.
Questions connexes
De nouvelles questions
php
PHP est un langage de script largement utilisé, de haut niveau, dynamique, orienté objet et interprété, principalement conçu pour le développement Web côté serveur. Utilisé pour les questions sur le langage PHP.