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.

0
thanos_zach 2 août 2017 à 14:36

2 réponses

Meilleure réponse

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>
-1
thanos_zach 2 août 2017 à 12:38

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.

0
symcbean 2 août 2017 à 12:13