probleme pour comparer une date avec une date sql

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 : probleme pour comparer une date avec une date sql

par abricot » 22 janv. 2007, 19:32

Salut Ajoloca ;)

J'ai tout compris le code, exepté cette ligne :
if (false === ($ressource = mysql_query($query))) { 
   die('ERR_SQL :<br />' . $query . '<br />' . mysql_error()); 
} 
Alors je ne comprend pas pourquoi tu as utilisé cette ligne, pour moi elle signifie : Si erreur mysql_query alors die();
Pourquoi ne pas avoir utilisé : mysql_query("nanananan") or die ("nananan");

par Ajoloca » 21 janv. 2007, 03:30

Re,

Maintenant que tu as compris "STR_TO_DATE()" et ===
Où en est le PB de départ (comparaison de date PHP <->MySQL) ?

par Ajoloca » 21 janv. 2007, 03:08

C'est exactement ça à condition que tu n'oublies pas que ça vaut pour tous les types que supporte PHP.

Comme te le conseille Truc maintenant que tu as déjà une bonne approche fais un petit tour dans la doc, je te redonne le lien

par abricot » 21 janv. 2007, 03:04

C'est beaucoup plus clair maintenant, j'ai changé $var en 0, pour voir, je savais pas que le == pouvait interpreter autant de choses differentes par contre le === test vraiment la valeur de la variable si $var = 0 pour if($var === 0) $var n'est pas false, il est 0, par contre pour if ($var == 0) $var est 0, '0', et false, j'ai bien compris cette fois? c'est fou lol

par Truc » 21 janv. 2007, 02:58

Commentaires :
$var = 'false';

if(false == $var){
// Faux car $var est une chaine de caractères qui vaut "false" mais qui n'est ni 0 ni false (booléen)
echo "la ma boucle vas marcher";
}
elseif(false === $var){
// Vrai, car pas le même type booléen != String
echo "la par contre elle ne marchera pas";
}

$var = 0;

if(false == $var){
// Vrai
echo "la ma boucle vas marcher";
}
elseif(false === $var){
// Faux, car booléen != int (entier)
echo "la aussi elle devrait marcher";
}
Un peu de doc :)

par Ajoloca » 21 janv. 2007, 02:53

Re,
C'est pas exactement ça.
Le === teste la valeur et le type, mais ce type peut être autre que booléen (tous les types supportés par PHP).
Quand tu fais $var = 'false'; tu affectes à la variable var la chaine de caractères f + a + l + s + e , en gros tu lui donnes la valeur du mot false et non la valeur false (faux).
Recopie ses lignes et exécute-les, ça t'aidera à comprendre.
<?php
$var = false; // Pas de guillemets ou apostrophes
echo '<h1>$var vaut false</h1><h2>La condition est ==</h2>';

if ($var == 0) {
   echo 'Dans la condition avec la valeur 0<br />';
}
if ($var == '0') {
   echo 'Dans la condition avec la valeur \'0\'<br />';
}
if ($var == false) {
   echo 'Dans la condition avec la valeur false<br />';
}
echo '<h2>La condition est ===</h2>';
f ($var === 0) {
   echo 'Dans la condition avec la valeur 0<br />';
}
if ($var === '0') {
   echo 'Dans la condition avec la valeur \'0\'<br />';
}
if ($var === false) {
   echo 'Dans la condition avec la valeur false<br />';
}
?>

par abricot » 21 janv. 2007, 02:39

ok donc le === ne traite que des variables booléenes alors que la condition == vas prendre en compte plusieurs parametres par exemple (je ne sais pas si ca s'ecris mais c'est juste pour voir si j'ai bien compris):
$var = 'false';

if(false == $var){
echo "la ma boucle vas marcher";
}
elseif(false === $var){
echo "la par contre elle ne marchera pas";
}

$var = 0;

if(false == $var){
echo "la ma boucle vas marcher";
}
elseif(false === $var){
echo "la aussi elle devrait marcher";
}

par Ajoloca » 21 janv. 2007, 02:25

Bonsoir,

En va tenter une autre approche.
Ceci
if(false === $var) {
   .....
}
équivaut à dire si $var est du type booléen et que sa valeur est 0 (qui est la façon de représenter false par oposition à 1 qui est la valeur true)
Si je me contente de
if(false == $var) {
   .....
}
Je rentrerai dans la condition si
$var = 0, ou bien $var = '0', ou bien $var = false

Alors que dans le premier cas (===) je ne rentrerai que si $var vaut réellement false

par Ultim4T0m » 21 janv. 2007, 02:00

C'est juste une question de type. Désolé pour les explications incompréhensibles, j'ai tenté de faire de mon mieux ^^'

par abricot » 21 janv. 2007, 01:52

re et desolé de ne pas avoir répondu plus tot.
Je sais ce qu'est un operateur ternaire, c'est ton code que je ne comprend pas. Il y a une petite lumiere dans ma tete qui me dit que pour tester deux chiffres il ne faut pas mettre de '', par exemple $var = 0 et pas $var = "0".
Mais ton code j'arrive pas à le dechiffrer, je vais plutôt aller faire des recherches sur ce fameux === que je ne comprend pas.

par Ultim4T0m » 19 janv. 2007, 13:47

Re,

Pour comprendre ce bout de code, revois la structure d'un opérateur ternaire : http://www.phpfrance.com/forums/voir_sujet-14111.php
// Ici, on affiche si le nombre 0 est égal ou différent du caractère '0'
echo (0=='0') ? "0=='0'" : "0!='0'";

// Ici, on affiche si le nombre 0 est égal et de même type que le caractère '0'
echo (0==='0') ? "0==='0'" : "0!=='0'";
Dans le test, on compare un nombre à un caractère. PHP étant très souple, il ne s'occupe pas du type de données à comparer dans le cas d'un "==".

Mais cela n'a pas vraiment de lien avec le sujet du topic. J'espère juste que tu as compris ce bout de code tentant d'expliquer la différence entre "==" et "==="... Une petite recherche sur ce forum devrait pouvoir t'apporter plus d'éléments de réponse.

par cemice » 19 janv. 2007, 12:49

moi cela fonctionne sur une de mes sources cest tout ce que je peux te dire :o)

par Ajoloca » 19 janv. 2007, 12:27

pour comparer une date php avec une date mysql voici le code :
<?php 

$date   = date("Y-m-d"); 

$result = ("SELECT date FROM tatable WHERE date = '$date'");  
$req    = mysql_query($result) or die('Erreur SQL !<br>'.$result.'<br>'.mysql_error()); 
$ligne  = mysql_fetch_array($req); 

$db = explode("-", $ligne['mdate']); 
$d1 = mktime(0, 0, 0, $db[1], $db[2], $db[0]); 
$dm = explode("-", $date); 
$d2 = mktime(0, 0, 0, $dm[1], $dm[2], $dm[0]); 

if ($d1 < $d2) 
{ 
echo "la date n\'est pas pareil"> 

} else
echo "la date est pareil";

?> 
cela devrait marcher avec ceci
Ce code ne peut pas fonctionner,
Tu utilises un mot réservé MySQL comme nom de colonne "date"
ensuite tu récupères $ligne['mdate'] alors que dans la requête tu sélectionnes "date"

par cemice » 19 janv. 2007, 11:57

pour comparer une date php avec une date mysql voici le code :
<?php 

$date   = date("Y-m-d"); 

$result = ("SELECT date FROM tatable WHERE date = '$date'");  
$req    = mysql_query($result) or die('Erreur SQL !<br>'.$result.'<br>'.mysql_error()); 
$ligne  = mysql_fetch_array($req); 

$db = explode("-", $ligne['mdate']); 
$d1 = mktime(0, 0, 0, $db[1], $db[2], $db[0]); 
$dm = explode("-", $date); 
$d2 = mktime(0, 0, 0, $dm[1], $dm[2], $dm[0]); 

if ($d1 < $d2) 
{ 
echo "la date n\'est pas pareil"> 

} else
echo "la date est pareil";

?> 
cela devrait marcher avec ceci

par abricot » 19 janv. 2007, 11:19

Salut ultim, je comprend pas ton code, tu peux le commenter ?