Format de date pour recherche dans BDD

Résolu
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   -  
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis en train de développer un petit programme en PHP.
J'essai actuellement de faire une recherche par date. La date est entré dans un champs de texte et est dans un format jjmmaaaa.
Mon code de recherche est le suivant:
$sql = 'SELECT * FROM dk_travaux WHERE date LIKE '.$_SESSION["date"].'';

Jusque là aucun problème.
Le seul problème est quand je tape dans ma recherche une date qui commence par 01.... par exemple. Après plusieurs test, je remarque que visiblement le 0 n'est pas pris en compte. Du cout, impossible d'afficher la ligne correspondante à la date. Tout le reste s'affiche, quelle que soit la date, exepté les date commencant pas 0.
Dans ma base de donnée, la colonne est de type text.

Merci d'avance pour votre aide.
Tout ce passe ici: http://darkentworld.free.fr/travaux/index.html (allé sur la page recherche par: Date)
A voir également:

6 réponses

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
Bonsoir,

le mieux serait que le champ date de ta table soit de type DATE plutôt que texte, donc sous la forme aaaa-mm-jj

et tu fais le SELECT en comparant avec une date aaaa-mm-jj

c'est aussi beaucoup plus facile pour faire des extractions > ou < ( AFTER ou BEFORE )
-1
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Ok mais la date est enregistré dans ma base de donnée via un formulaire avec un simple champ de texte de type input.
<input size="9" maxlength="8" name="date">

Donc comment l'entré ici correctement pour qu'elle soit correctement enregistré?
-1
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
Dans ton formulaire soit tu suggères un format de date à l'utilisateur à coté de l'input
jj-mm-aaaa que tu transforme au passage par php avant d'enregistrer

soit tu mets 3 listes déroulantes jour mois annee et tu as ainsi les 3 parties de ta date que tu mets comme tu veux avant d'enregistrer dans la BDD
-1
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
En fait j'ai fait la chose suivante:

$_SESSION["date"] = $_POST["date"];

list($day, $month, $year) = explode("/", $_SESSION["date"]);
$date = ''.$year.'-'.$month.'-'.$day.'';


Ma date est enregistré correctement.
Toutefois sur une autre page, j'ai un formulaire où j'entre une date (avec un input encore une fois) et je veux retrouvé dans ma base de donnée toute les dates correspondante.

J'ai donc ce code:
$_SESSION["date"] = $_POST["date"];

$sql = 'SELECT * FROM dk_travaux WHERE date LIKE '.$_SESSION["date"].'';


Avec une boucle j'affiche tout les résultats. J'ai fait ce code avec d'autres informations et ça marche très bien.
Toutefois ici il m'affiche la chose suivante:

Erreur SQL !
SELECT * FROM dk_travaux WHERE date LIKE 2008-10-02
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-10-02' at line 1
-1
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
Il attends '2008-10-02' et pas 2008-10-02

Essayes :

$_SESSION["date"] = $_POST["date"];

list($day, $month, $year) = explode("/", $_SESSION["date"]);

$date = $year.'-'.$month.'-'.$day;

echo $date;

$sql = ' SELECT * FROM dk_travaux WHERE date="%$date%" ';
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Après quelques légère modif, ça va mieux.
Le echo $date fonctionne et m'afiche la date correctement.

Toutefois, je n'arrive pas a afficher de résultats. Pourtant la date est bien dans ma base.
-1
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
En fait c'est bon.

Suffisait d'un:
$sql = " SELECT * FROM dk_travaux WHERE date LIKE '%$date%' ";


Merci beaucoup pour ton aide en tout cas.
Problème résolu.
-1