Page 1 sur 1

Pb de type de variable sur getTimestamp()

Posté : 18 mai 2012, 22:54
par pascalibus
Bonjour,

J'ai un problème de comparaison de variables je pense.
J'ai une date enregistrée dans ma base de données sous la format datetime (donc 0000-00-00 00:00:00) et je souhaite la comparer avec la date du jour.

J'essaye d'utiliser la fonction getTimestamp() mais rien à faire.
Ma variable $datedb ne veut pas passer à la moulinette !

J'arrive à l'afficher mais son type n'est pas accepté par l'instruction: $date2 = $datedb->getTimestamp();
J'ai ce message d'erreur: Fatal error: Call to a member function getTimestamp() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/curiouscard/ENREGISTRERCARTE/enregistrer.php on line 52

Qui peut m'aider à finir cette comparaison de date en PHP ?
Ca fait des heures que je suis là dessus...
Je voudrais simplement obtenir un nombre exprimant la différence entre deux dates.
Je veux m'assurer que 10 minutes sont bien passées entre la date actuelle ($datelue dans mon code) et la date enregistrée dans la base ($datedb dans mon code)

Un p'tit coup de main svp, voilà 4 heures que je bloque là dessus :-(

Code : Tout sélectionner

// Ouverture de la connection $connexion = mysql_connect("localhost","root",""); // Selection de la base de donnée. mysql_select_db ("mabase"); //On va tester si le dernier enregistrement remonte au moins à 10 minutes $sql = 'Select max(DATE_enreg) from localisation where localisation.name = "'.$nomdelacarte.'" LIMIT 1;'; $result=mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); $datelue=mysql_fetch_array($result); //print($datelue[0]); $datedb = $datelue[0]; print ("<BR>Datedb:".$datedb); //Calcul du nombre de minutes ecoulées depuis dernier enregistrement //Il faut au moins 10 minutes de delai pour pouvoir enregistrer une nouvelle position dans la base de données. $date = new DateTime(); $date1 = $date->getTimestamp(); echo '<BR><BR>Date actuelle:'.$date1 ; $date2 = $datedb->getTimestamp(); echo '<BR>'.$date2 ; etc... $comparaison = comparaison entre les deux dates

Re: Pb de type de variable sur getTimestamp()

Posté : 19 mai 2012, 00:11
par xTG
Utilises plutôt la fonction format() de la class DateInterval.
Car là tu affiches les minutes, mais il y a peut être des heures, des jours, des mois, ect.

Re: Pb de type de variable sur getTimestamp()

Posté : 19 mai 2012, 00:16
par pascalibus
Utilises plutôt la fonction format() de la class DateInterval.
Car là tu affiches les minutes, mais il y a peut être des heures, des jours, des mois, ect.
Tu peux me donner un exemple de syntaxe ?
J'ai essayé cette fonction mais je ne suis pas fortiche en PHP et je n'ai pas réussi à la mettre en oeuvre.

Impossible pour moi d'utiliser quoi que ce soit tant que ma variable ne passe pas dans la fonction diff() !

Je ne peux pas appliquer le code ci dessous car ma $datedb ne rentre pas dans la fonction diff(), j'ai un message d'erreur.

Comment convertir ma variable $datedb au format datetime ?
Je crois que c'est la source de tous mes ennuis.
Elle provient d'une requête SQL et donc est de type string ?
Comment la convertir dans le bon format ?


<?php

$january = new DateTime('2010-01-01');
$february = new DateTime('2010-02-01');
$interval = $february->diff($january);

// %a affichera le nombre total de jours...
echo $interval->format('%a jours au total')."\n";

// ...alors que %d n'affichera que le nombre de jours non encore couverts
// dans le mois.
echo $interval->format('%m mois, %d jour');

?>

Re: Pb de type de variable sur getTimestamp()

Posté : 19 mai 2012, 10:44
par xTG
Tu as un message d'erreur ? Bah commençons par le début alors...
Quel est-il ? Car on est pas devin. ;)

Re: Pb de type de variable sur getTimestamp()

Posté : 19 mai 2012, 22:00
par pascalibus
Bah le problème c'est que rien n'est clair dans ce domaine, même dans la doc...
Je crois que j'ai essayé toutes les fonctions et les formats disponibles pour finalement réussir à obtenir un truc sans erreur.

J'ai passé énormément de temps à trouver une syntaxe correcte en local.
Au final, une fois mis en ligne sur mon serveur j'ai eu droit à d'autres erreurs tout aussi incompréhensibles.

Bref, j'ai réussi au final à produire un code qui tourne mais franchement c'est galère.

Chaque changement de version PHP apporte ses nouveautés et ses problèmes.
Je trouve vraiment curieux que la comptabilité ascendante ne soit pas assurée sur un langage aussi utilisé.

L'exemple qui me vient à l'esprit est le nouveau traitement des variables session.
A part compliquer la tâche des programmeurs, je ne vois pas l'intérêt d'opérer des changements aussi casse-pieds.
Réécrire des pages de code à chaque fois c'est franchement une grosse perte de temps.

Il y a avait très longtemps que je n'avais pas produit de code PHP mais très franchement ce que j'ai découvert ne me donne pas envie d'y revenir...

J'ai bossé sur un projet humanitaire et il et (presque) bouclé car j'ai des tas de mauvaises surprises à la mise en ligne (mon serveur local est pourtant en PHP5 aussi)
Sans parler des pbs de syntaxe SQL 'case sensitive': un 't2' qui provoque une erreur dans une requête en lieu et place d'un 'T2', j'ai eu du mal à la trouver celle là !

Bref, je trouve que tout cela ne va pas dans le bon sens.

Heureusement qu'il existe des forums comme celui-ci pour essayer de turer son épingle du tas de foin...

Re: Pb de type de variable sur getTimestamp()

Posté : 19 mai 2012, 22:15
par xTG
Tu ne parlerais tout de même pas de cette horrible configuration qu'est le register_globals ?
C'est une faille de sécurité grosse comme le poings...
Car certes tu récupères ton $_SESSION['var'] via $varc'est plus simple.
MAIS ! Qui te dit qu'en fait tu ne traites pas $_GET['var'] en fait ?
Bref on aura beau tout dire sur cette configuration, elle est à 99.99999% mal utilisée car le développeur ne sécurise rien.

Quand à la case sensitive... On appelle pas un chat un mouton. ;)

Re: Pb de type de variable sur getTimestamp()

Posté : 20 mai 2012, 10:15
par pascalibus
[quote="
Quand à la case sensitive... On appelle pas un chat un mouton. ;)[/quote]

Je tiens cette remarque d'un de mes amis expert en bases de données...
Il parle SQL comme je parle Français et a été très étonné de cette erreur ;-)
En principe une variable t2 est reconnue aussi en tant que T2, ça a toujours fonctionné comme ça pour moi en tout cas.

Pour l'histoire des failles de sécurité, la syntaxe n'a rien à y voir:
On peut très bien continuer à utiliser une syntaxe particulière si la faille a été corrigée !
Je demande juste qu'on ne rende pas obsolètes des trucs hyper utilisés par tous, c'est un peu comme si on décidait de supprimer la syntaxe des variables transmises par les formulaires.
Imaginez le boulot !
En ce qui concerne la mauvaise utilisation des structures et des syntaxes, c'est justement en changeant tout à tout bout de champ qu'on ne prend plus la peine d'étudier la nouvelle mouture à fond. En général quznd on remet les mains dans un 'vieux' code pour le mettre à jour c'est assez dans l'urgence...

Mes arguments tiennent la route je pense.
J'ai une formation de chef de projet en informatique, fonction que j'ai exercée par le passé.
On a pas forcément besoin de maitriser les subtilités du langage quand on fait faire les choses, c'était mon cas.
Il suffit jsute de savoir de quoi on parle et comment ça marche, mais côté programmation c'est l'horreur quand on revient sur un code qui a ne serais-ce que deux ou trois ans.

Mon exemple est criant: j'utilise un serveur local et distant en PHP5.
Les deux versions ne sont pas les mêmes mais c'est du PHP5 bon sang !
Je n'arrive pas à comprendre qu'une syntaxe fonctionne parfaitement en local sur une version et pas sur l'autre et que des syntaxes disparaissent au grès des envies d'on ne sait qui.

Il y a là un VRAI problème.
C'est celui là que je voulais souligner et pour lequel je dis que les développeurs du PHP ne vont pas dans le bon sens !
Ca ne me semble pas du tout productif tout ça...

Mais bon, mon code tourne, merci au PHP quand même ;-)

Re: Pb de type de variable sur getTimestamp()

Posté : 20 mai 2012, 14:19
par xTG
Bah ce n'est pas une faille de sécurité de PHP, mais une configuration qui n'est pas connue de tout le monde (surtout son implication en terme de code en fait) et qui apporte des codes qui ouvrent des failles de sécurité justement...
Donc au contraire la modification de cette propriété par l'équipe PHP est une très bonne chose car plus de 60% des développeurs n'y faisaient pas attention et pondaient des codes offrant de magnifiques failles. (cf mon exemple avec $_GET et $_SESSION)
Mais saches que tu peux très bien modifier ton php.ini et réactiver cette fonctionnalité.