Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2011, 15h48   #1
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Par défaut Catchable fatal error sur comparatif de dates

Bonjour, suite au crash d'un ordinateur linux hébergeant une application php+mysql, l'ensemble des fichiers et des bases ont été copiées sur un autre poste, tournant également sous linux.

Une partie de l'objectif de l'appli est de comparer des dates. Pour cela j'ai une classe :

Code :
1
2
3
4
5
6
7
8
9
10
public function    take_date(DateTime $begin, DateTime $end, $type, $com = NULL, $modification=0, $status=NORMAL) {
	$beginDate = $begin;
	$endDate = $end;
	if ($beginDate < $endDate) {
		echo 'OK - Debut : '.$beginDate.' - Fin : '.$endDate;
	} else {
		echo 'Erreur - Debut : '.$beginDate.' - Fin : '.$endDate;
		echo '<br />Erreur - : '.$beginDate-$endDate;
	}
}
Sur l'ancien poste, dont je ne connais ni la version php ni la version mysql, tout tournait parfaitement, maintenant je ne peux plus comparer mes dates.
Par exemple la dernière ligne $beginDate-$endDate me provoque une erreur Catchable fatal error: Object of class DateTime could not be converted to string in /var/www/class.php on line 474. Dernière ligne dans une condition qui d'ailleurs est mal interprétée puisque mon $begin est bien inférieur à mon $end.

Une idée d'où cela peut-il venir ? Je pensais au fait que les versions php ou mysql n'était pas les mêmes...

Merci d'avance.
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 17h05   #2
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Bon en fait il s'agit de 2 erreurs différentes. Catchable fatal error est résolu en forçant le format de sortie, mais le DateTime n'est pas interprété.
Comme je suis sous php 5.2, je pense que le problème vient de là, l'autre devait être une version 5.3.
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 10h55   #3
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 709
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 709
Points : 3 279
Points : 3 279
Salut

Code :
1
2
3
4
5
6
7
8
 
public function    take_date(DateTime $begin, DateTime $end, ... etc ...) {
	$beginDate = $begin;
	$endDate = $end;
	if ($beginDate < $endDate) {
		... etc ...
	}
}
Hormis le soucis de version, il y a à mon sens un souci.
$beginDate et $endDate doivent être des Objets Datetime vu que ceci est déclaré/typé dans la fonction.
Mais faire directement une comparaison comme $beginDate < $endDate à mon avis ça ne peut pas fonctionner, il y a de forte chance que Php tentera de "caster" ces 2 Objets afin de pourvoir faire la comparaison.

Il faudrait que ce soit des valeurs, comme un timestamp par exemple, non ?

J'aurais plus vu quelque chose comme ceci :
Code :
1
2
3
4
5
6
7
 
if ($beginDate->format('U') < $endDate->format('U')) {
    ... etc ...
}
else {
    ... etc ...
}
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h34.


 
 
 
 
Partenaires

Hébergement Web