AIDE extraire enregistrements entre 2 dates

cs_chevaliero Messages postés 11 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 12 octobre 2005 - 10 mai 2005 à 11:30
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 11 mai 2005 à 18:48
Bonjour,

Mon but est d'afficher des infos comprises entre deux dates.
J'ai un formulaire avec 2 champs textbox (date1 et date2 ) dans lequels je saisie les dates (au format jj/mm/yyyy):

CODE FORMULAIRE
<FORM name= "form" action="repdate.php?date1=&date2=>



</FORM>

Je souhaite afficher le résultat sur une page appelée repdate.php.
Mais j'ai toujours ce message :
Notice: Undefined variable: date1 in c:\program files\easyphp1-7\www\test\repdate.php on line 15


Notice: Undefined variable: date2 in c:\program files\easyphp1-7\www\test\repdate.php on line 15

CODE DE LA PAGE REPDATE.PHP
<?
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'TEST';
$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='.$date1.' and date2='.$date2.' ";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);


while($enreg = mysql_fetch_array($result)) {
echo '';
}
?>

Merci à vous de m'aider.

16 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 11:45
Hello,



un formulaire c'est comme ca :



<form name="form" action="repdate.php" method="post">



</form>


Ensuite, ta page repdate :



<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'TEST';
$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='".$_POST['date1']."' AND date2="'.$_POST['date2']."' ";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);



while($enreg = mysql_fetch_array($result)) {
echo '';
}
?>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 11:49
G oublie un truc :



<form name="form" action="repdate.php" method="post">



</form>




<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'TEST';
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
if (isset ($_POST['submit']) && $_POST['submit'] === 'envoi') {


if (isset ($_POST['date1']) && isset ($_POST['date2'])) {

$select = "SELECT * FROM test WHERE date1='".$_POST['date1']."' AND date2="'.$_POST['date2']."' ";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);




while($enreg = mysql_fetch_array($result)) {
echo '';
}


}


}

?>



Tu devrais aussi faire des addslashes sur tes dates, mais bon...
0
cs_chevaliero Messages postés 11 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 12 octobre 2005
10 mai 2005 à 12:35
Bonjour Malalam,

merci pour ta réponse rapidemais je sollicite encore ton aide.
J'ai modifié ma page de formulaire, ainsi que la page repdate.php
J'ai modifié uniquement sur ton code (voir ci-dessous en rouge) la position des guillements

Mais j'obtiens la réponse suivante :
Parse error: parse error, unexpected $end in c:\program files\easyphp1-7\www\test\repdate.php on line 24

voici le code:
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'TEST';
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
if (isset ($_POST['submit']) && $_POST['submit'] === 'envoi') {


if (isset ($_POST['date1']) && isset ($_POST['date2'])) {
$select = "SELECT * FROM test WHERE date1='".$_POST['date1']."' AND date2='".$_POST['date2']."' ";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);


while($enreg = mysql_fetch_array($result)) {





echo ''.$enreg['date1'].' - '.$enreg['titre'].'

';


}
?>

Merci
0
cs_chevaliero Messages postés 11 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 12 octobre 2005
10 mai 2005 à 13:17
Re Bonjour Malalam,

j'ai rajouté 2 acolades à la fin du code et unexpected $end error a disparu.

Suite à un test sur une période où j'ai placé 2 évènements.
Effectivement les variables de dates sont passées dans l'url.
Cependant je n'ai rien qui s'affiche sur ma page repdate.php

Peux-tu m'aider à nouveau
Merci d'avance
0

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

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 13:20
Tu as oublie les accolades que j'avais rajoutees ;-) Regarde bien (J'ai indente cette fois) :

<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'TEST';
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
if (isset ($_POST['submit']) && $_POST['submit'] === 'envoi') {
if (isset ($_POST['date1']) && isset ($_POST['date2'])) {
$select = "SELECT * FROM test WHERE date1='".$_POST['date1']."' AND date2='".$_POST['date2']."' ";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);
while($enreg = mysql_fetch_array($result)) {
echo ''.$enreg['date1'].' - '.$enreg['titre'].'

';
}
}
}
?>

Bon l'indentation de mon editeur passe mal ici lol. Enfin regarde avant le ?> j'ai mis 3 accolades, tu en avais garde une seule.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 13:22
Quels sont les types de tes champs dates de ta base ?
Et sous quelle forme inscris tu la date dans ton formulaire ?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 13:24
A mon avis, il ne trouve rien dans ta base correspondant a ta requete (evite les SELECT * au fait, il vaut mieux nommer TOUS les champs requis, plutot).
0
cs_chevaliero Messages postés 11 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 12 octobre 2005
10 mai 2005 à 13:35
Re,

Merci pour tes réponses.
Effectivement je n'avais pas vu les acolades, désolé.

voici la structure de la table:

CREATE TABLE `test` (
`date1` varchar(15) default '00/00/0000',
`date2` varchar(15) default '00/00/0000',
`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;
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 13:56
Affiche ton $total. Tu as quoi ? 0 ?
Ca veut bien dire que ta requete ne va pas chercher les champs ou les 2 dates sont egales aux deux dates passees dans ton formulaire.
Affiche tes $_POST pour voir ce que tu obtiens, et compare avec ce que tu as dans ta table.
0
cs_chevaliero Messages postés 11 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 12 octobre 2005
10 mai 2005 à 14:40
Re,

J'affiche mon $total
Résultat : 0

Les variables avec le POST ne sont pas transmises dans dans l'url.

En modifiant
<form name="form" action="repdate.php" method="post" >
par
<form name="form" action="repdate.php">
j'obtiens le passage de variables suivant:
repdate.php?date1=01%2F05%2F2005&date2=30%2F05%2F2005&submit=envoi

Mais rien ne s'affiche car ce n'est plus un POST donc le code de la page repdate.php n'est plus bon je pense.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 15:08
Heu ...

le post marche bien, la question n'est pas la.

Si tu ne mets rien dans method(ce qu'il ne faut pas faire, il faut choisir une methode), par defaut c'est un get.

Donc $_GET['date1']



mais ca ne changera rien...
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 mai 2005 à 21:07
Salut,



je te conseille de changer de type pour tes dates dans ta base de
données, oublie le varchar, passe au type INT, date, bref un autre type
;-)



Tu gagneras en place (vu qu'un type INT prends moins que ton varchar)
et en performances pour les comparaisons de dates ou autres opérations.



a +

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
cs_chevaliero Messages postés 11 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 12 octobre 2005
11 mai 2005 à 12:18
Re et merci à vous de me répondre

Voila le POST ne fonctionne pas, je préfère le GET

j'ai modifié un peu le code de repdate.php et là j'obitens tous les enregistrements mais par sur l'intervalle de dates (date1, date2) passé en variable.
Voici le code:

<?php


// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'TEST;
$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 ''.$enreg['date1'].' - '.$enreg['titre'].'

';
}


?>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 mai 2005 à 13:35
$_GET['date1']

les quotes sont obligatoires.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 mai 2005 à 13:36
Et date1 < a ton get ne marchera pas comme tu le souhaites si tu as
garde un varchar et une date sous un format date francais (ou anglais
d'ailleurs).
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
11 mai 2005 à 18:48
"Voila le POST ne fonctionne pas"



Pourquoi ça ?


<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
Rejoignez-nous