probleme pour comparer une date avec une date sql

Eléphant du PHP | 65 Messages

18 janv. 2007, 13:10

Salut tout le monde,

Je sais que dans une table sql la date se présente sous cette forme : année-mois-jour. On peu modifier le format mais j'ai lu que c'etais déconseillé.

donc je fais comme ceci :
mysql_connect("localhost","root","") or die ("impossible nananaa..");
mysql_select_db("x_db") or die ("bblablabal");
$date = isset($_POST['date']) ? $_POST['date'] : '';
$query = mysql_query("SELECT date FROM x WHERE date = '$date'");
$array = mysql_fetch_array($query);

// admettons que dans ma bdd j'ai une date : 2006-20-10 et que je tape dans mon formulaire 20/10/2006

$date = $_POST['date'];
list($jour,$mois,$annee) = explode('/', $date);
$date = date($annee-$mois-$jour);

// maintenant la date se presente sous la forme annee-mois-jour

if ($date != $array['date']){
     echo 'ok';
     }

else{
     echo 'pas bon';
     die();
     }
le probleme c'est que $array['date'] ne me renvois rien, je capte pas, j'ai besoin de vos lanternes j'y vois rien :/

Mammouth du PHP | 1029 Messages

18 janv. 2007, 14:12

Bonjour, et si tu fais
$date = $_POST['date'];
list($jour,$mois,$annee) = explode('/', $date);
$date = date($annee-$mois-$jour); 
avant le mysql_fecth_array.

Parce-que dans l'ordre que tu donnes le where est vide ou a la forme JJ/MM/DDDD
L'expérience est la somme de toutes nos erreurs.

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 14:16

Bonjour,

Tu as plusieurs erreurs,

La première c'est d'utiliser un mot réservé MySQL (date) comme nom de champ.
Tu devrais changer ce nom. Cette date elle correspond à QQ chose (date_debut, date_inscription, .....)

Une autre c'est l'utilisation de la fonction date() de PHP.
Pour ce que cherches à faire, elle prend deux paramètres, le format et les valeurs, tu n'en mets que un.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 65 Messages

18 janv. 2007, 14:24

maitrepylos : bonjour, j'ai essayé mais ca ne change rien :/

ajoloca : bonjour, j'ai bien compris ma première erreur j'ignorais vraiment que je ne devais pas nomer mon champ date dans mysql, je mettrais date1 ou date_avant un truc comme ca. Par contre, j'ai pas compris ta deuxieme remarque :?:

Mammouth du PHP | 1029 Messages

18 janv. 2007, 14:35

Tu utilises une fonction php qui est date()
$date = date($annee-$mois-$jour);

//exemple

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

echo $date;

//donneras '2007-01-18'

je pense que toi tu veux faire ceci

$date = $annee-$mois-$jour;

L'expérience est la somme de toutes nos erreurs.

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 14:36

Re,

Si tu regardes dans la documentation PHP pour la fonction date() (click dessus)
Tu vois que ça s'écrit sous la forme date('chaine_format', valeur_format_time)

Donc tu dois convertir tes $jour, $mois, $annee en timestamp avant de pouvoir l'utiliser.

Tu as une autres solution, directement en SQL en utilisant la fonction STR_TO_DATE(), et là plus besoin de transformation.

Lis attentivement ce tuto de la FAQ ça devrait t'aider.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 65 Messages

18 janv. 2007, 14:39

desolé si je parrais chiant mais je voudrais comprendre pourquoi ? sur beaucoup de site j'ai vu des $date = date("20-10-2006"); alors pourquoi pas $date = date("$jour-$mois-$annee");
Je capte pas trop :/
cela dis je vais essayer comme tu me l'a montré

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 14:41

je pense que toi tu veux faire ceci
$date = $annee-$mois-$jour;
@Maitrepylos
Que penses tu que contiendrait $date après l'exécution ?

On va supposer que les valeurs sont les suivantes
$annee = 2007;
$mois = 01;
$jour = 18;

Si maintenant je remplace les variables par leur valeur, j'obtiens:
$date = 2007 - 01 - 18;
ce qui me donne :
$date = 1988;
Je ne suis pas sur que ce soit la valeur attendue.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 1029 Messages

18 janv. 2007, 14:54

Désolé, je voulais dire ceci
$date = $annee.'-'.$mois.'-'.$jour;

Il essaye de comparer une date dans une db, il doit donc mettre dans son WHERE une variable ayant une structure pouvant être comparé! non?
L'expérience est la somme de toutes nos erreurs.

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 15:27

Re,

Voici QQ chose qui devrait s'approcher de ce que tu cherches.

Ne te contente pas de copier/coller, essaie de comprendre ce qui se passe et n'hésite à poser des questions.
<?php
mysql_connect("localhost","root","") or die ("impossible nananaa..");
mysql_select_db("x_db") or die ("bblablabal");
$date = isset($_POST['date']) ? $_POST['date'] : '';
// Arrêt si la date n'est pas renseignée
if(empty($date)) {
   die('La date ne peut &ecirc;tre vide');
}
// Construction de la requête
$query = "SELECT DATE_FORMAT(`date`, '%d/%m/%Y') as sql_date FROM x WHERE `date` = STR_TO_DATE('" . $date . "', '%d/%m/%Y')";
// Exécution de la requête, si erreur, arrêt avec affichage de la requête et de l'erreur MySQL
if (false === ($ressource = mysql_query($query))) {
   die('ERR_SQL :<br />' . $query . '<br />' . mysql_error());
}
// Récupération du résultat MySQL
$resultat_sql = mysql_fetch_array($ressource);
// Arrêt si pas de rangs correspondant à cette date trouvés
if (!mysql_num_rows($resultat_sql)) {
   die('Pas de valeurs trouv&eacute;es pour la date "' . $date .'"<br />');
}
// Affichage de la date (juste pour voir quelle est bien au format français)
echo 'Date issue de MySQL : ' . $resultat_sql['sql_date'] . '<br />';
?>
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 65 Messages

18 janv. 2007, 16:00

Désolé, je voulais dire ceci
$date = $annee.'-'.$mois.'-'.$jour;

Il essaye de comparer une date dans une db, il doit donc mettre dans son WHERE une variable ayant une structure pouvant être comparé! non?
Y'a plus simple $date = "$annee-$mois-$jour";

:D

Eléphant du PHP | 65 Messages

18 janv. 2007, 16:09

Re Ajoloca,

Je ne comprend pas cette fonction : STR_TO_DATE

Je ne comprend pas la boucle if (false ===....

en fait je comprend pas bien la suite non plus

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 16:28

Re,

La fonction MySQL "STR_TO_DATE(string_date, 'format_string') " (String to date), transforme une chaine de caractères au format date de MySQL.

Exemple :
Tu as une date au format français jj/mm/aaaa = 18/01/2007 et tu voudrais la convertir au format MySQL aaaa-mm-jj.

Le premier paramètre c'est ta valeur (18/01/2007) le second c'est le format du premier paramètre.
Ça te donnerait donc STR_TO_DATE('18/01/2007', '%d/%m/%Y').
En gros, tu lui dis : convertis-moi en date au format MySQL la chaine (premier paramètre) qui est formatée de la façon suivante (second paramètre).

Pour le ===
Quand tu compares en PHP, tu as (on peut dire) plusieurs niveaux de comparaison
== compare la valeur. Exp (zéro, valeur entière)0 == '0' (zéro, chaine de caractères) cette comparaison va te retourner "vrai"
Si tu fais la comparaison avec === ça te retournera "faux" car là tu testes,
en plus de la valeur, le type et un entier est différent d'une chaine même s'ils contiennent la même valeur.

Donc dans if(false === ....) je demande si la valeur de retour de mysql_query() est du type booléen et vaut 0 (false)
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 65 Messages

19 janv. 2007, 11:04

re, desolé pour le retard et merci pour ta reponse!
J'ai bien compris la fonction mysql str_to_date, c'est moins compliqué que de decortiquer une date!
par contre je capte pas trop cette histoire avec ===. Dans php il y a = et == et ===, donc = et == compare des valeur par exemple if($chien = "labrador") ou if($chien == "labrador") mais le === si il sert a tester une valeur je capte pas trop son utilitée vue que la comparaison c'est comme un test non?

Eléphant du PHP | 445 Messages

19 janv. 2007, 11:08

Bonjour,

Déjà, "=" ne compare pas de valeur, ce n'est pas un opérateur de comparaison, mais pour faire une affectation.

Le "===" n'est rien d'autre qu'un "==" testant en plus le type des données.
Comme l'a montré Ajoloca :
echo (0=='0') ? "0=='0'" : "0!='0'";

echo (0==='0') ? "0==='0'" : "0!=='0'";
Ce test affichera :

Code : Tout sélectionner

0=='0' 0!=='0'
LLDC
Ulti