Nico
Nico

Reputation: 177

Change the date in the database with php and phpmyadmin

**Hello everyone, first of all I want to apologize my english is not very good. I am currently working on databases as well as php. I explain my problem, I would like to insert the current date each time the user registers or connects, replace the old date by the current date and then collect it and make a connection history. Thank you for your potential help

my database has 5 fields :1.

  • id, int(11) , AUTO_INCREMENT
  • mail varchar(255)
  • pseudo varchar(25)
  • mdp char(32)
  • Date

register.php

$ AfficherFormulaire=1;
//traitement du formulaire:   
if(isset($_POST['pseudo'],$_POST['mdp'],$_POST['mail'])){//l'utilisateur à cliqué sur "S'inscrire", on demande donc si les champs sont défini avec "isset"
if(empty($_POST['mail'])){//le champ mail est vide
    echo '<a id="annotation">le champ mail est vide.</a>';
} elseif(empty($_POST['pseudo'])){//le champ pseudo est vide, on arrête l'exécution du script et on affiche un message d'erreur
    echo '<a id="annotation">le champ pseudo est vide.</a>';
} elseif(!preg_match("#^[a-z0-9]+$#",$_POST['pseudo'])){//le champ pseudo est renseigné mais ne convient pas au format qu'on souhaite qu'il soit, soit: que des lettres minuscule + des chiffres (je préfère personnellement enregistrer le pseudo de mes membres en minuscule afin de ne pas avoir deux pseudo identique mais différents comme par exemple: Admin et admin)
    echo '<a id="annotation">Le Pseudo doit être renseigné en lettres minuscules sans accents, sans caractères spéciaux.</a>';
} elseif(strlen($_POST['pseudo'])>15){//le pseudo est trop long, il dépasse 25 caractères
    echo '<a id="annotation">Le pseudo est trop long, il dépasse 15 caractères.</a>';
} elseif(empty($_POST['mdp'])){//le champ mot de passe est vide
    echo '<a id="annotation">Le champ Mot de passe est vide.</a>';
} elseif(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='".$_POST['pseudo']."'"))==1){//on vérifie que ce pseudo n'est pas déjà utilisé par un autre membre
    echo '<a id="annotation">Ce pseudo est déjà utilisé.</a>';
} elseif(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='".$_POST['mail']."'"))==1){//on vérifie que ce mail n'est pas déjà utilisé par un autre membre
    echo '<a id="annotation">Ce mail est déjà utilisé.</a>';
} else {
    
    // INSERT INTO membres VALUES('', 'mail', 'pseudo', 'mdp', NOW);
    if(!mysqli_query($mysqli,"INSERT INTO membres SET pseudo='".$_POST['pseudo']."',mail='".$_POST['mail']."', mdp='".md5($_POST['mdp'])."'", ")){
        echo "Une erreur s'est produite: ".mysqli_error($mysqli);
    } else {
        echo '<a id="annotation">Vous êtes inscrit avec succès!</a>';
        header("Location: postedecontrole.php");
    }
}

connection.php

session_start(); // à mettre tout en haut du fichier .php, cette fonction                 propre à PHP servira à maintenir la $_SESSION
if(isset($_POST['connexion'])) { // si le bouton "Connexion" est appuyé
// on vérifie que le champ "Pseudo" n'est pas vide
// empty vérifie à la fois si le champ est vide et si le champ existe belle et bien (is set)
if(empty($_POST['pseudo'])) {
    echo "Le champ Pseudo est vide.";
} else {
    // on vérifie maintenant si le champ "Mot de passe" n'est pas vide"
    if(empty($_POST['mdp'])) {
        echo "Le champ Mot de passe est vide.";
    } else {
        // les champs sont bien posté et pas vide, on sécurise les données entrées par le membre:
        $Pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES, "ISO-8859-1"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL
        $MotDePasse = htmlentities($_POST['mdp'], ENT_QUOTES, "ISO-8859-1");
        //on se connecte à la base de données:
        $mysqli = mysqli_connect("localhost", "root", "", "domoserre");
        //on vérifie que la connexion s'effectue correctement:
        if(!$mysqli){
            echo "Erreur de connexion à la base de données.";
        } else {
            // on fait maintenant la requête dans la base de données pour rechercher si ces données existe et correspondent:
            $Requete = mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo = '".$Pseudo."' AND mdp = '".$MotDePasse."'");//si vous avez enregistré le mot de passe en md5() il vous suffira de faire la vérification en mettant mdp = '".md5($MotDePasse)."' au lieu de mdp = '".$MotDePasse."'
            // si il y a un résultat, mysqli_num_rows() nous donnera alors 1
            // si mysqli_num_rows() retourne 0 c'est qu'il a trouvé aucun résultat
            if(mysqli_num_rows($Requete) == 0) {
                echo "Le pseudo ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
            } else {
                // on ouvre la session avec $_SESSION:
                $_SESSION['pseudo'] = $Pseudo; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le pseudo
                header("Location: postedecontrole.php");
            }
        }
    }
}

} ?>

Upvotes: 2

Views: 222

Answers (1)

NewBee
NewBee

Reputation: 394

Keep the Attribute of Date column as on update CURRENT TIMESTAMP.

Before updating any row while connecting fetch the value from the Date column to get the old date.

I believe this should work.

Edit:

Registration: During registration, you are creating a new row hence the Date column will get a value. This is your time of registration.

Connecting/Logging In: Make another column in the same table which will keep the status of the user, logged in or logged out. You can update this status each time the user logs in or logs out. The Date cell will get updated as it has on update CURRENT TIMESTAMP attribute.

However, you can achieve this in a number of ways. This is just a method. I personally don't like cookies/js for such purposes so not suggesting it.

Upvotes: 1

Related Questions