Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1248 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  timestamp foire sur serveur unix.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

timestamp foire sur serveur unix.

n°1237278
Siron
Posté le 03-11-2005 à 11:35:30  profilanswer
 

Bonjours, j'utilise la fonction timestamp, et il y'a un problème.
 
La seule chose que ça me retourne c'est soit 01/01/1970 @ 01h00 soit 19/01/2038 @ 04h14.
 
J'ai lu que ça venait d'un problème de compatibilté avec le timestamp de unix.
 
J'aimerai savoir comment contourner le problème ?
 
Merci d'avance.
 
Siron

mood
Publicité
Posté le 03-11-2005 à 11:35:30  profilanswer
 

n°1237322
bl@p_psx
Admin G15-france
Posté le 03-11-2005 à 11:56:51  profilanswer
 

Siron a écrit :

Bonjours, j'utilise la fonction timestamp, et il y'a un problème.
 
La seule chose que ça me retourne c'est soit 01/01/1970 @ 01h00 soit 19/01/2038 @ 04h14.
 
J'ai lu que ça venait d'un problème de compatibilté avec le timestamp de unix.
 
J'aimerai savoir comment contourner le problème ?
 
Merci d'avance.
 
Siron


bien bien, et ton pb c'est koi ???


Message édité par bl@p_psx le 03-11-2005 à 11:57:19

---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
n°1237362
Siron
Posté le 03-11-2005 à 12:19:27  profilanswer
 

Citation :

J'aimerai savoir comment contourner le problème ?


 
Mon problème : je ne sais pas comment contourner le problème.

n°1237372
shakpana
des fois, j'me demande ...
Posté le 03-11-2005 à 12:25:10  profilanswer
 

Siron a écrit :

Bonjours, j'utilise la fonction timestamp, et il y'a un problème.


et timestamp de quoi ?
je veux dire : vu que la fonction timestamp() n'existe pas en fonction intégrée à php ...
Parlerais-tu de mysql ? ou bien d'autre chose encore ...


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
n°1237409
Roane
Pingouino's fan
Posté le 03-11-2005 à 12:59:30  profilanswer
 

Siron a écrit :

Citation :

J'aimerai savoir comment contourner le problème ?


 
Mon problème : je ne sais pas comment contourner le problème.


 
Ok lol  [:jar jar]


---------------
http://www.alsacreations.com, http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net. A ne surtout pas prendre en exemple : http://www.worldinternet.be
n°1237411
Siron
Posté le 03-11-2005 à 13:04:34  profilanswer
 

timestamp de mysql.
 
Je l'utilise comme variable pour savoir quand un post à été posté.
Le code source fonctionnait sous un serveur windows, et maintenant je l'ai repris mais sur un serveur unix.
 
Y'a pas une variable équivalente sous mysql qui est compatible avec celle de linux (avec la date et l'heure) ?


Message édité par Siron le 03-11-2005 à 13:04:58
n°1237412
backdafuck​up
Back to da old skool
Posté le 03-11-2005 à 13:05:03  profilanswer
 

C'est vendredi ?

n°1237417
sircam
I Like Trains
Posté le 03-11-2005 à 13:14:25  profilanswer
 

[:dawa]
 
 
 
 
 
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1237419
sircam
I Like Trains
Posté le 03-11-2005 à 13:17:56  profilanswer
 

Il faut tout de même le remarquer : ça parle de MySQl et de Unix, ça n'a ni queue ni tête, et où ça attérit ? Dans la cat PHP.
 
Cette cat agit comme un aimant.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1237422
Roane
Pingouino's fan
Posté le 03-11-2005 à 13:26:17  profilanswer
 

Un aimant à quoi ?  
 
C'est la question [:pingouino]


---------------
http://www.alsacreations.com, http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net. A ne surtout pas prendre en exemple : http://www.worldinternet.be
mood
Publicité
Posté le 03-11-2005 à 13:26:17  profilanswer
 

n°1237481
Siron
Posté le 03-11-2005 à 14:05:16  profilanswer
 

Citation :

mysql_query("INSERT INTO siron_blog VALUES('', '" .$titre . "', '" . time() . "', '" . $style . "', '" . $remarque . "', '" . $texte . "', '" . $blog_img . "')" );


 
Et quand je veux afficher la data avec la fonction date() :::    <? echo date('d/m/Y \@ H\hi', $timestamp); ?>
 
Et j'ai bien la variable timestamp en 3 iem position dans la table adéquate.
 
Ca ne m'affiche qu'une des 2 dates cité plus haut.
 
or j'ai lu sur un site :  
 

Citation :


Dans un soucis de faciliter le stockage et le traitement d'une date entre MySQL et PHP j'utilise le format INT car il y a une incompatibilité entre le TIMESTAMP MySQL et le TIMESTAMP Unix.


 
j'en ai déduit que c'est la cause de problème.
 
je me plante completement ?

Message cité 1 fois
Message édité par Siron le 03-11-2005 à 14:07:57
n°1237567
shakpana
des fois, j'me demande ...
Posté le 03-11-2005 à 14:46:06  profilanswer
 

Siron a écrit :

or j'ai lu sur un site :


faut pas croire tout ce qu'on lit sans vérifier de quoi ça cause ...
un MySQL TIMESTAMP n'a rien à voir avec un UNIX TIMESTAMP
sinon oui, un tournevis est incompatible avec un clou
[:pingouino]
 
edit : et stocker une date dans un int ... pfff ...

Message cité 1 fois
Message édité par shakpana le 03-11-2005 à 14:49:35

---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
n°1237570
sircam
I Like Trains
Posté le 03-11-2005 à 14:47:20  profilanswer
 

shakpana a écrit :

sinon oui, un tournevis est incompatible avec un clou
[:pingouino]


 :non: Ca ne vaut pas sur la catégorie PHP. Ici, tout est possible, même poster du MySQL / Unix.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1237577
shakpana
des fois, j'me demande ...
Posté le 03-11-2005 à 14:53:06  profilanswer
 

héhé, j'oubliais, tu as raison, un bon coup de pelle à clou(tm) et y'a pu de tournevis qui tienne ...


Message édité par shakpana le 03-11-2005 à 14:53:19

---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
n°1237595
Siron
Posté le 03-11-2005 à 15:06:04  profilanswer
 

Bon soit.
 
Et qu'est ce qui pourrait provoquer le problème alors ?
 
Le serveur oublie de garder l'heure ?
 

n°1237654
sircam
I Like Trains
Posté le 03-11-2005 à 15:36:18  profilanswer
 

Ouais. Un coup de pelle à clous (tm) ? [:itm]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1237665
omega2
Posté le 03-11-2005 à 15:41:13  profilanswer
 

attente de la fonction date de php : le nombre de seconde depuis le premier janvier 1970 à minuit. (voir  [:rtfm] )
exemple de valeur retourné par mysql : 2005-11-03 15:39:19 (simple test : j'ai créé une colone timestamp dans une table, j'y ai affecté now() et j'ai fait un select * derriére [:airforceone] )
 
Y aurait pas comme un probléme de logique quelque part dans ta façon de faire?
 
EDIT : La prochaine fois qu'on te dit que ca a rien à voir même si ca porte le même nom, t'auras intéret à avoir le réflexe [:rtfm] et le réflexe test étape par étape, par ce que certain risquent de pas te louper le prochain coup.


Message édité par omega2 le 03-11-2005 à 15:45:21
n°1237709
Roane
Pingouino's fan
Posté le 03-11-2005 à 15:58:15  profilanswer
 
n°1237762
Siron
Posté le 03-11-2005 à 16:37:17  profilanswer
 

Je trouve pas de problème de logique.
 
En fait le code n'est pas de moi.
Et jusqu'a hier je connaissais casi rien en php et rien en mysql, et comme je suis forcé d'adapter le code au serveur de base de donnée sans aucune info sur les tables ou quoi, j'apprends sur le ta pour comprendre.
 
Normallement y'a aucun problème avec la logique pour sauvegarder la date et l'heure et les affichers, ça marche très bien chez la personne qui m'a donné le code, et j'ai rien du modifier dans cette partie.
 
c'est comme si la fonction time() ne fesait pas son travail, ou encore que la variable timestamp de la table oubliait son contenu.
 
la syntaxe est bonne la :
 

Citation :

mysql_query("INSERT INTO siron_blog VALUES('', '" .$titre . "', '" . time() . "', '" . $style . "', '" . $remarque . "', '" . $texte . "', '" . $blog_img . "')" );


?


Message édité par Siron le 03-11-2005 à 16:41:18
n°1237862
omega2
Posté le 03-11-2005 à 17:19:27  profilanswer
 

lol, je récapitule ce que je devine :  

  • tu mets un nombre dans une colone timestamp sans vérifier que l'insertion c'est bien passé. (pas de mysql_affected_rows )
  • Et quand tu relis tes données, tu utilises le résultat sans vérifier que t'as reçu quelque chôse. (pas de mysql_num_rows ni de test sur la variable retourné par la requette)  
  • Et je parirais que s'il y a eu des messages d'alerte tu les as caché en utilisant un @. (voire tu l'y a mis dessuite pour faire comme dans les exemple de tel ou tel pas trés bon site de tutoriel)


Résultat?  

  • T'as rien inséré dans mysql. (message d'erreur de mysql : "Incorrect datetime value: 'lenombre' for column 'madate' at row 1" que tu n'as pas pu voir s'afficher vu que tu n'as pas pris la peine de vérifier que ca s'est bien affiché)
  • Tu recois rien (rien = "" pour une chaine et 0 pour un nombre) quand tu vérifie plus tard mais tu t'en rends pas compte faute d'avoir vérifier comme il faut.
  • la fonction date de php te retourne ensuite une date bidon vu qu'elle recoit elle même une donnée 100% bidon.


 
 
Est ce que j'ai raison dans mes hypothéses ou est ce que j'ai tord? Dans tous les cas, maintenant on va arrêter de tous perdre notre temps à jouer au chat et à la souris au fond des bois un soir d'hivers et on va faire les chôses dans l'ordre :
Etape 1 : Montre nous ton code et pas jsute une ligne qui se balade toute seule. (on véra ensuite pour les autres étapes)


Message édité par omega2 le 03-11-2005 à 17:19:53
n°1237915
Siron
Posté le 03-11-2005 à 17:42:41  profilanswer
 

Ben tu as raison.
 
Je connais pas vraiment le php et mysql, je peux +- comprendre un code avec l'aide d'un dico php et mysql, mais je ne peux en aucun cas dire si la méthode utilisée est efficiente et pertinente pour : le resultat recherché et la securité.
 
Envoit des données sur la base mysql :
 

Citation :


//On écrit dans la db MySQL
if (isset($texte))
{
mysql_query("INSERT INTO siron_blog VALUES('', '" .$titre . "', '" . time() . "', '" . $style . "', '" . $remarque . "', '" . $texte . "', '" . $blog_img . "')" );
}


 
Ici la date est l'heure sont indiqué par time().
 
Réception des données :
 

Citation :

$retour = mysql_query('SELECT * FROM siron_blog ORDER BY id DESC LIMIT ' . $premiereNews . ', ' . $NewsParPage);


 
Traitement :
 

Citation :

while ($donnees = mysql_fetch_array($retour)) //Les arranger en array
  {
  //Quelques transformations de variables
  $id = $donnees['id'];
  $titre = stripslashes($donnees['titre']);
  $timestamp = $donnees['timestamp'];
  $style = stripslashes($donnees['style']);
  $remarque = stripslashes($donnees['remarque']);
  $texte = nl2br(stripslashes($donnees['texte'])); //nl2br génère les entrée html, stripslashes vire les backslashs de sécurité
  $blog_img = $donnees['blog_img'];  
  //Compteur de mots et chars
 
  $word = split(" *[][ ,.;:?!'\"{()}] *", $texte);
  $nbr_word = count($word);
  $nbr_char = strlen($texte);


 
Affichage de la date et heure :
 

Citation :

<? echo date('d/m/Y \@ H\hi', $timestamp); ?>


 
Voila, j'espere que j'ai rien oublié.
 
Dans tous les cas, le systeme fonctionne (en excluant les erreurs de syntaxes qui auraient pu être corrigées) sur 2 autres serveurs avec la même logique.


Message édité par Siron le 03-11-2005 à 17:43:10
n°1237951
omega2
Posté le 03-11-2005 à 18:11:04  profilanswer
 

Rajoute les deux lignes suivantes

Code :
  1. echo "nombre de lignes insérés :".mysql_affected_rows();
  2. echo "derniére erreur détecté par mysql :".mysql_error();

entre la ligne d'insertion des données dans mysql et la ligne d'aprés.
 
Rajoute un

Code :
  1. echo "nombre de lignes insérés :".mysql_num_rows();

entre la ligne commencant par "$retour = mysql_query" et la suivante.
 
Rajoute un

Code :
  1. print_r($donnees);

juste aprés la ligne "while ($donnees = mysql_fetch_array($retour)) //Les arranger en array"
 
Tout ça permettra de voir s'il y a un probléme et à quel niveau.
 
 
PS : C'est normal d'avoir un peu de mal quand on se lance dans la modif d'un script qu'est pas de nous tout en débutant. Le fait de rajouter des echo et des print_r bien placé permet de vérifier le contenu de certaines variables ou le résultat de certaines fonctions.

n°1237986
Siron
Posté le 03-11-2005 à 18:40:42  profilanswer
 

Pour l'insertion de donné, il me met :
 
1 ligne inséré et aucun nombre pour erreur detecté.
 
Pour l'afficheage des données j'ai :
 

Citation :

Warning: Wrong parameter count for mysql_num_rows() in /home/irision/www/blog/admin/blog.php on line 70
nombre de lignes insérés :Array ( [0] => 28 [id] => 28 [1] => Titre abd [titre] => Titre abd [2] => 00000000000000 [timestamp] => 00000000000000 [3] => style abd [style] => style abd [4] => rem abd [remarque] => rem abd [5] => Voici un texte [texte] => Voici un texte [6] => [blog_img] => )
[-]
Titre:  Titre abd
Time: 01/01/1970 @ 01h00
Style.style abd
Remarque: rem abd
 
Voici un texte


 
Et y'a que la date qui foire, toutes les autres données sont bien la.
 
En tout cas merci de m'aider.


Message édité par Siron le 03-11-2005 à 18:44:21
n°1238008
shakpana
des fois, j'me demande ...
Posté le 03-11-2005 à 19:03:37  profilanswer
 

Je reprends le fil ...
 
la valeur renvoyer par time() donne par exemple 1131041007 (c'était y'a qlq minutes)
un champ MySQL TIMESTAMP à le format DATETIME, la doc :
 

Citation :

The DATETIME, DATE, and TIMESTAMP types are related. This section describes their characteristics, how they are similar, and how they differ.  
 
The DATETIME type is used when you need values that contain both date and time information. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. (``Supported'' means that although earlier values might work, there is no guarantee that they will.)


 
donc faire rentrer 1131041007 dans un format 'YYYY-MM-DD HH:MM:SS' ne peut fonctionner (clous / tournevis), et malheureusement la doc nous dit aussi que les dates mal-formattées sont silencieusement mises à 0000-00-00 00:00:00 dans les versions pré-v5.0.2 ou ALLOW_INVALID_DATES était le mode par défaut.

Citation :

Starting from MySQL 5.0.2, MySQL will give warnings/errors if you try to insert an illegal date. You can get MySQL to accept certain dates, such as '1999-11-31', by using the ALLOW_INVALID_DATES SQL mode. (Before 5.0.2, this mode was the default behavior for MySQL).


conclusion il faut transformer time() pour matcher 'YYYY-MM-DD HH:MM:SS', par ex. date('Y-m-d H:i:s')
 
maintenant si tu veux absolument un TIMESTAMP UNIX, tes requêtes
SELECT FROM_UNIXTIME(1131041007);
SELECT UNIX_TIMESTAMP('2005-11-03 19:03:27');
 


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
n°1238009
omega2
Posté le 03-11-2005 à 19:03:59  profilanswer
 

Quand tu vois la valeur de timestamp, le comportement de la fonction date est normale. A la place d'un champ timestamp, il aurait falut utiliser un champ integer (ou bigint peut être) afin de pouvoir stocker le nombre de seconde en question et non pas uen date à la forme "yyyy/mm/dd hh/nn/ss".
 
Au fait, petite optimisation : à la place de  

Code :
  1. while ($donnees = mysql_fetch_array($retour)) //Les arranger en array

utilise

Code :
  1. while ($donnees = mysql_fetch_array($retour, MYSQL_ASSOC)) //Les arranger en array

MYSQL_ASSOC indique à la fonction de créer une tableau où les noms des indices seront ceux des colones retourné par la requette et de ne pas créer d'indice numérique. Le tableau sera donc deux fois plus petit qu'actuellement.


Message édité par omega2 le 03-11-2005 à 19:07:30
n°1238022
Siron
Posté le 03-11-2005 à 19:21:32  profilanswer
 

J'ai modifier comme ça :
 

Citation :

mysql_query("INSERT INTO siron_blog VALUES('', '" .$titre . "', '" . date('Y-m-d H:i:s') . "', '" . $style . "', '" . $remarque . "', '" . $texte . "', '" . $blog_img . "')" );


 
Et maintenant j'ai 19/01/2038 @ 04h14 tout le temps.
 
Peut être que mon code est une machine à voyager dans le temps ?
 
En fait si je comprends bien : c'est pas parceque j'ai pas parceque j'ai pas un champ timestamp que je peux pas utiliser timestamp ?
Si je mets le champ timestamp de la table en int, plus de problème ?

Message cité 1 fois
Message édité par Siron le 03-11-2005 à 19:22:32
n°1238028
Siron
Posté le 03-11-2005 à 19:26:10  profilanswer
 

J'ai changé dans ma table le timechamp en type int, et c'est bon ça marche.
En fait j'avais été abusé par le nom timestamp en pensent que ça allait d'office avec un nom de champ de table timestamp.
Merci encore pour l'aide.
 
Et sinon omega2, avec ton optimisation je dois rien changer d'autre ?

Message cité 1 fois
Message édité par Siron le 03-11-2005 à 19:26:35
n°1238044
shakpana
des fois, j'me demande ...
Posté le 03-11-2005 à 19:45:46  profilanswer
 

Siron a écrit :

Et maintenant j'ai 19/01/2038 @ 04h14 tout le temps.
 
Peut être que mon code est une machine à voyager dans le temps ?
 
En fait si je comprends bien : c'est pas parceque j'ai pas parceque j'ai pas un champ timestamp que je peux pas utiliser timestamp ?
Si je mets le champ timestamp de la table en int, plus de problème ?


oui, c'est bizzard ...
 
tu pourrais faire

Code :
  1. echo time()."<br />\n";
  2. echo date('Y-m-d H:i:s')."<br />\n";

histoire de voir si ça te retourne des valeurs correctes ...
 
EDIT : et si tu faisais un echo de ta requête, ça pourrais servir ...  
et un 2ème echo de la valeur "timestamp" récupérée sans formattage aucun ie pas de date() ça semble obvious mais on sait jamais ...
 
Sinon, le int, encore une fois, utilisons les choses pour ce quoi elles sont faites, non ?


Message édité par shakpana le 03-11-2005 à 20:16:28

---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
n°1238194
Siron
Posté le 03-11-2005 à 21:13:03  profilanswer
 

Citation :


Sinon, le int, encore une fois, utilisons les choses pour ce quoi elles sont faites, non ?
 


 
Ben oui mais bon, moi je savais pas.
 
Sinon pour les essais, je les ferai mais aps tout de suite, car j'ai encore pas mal de pain sur la planche.

n°1238309
omega2
Posté le 03-11-2005 à 22:54:13  profilanswer
 

Siron a écrit :

J'ai changé dans ma table le timechamp en type int, et c'est bon ça marche.
En fait j'avais été abusé par le nom timestamp en pensent que ça allait d'office avec un nom de champ de table timestamp.
Merci encore pour l'aide.
 
Et sinon omega2, avec ton optimisation je dois rien changer d'autre ?


L'optimisation dont je t'ai parlé, c'est juste pour éviter la création des indices numériques. Les autres indices (ceux qui correspondent aux noms de colones) ne sont pas touchés par cette optimisation. Donc tant que t'utilises pas des $donnees[2] (par exemple), tu n'auras rien d'autre à modifier.

n°1238989
Siron
Posté le 04-11-2005 à 17:54:42  profilanswer
 

Ok, je l'ai appliquée et y'a rien qui est parti en couille.
 
Merci pour l'aide.
 
Prochaine étape ::> codé un nouveau systeme d'identification pour admin avec des sessions, mais la ça devrait aller, car j'ai déjà coder une page de test avec session et ça marche bien.


Message édité par Siron le 04-11-2005 à 17:55:01
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  timestamp foire sur serveur unix.

 

Sujets relatifs
(Apache] Monitorer un serveur Apache?fichier non accessible pr un visiteur, mais oui pr le serveur [resolu]
Transfert FTP d'un serveur à l'autreProblème Requete / Timestamp
Créer mon propre serveur avec hmailserverServeur ftp wanadoo + php webgallery
insertion de lignes dans une collection de fichiers unixinsertion de lignes dans une collection de fichiers unix
insertion de lignes dans une collection de fichiers unix[unix] surveiller les opérations effectuées dans un dossier
Plus de sujets relatifs à : timestamp foire sur serveur unix.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR