Affichage date

Alexandra.S
Invité n'ayant pas de compte PHPfrance

08 déc. 2011, 13:14

Bonjour,
Je fais une requête dans ma base afin d'afficher les événements internes d'une entreprise dans laquelle je suis en stage, mais je voudrais que les événements passés dans le temps (date postérieur à l'instant T) ne s'affichent plus; c'est à dire que les événements passés ne s'affiche plus.
J'ai beau chercher je ne trouve pas ce que je dois rajouter dans mon code.
Je pense que je dois rajouter quelque chose ici mais je ne connais pas cette fonction.

$sql = "SELECT ville,DATE_FORMAT(date, '%d-%m-%Y') as datefr,jour,nom_event,descriptif,adresse,code_postal,heure,contact FROM T_evenement WHERE ville = '".$ville."' ORDER BY date ASC";


Par avance merci. :P

ViPHP
xTG
ViPHP | 7331 Messages

08 déc. 2011, 13:30

Tu peux utiliser DATEDIFF() dans ta clause WHERE.
DATEDIFF(expr,expr2)

DATEDIFF() retourne le nombre de jours entre la date de début expr et la date de fin expr2. expr et expr2 sont des expressions de type DATE ou DATETIME. Seule la partie DATE est utilisée dans le calcul.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
-> 1
mysql> SELECT DATEDIFF('1997-11-31 23:59:59','1997-12-31');
-> -30

DATEDIFF() est disponible depuis MySQL 4.1.1.
http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

Alexandra.S
Invité n'ayant pas de compte PHPfrance

08 déc. 2011, 14:20

Tu peux utiliser DATEDIFF() dans ta clause WHERE.
DATEDIFF(expr,expr2)

DATEDIFF() retourne le nombre de jours entre la date de début expr et la date de fin expr2. expr et expr2 sont des expressions de type DATE ou DATETIME. Seule la partie DATE est utilisée dans le calcul.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
-> 1
mysql> SELECT DATEDIFF('1997-11-31 23:59:59','1997-12-31');
-> -30

DATEDIFF() est disponible depuis MySQL 4.1.1.
http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html
Je vais essayer mais je voudrais que la date du jour soit récupérée sur le serveur pour éviter de mettre les mains dans le code tous les jours

Merci par avance

Alexandra.S
Invité n'ayant pas de compte PHPfrance

08 déc. 2011, 16:53

J'ai essayé ça mais ça ne fonctionne toujours pas :/


  $ville = mysql_escape_string($_POST["ville"]);
        $idSql =  mysql_connect($host, $user, $passwd) or die('Erreur de connexion');
        mysql_select_db($bdd) or die('Base inexistante');
		
		$date_today=now();

        $sql = "SELECT ville,DATE_FORMAT(date, '%d-%m-%Y') as datefr,jour,nom_event,descriptif,adresse,code_postal,heure,contact FROM T_evenement WHERE ville = '".$ville."' AND date>=".$date_today." ORDER BY date ASC";
        $query = mysql_query($sql) or die( 'Erreur' );
        $result = mysql_query($query);

Je rappel que le but est d'afficher les événements d'aujourd'hui et futur seulement.


Merci

ViPHP
xTG
ViPHP | 7331 Messages

08 déc. 2011, 17:44

La fonction NOW() est une fonction SQL et non PHP.
Il faut donc la mettre dans la requête et non dans le code. ;)

Alexandra.S
Invité n'ayant pas de compte PHPfrance

08 déc. 2011, 19:21

La fonction NOW() est une fonction SQL et non PHP.
Il faut donc la mettre dans la requête et non dans le code. ;)
Peux tu me montrer le code stp car je ne vois pas comment l'écrire.

ViPHP
xTG
ViPHP | 7331 Messages

08 déc. 2011, 20:34

Voici un exemple d'utilisation :
SELECT unChamp, unAutreChamp, NOW() AS dateDuJour
FROM maTable

Alexandra.S
Invité n'ayant pas de compte PHPfrance

08 déc. 2011, 20:44

Merci pour l'exemple mais dans mon cas cela ne marche pas :/

Code : Tout sélectionner

$sql = "SELECT ville,DATE_FORMAT(date, '%d-%m-%Y') as datefr,jour,nom_event,descriptif,adresse,code_postal,heure,contact, NOW() AS dateDuJour FROM T_evenement WHERE ville = '".$ville."' ORDER BY date ASC";

ViPHP
xTG
ViPHP | 7331 Messages

08 déc. 2011, 21:27

C'était un exemple d'utilisation non une solution pour ton problème.
Tu devrais lire un cours sur le langage SQL et apprendre comment on forme une requête.
http://sgbd.developpez.com/cours/sql/sqlnice.pdf
http://www.siteduzero.com/tutoriel-3-46 ... html?all=1

Sinon tu peux aussi ouvrir un topic dans la section "Projets collaboratifs, Entraide" pour obtenir une solution toute faite...

Alexandra.S
Invité n'ayant pas de compte PHPfrance

08 déc. 2011, 22:10

C'était un exemple d'utilisation non une solution pour ton problème.
Tu devrais lire un cours sur le langage SQL et apprendre comment on forme une requête.
http://sgbd.developpez.com/cours/sql/sqlnice.pdf
http://www.siteduzero.com/tutoriel-3-46 ... html?all=1

Sinon tu peux aussi ouvrir un topic dans la section "Projets collaboratifs, Entraide" pour obtenir une solution toute faite...
Merci pour les liens je vais regarder cela mais ne pouvez vous pas m'aider cette fois ci c'est assez important.


:lol: :priere: :priere: :priere: :priere: :priere:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 déc. 2011, 22:27

Le SQL est sans doute l'un des langages les plus simples, il s'écrit comme il se parle :)
SELECT (la liste des champs que tu veux sélectionner)
  FROM (la liste des tables dans lesquelles se trouvent tes données)
  WHERE (les critères de récupération des données)
En gros ce qu'il te faut c'est :
Sélectionner les données
  Dans ta table événement
  Pour lesquels : la ville est égale à la valeur de $ville ET la date est supérieure ou égale à la date du jour
Et en utilisant NOW(), tu devrais pouvoir le faire assez simplement :)

(Pis faut pas hésiter à mettre à contribution les tuteurs de stages des entreprises, ils sont également là pour t'aider et te former :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Alexandra.S
Invité n'ayant pas de compte PHPfrance

08 déc. 2011, 22:49

Le SQL est sans doute l'un des langages les plus simples, il s'écrit comme il se parle :)
SELECT (la liste des champs que tu veux sélectionner)
  FROM (la liste des tables dans lesquelles se trouvent tes données)
  WHERE (les critères de récupération des données)
En gros ce qu'il te faut c'est :
Sélectionner les données
  Dans ta table événement
  Pour lesquels : la ville est égale à la valeur de $ville ET la date est supérieure ou égale à la date du jour
Et en utilisant NOW(), tu devrais pouvoir le faire assez simplement :)

(Pis faut pas hésiter à mettre à contribution les tuteurs de stages des entreprises, ils sont également là pour t'aider et te former :))

Bonsoir,

Merci pour tes exemples et les explications.

j'ai mis corrigé comme ca

Code : Tout sélectionner

$sql = "SELECT ville,DATE_FORMAT(date, '%d-%m-%Y') as datefr,jour,nom_event,descriptif,adresse,code_postal,heure,contact FROM T_evenement WHERE ville = '".$ville."' AND datefr >= NOW() ORDER BY date ASC";
bon ça ne marche pas encore.

AND datefr => NOW() ne marche pas non plus.

Pour mon tuteur je veux lui montrer demain matin que j'ai réussi à me débrouiller sans lui.

:P

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 déc. 2011, 22:59

Tu y es presque :)

En fait datefr n'est pas un champ de ta table, mais un alias que tu as donné à l'une des données que tu récupères. Du coup le WHERE est un peu perdu, parce qu'il ne le connait pas, il ne connait que les champs de ta table :)


A noter également qu'il est très fortement déconseillé d'appeler "date" le champ d'une table. C'est un mot clé du langage sql et ça peut poser problème selon la base de données, les requêtes, etc. Il vaut donc mieux quand tu créer la table opter pour un date_evenement, date_debut, ma_date ou date_n_importe_quoi plutôt que date tout court ;)


Ps : ok pour ton tuteur, mais j'veux voir un remerciement spécial à phpfrance dans ton rapport de stage ! ;p
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Alexandra.S
Invité n'ayant pas de compte PHPfrance

08 déc. 2011, 23:14

Tu y es presque :)

En fait datefr n'est pas un champ de ta table, mais un alias que tu as donné à l'une des données que tu récupères. Du coup le WHERE est un peu perdu, parce qu'il ne le connait pas, il ne connait que les champs de ta table :)


A noter également qu'il est très fortement déconseillé d'appeler "date" le champ d'une table. C'est un mot clé du langage sql et ça peut poser problème selon la base de données, les requêtes, etc. Il vaut donc mieux quand tu créer la table opter pour un date_evenement, date_debut, ma_date ou date_n_importe_quoi plutôt que date tout court ;)


Ps : ok pour ton tuteur, mais j'veux voir un remerciement spécial à phpfrance dans ton rapport de stage ! ;p
Pour le remerciement y a AUCUN problème et c'est normal :!: :!:

En écrivant

Code : Tout sélectionner

date
il n'y a pas d'erreur mais rien ne s'affiche :/

J'arrive à avoir un résultat avec

Code : Tout sélectionner

date = CURRENT_DATE
mais pas avec

Code : Tout sélectionner

date >= CURRENT_DATE
je ne comprend pas pourquoi? et avec le

Code : Tout sélectionner

NOW()
rien ne s'affiche

:o

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 déc. 2011, 23:48

Et si tu essayes cette requête directement dans mysql ou phpmyadmin, est-ce qu'elle te retourne un résultat (j'ai retiré le critère sur la ville) :
SELECT ville,DATE_FORMAT(date, '%d-%m-%Y') as datefr,jour,nom_event,descriptif,adresse,code_postal,heure,contact FROM T_evenement WHERE date >= NOW() ORDER BY date ASC
Et celle-ci ?

Code : Tout sélectionner

SELECT ville,DATE_FORMAT(`date`, '%d-%m-%Y') as datefr,jour,nom_event,descriptif,adresse,code_postal,heure,contact FROM T_evenement WHERE `date` >= NOW() ORDER BY `date` ASC
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...