insérer un timestamp en bdd

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : insérer un timestamp en bdd

Re: insérer un timestamp en bdd

par laurentsch » 16 août 2014, 16:49

J'ai fini par trouver une erreur inavouable... :-*

Re: insérer un timestamp en bdd

par laurentsch » 15 août 2014, 19:31

OK, je viens de passer le type de la colonne de TIMESTAMP à DATE, mais toujours pas d'insertion... :(

Re: insérer un timestamp en bdd

par yann18 » 15 août 2014, 16:39

attention le type timestamp mysql (équivalent à datetime) attend une date et une heure(au format Y-m-d H:i:s) et non un timestamp unix.si l'heure n'est pas renseignée elle sera remplacée par 00:00:00
                 $sql = "INSERT INTO visites (`timestamp1`) VALUES ('".$date->format('Y-m-d')."')";
Après il me semble logique de fixer le type DATE à ta colonne à la place de TIMESTAMP car ne tu stockes que la date.

Re: insérer un timestamp en bdd

par laurentc » 15 août 2014, 14:37

Merci de ton aide ; j'ai 2 fichiers presque identiques (2 versions) ; j'avais bien mis l'affichage des erreurs PHP sur l'un d'eux mais pas le bon ! Grâce à toi, une insertion est faite, mais : 0000-00-00 00:00:00 ...Sachant que la colonne est de type "timestamp", qu'est qui va pas ? (Vais être absent plusieurs heures)

Re: insérer un timestamp en bdd

par yann18 » 15 août 2014, 13:16

bonjour,
  $sql = "INSERT INTO visites (`timestamp1') VALUES ('".$date->getTimestamp()."')";
ta requête sql n'est pas valide car à la place d'une quote inversée(`) tu utilises une quote(').si tu tu travaillais en mode dev, erreurs php activées, tu allais bien pu t’apercevoir que ta requête comporte une erreur.

     if ($date === false)
cette condition ne sera jamais évaluée(quoique qu'elle n'est pas à l'origine de ton problème) car $date attend un objet de type DateTime et ne sera jamais à false ni à true.Autant vérifier, avec instanceof, que $date est bien une instance de type DateTime :

if (empty($_POST['year']) && empty($_POST['month']) && empty($_POST['day']))
{
    echo "remplissez tous les champs !<br/>";
}
else
{
    $date = new DateTime($_POST['year'].'-'.$_POST['month'].'-'.$_POST['day']);
    if (!$date instanceof DateTime)
    {
        echo 'Date invalide';
    }
    else
        {
                echo "<br/>avant insertion<br/>";
                $sql = "INSERT INTO visites (`timestamp1`) VALUES ('".$date->getTimestamp()."')";
                echo "<br/>sql=".$sql."<br/>";
                if( mysqli_query($db, $sql) ===FALSE )  
	        printf("erreur sql  : %s\n", mysqli_error($db));    
    }
}

insérer un timestamp en bdd

par laurentsch » 15 août 2014, 11:35

Bonjour,

je voudrais insérer une date au format timestamp dans la bdd. Pour que la saisie soit claire, l'utilisateur saisit une date puis celle-ci est convertie en timestamp et insérée en bdd, mais cette dernière étape ne fonctionne pas (pas d'insertion mais pas de message d'erreur PHP malgré l'activation de l'affichage et pas d'erreur SQL quand je teste la requête (que j'affiche) avec un PDO en mode exception. Donc où est le problème ?
if (empty($_POST['year']) || empty($_POST['month']) || empty($_POST['day']))
{
    echo "remplissez tous les champs !<br/>";
}
else
{
    $date = new DateTime($_POST['year'].'-'.$_POST['month'].'-'.$_POST['day']);
    if ($date === false)
    {
        echo 'Date invalide';
    }
    else
	{
		echo "<br/>avant insertion<br/>";
		$sql = "INSERT INTO visites (`timestamp1') VALUES ('".$date->getTimestamp()."')";
		echo "<br/>sql=".$sql."<br/>";
                $qry = mysqli_query($db, $sql);       
    }
}