selection entre deux dates

chevaliero
Invité n'ayant pas de compte PHPfrance

11 mai 2005, 12:10

Bonjour,

voila je cherche à extraire les données de ma BDD en utilisant un formulaire avec 2 textbox date1 et date2 (format jj/mm/yyyy). J'envoie ma requête avec les 2 critères dates comme variables.
Mon problème est que j'obtiens tous les enregistrements et je souhaiterais avoir uniquement ceux compris entre les deux dates.

code du formulaire
<html><head> </head><body>
<form name="form1" method="get" action="repdate2.php">
<p>
<input name="date1" type="text">
&agrave;
<input name="date2" type="text">
<br>
<input type="submit" name="Submit" value="envoi">
</p>
</form></body>
</html>

j'envoie la requete (method GET) sur une page appelée repdate2.php

code affichage des données
<?php

// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'tourisme';
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );

mysql_select_db($db) or die ('Erreur :'.mysql_error());

$select = "SELECT * FROM test WHERE date1 > '$_GET[date1]' and date2 < '$_GET[date2]' ";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);
while($enreg = mysql_fetch_array($result)) {
echo '<a href="fiche.php?date1='.$enreg["date1"].'">'.$enreg['date1'].' - '.$enreg['titre'].'<br><br>';
}

?>

Merci pour votre aide :D

Eléphant du PHP | 98 Messages

11 mai 2005, 12:24

SELECT column_name FROM table_name
WHERE column_name
BETWEEN value1 AND value2

essaye comme ça pour ta requête...

chevalier
Invité n'ayant pas de compte PHPfrance

11 mai 2005, 12:47

Bonjour lamk,

merci de ta réponse.

J'ai déjà procédé à cette requête dans mysql, effectivement cela fonctionne mais uniquement en rentrant les valeurs pour les dates dans le code.
Je souhaite passer les dates comme variables par le formulaire vers la page repdate2.php.

Connais-tu le moyen de remplacer value1 AND value2 par les variables ?

merci d'avance

Mammouth du PHP | 983 Messages

11 mai 2005, 13:06

Il faut formater tes dates au format Mysql.
Quels types de colonnes a tu utiliser pour tes champs dates? Si c'est le type date, Mysql les stocke ainsi : YYYY-MM-DD (YY-MM-DD fonctionne aussi).

Il faut donc que tu formates tes champs saisis car je suppose que tu les saisis DD/MM/YYYY. ;)

chevaliero
Invité n'ayant pas de compte PHPfrance

11 mai 2005, 13:16

Voici la structure de la table

CREATE TABLE `test` (
`date1` int(15) default NULL,
`date2` int(15) default NULL,
`dateus` date NOT NULL default '0000-00-00',
`type` varchar(50) NOT NULL default '',
`titre` varchar(200) NOT NULL default '',
`ville` varchar(50) NOT NULL default '',
`lieu` varchar(50) NOT NULL default '',
`heure` varchar(30) NOT NULL default '',
`description` text NOT NULL,
`contacts` varchar(64) NOT NULL default '',
`tel` varchar(64) NOT NULL default '',
`url` varchar(64) NOT NULL default '',
`mail` varchar(64) NOT NULL default ''
) TYPE=MyISAM;

Mammouth du PHP | 983 Messages

11 mai 2005, 13:20

Premiere chose, essaie d'utiliser les bons type de colonnes sur les champs date1 et date2. Pourquoi les mettre en integer? Si tu peux les changer, fais-le!

Si tu ne peux pas, bon courage à toi pour faire une moulinette qui fait une comparaison de date au format integer ( comparaison des années, puis des mois, puis des jours..).

Si tu peux changer tes champs au format Date, tu n'auras qu'a formater tes dates saisies au format dd/mm/yyyy au format yyyy/mm/dd.

Eléphant du PHP | 98 Messages

11 mai 2005, 14:36

tu peux utiliser des variables dans ta requête en utilisant le BETWEEN
$sql="SELECT column_name FROM table_name WHERE column_name BETWEEN ' ".$value1." ' AND ' ".$value2." ' ";
enfin je dis ça mais... essaye :p
je t'ai mis les espaces pour que ça soit plus clair