Problême liste déroulante

Julie17
Invité n'ayant pas de compte PHPfrance

02 déc. 2011, 16:46

Bonjour,

Voila notre problème: Nous devon créer un tableau qui nous donne des observations faite pendant une période. Pour cela l'utilisateur doit sélectionner une date de début d'observation et une date de fin d'observation parmi une liste de toutes les dates où il y a eut des observations.
Seulement lors de la sélection de la date de fin d'observation il doit avoir seulement le choix des dates supérieur à la première date sélectionné (de début d'observation).
Nous n'arrivons pas à créer la deuxième page où il sélectionne la date de fin.

Voici notre script:
Première page:

<html>
<body>
<!--CREATION DE LA PAGE PERMETTANT A L'UTILISATEUR DE SELECTIONNER DEUX DATES-->
<form method="GET" action="deuxiemedate.php">
<?php
// On établit la connexion avec la BDD
$connexion=odbc_connect("oiseaux","","");
// On crée la requête permettant de récupérer les dates d'observation
$req_date_dd="select date from Observations group by date";
//On traite la requête
$result_date_dd=odbc_exec($connexion,$req_date_dd);
echo "Sélectionner la date de début [d'observation]:";
echo "<select name='liste_dd'>";
while (odbc_fetch_row($result_date_dd)==TRUE)
{
echo "<option value=odbc_result($result_date_dd,'id_observation')>";
echo odbc_result($result_date_dd,"date");
echo "</option>";
}
echo "</select>";
echo "<br/>";
odbc_free_result($result_date_dd);
echo"<input type='submit' value='GO' size='3' name='bt_date_dd'>";
?>
</form>
</body>
</html>



2ème page:
<html>
<body>
<?php
if (isset($_POST['liste_dd']))
{
$valeur_dd=$_POST["liste_dd"];
$connexion=odbc_connect("oiseaux","","");
$req_date_df="select date from Observations where date>'$valeur_dd'group by date";
$result_date_df=odbc_exec($connexion,$req_date_df);
require "fonctionsODBC.php";
echo "Sélectionner la date de fin [d'observation]:";
creer_liste($result_date_df,"liste_df","id_observation","date");
odbc_free_result($result_date_df);
echo"<input type='submit' value='GO' size='3' name='bt_date_df'>";
echo "</form>";
}
?>
</body>
</html>

Merci d'avance pour votre aide

ViPHP
ViPHP | 2577 Messages

02 déc. 2011, 17:47

Bonjour,

$req_date_df="select date from Observations where date>'$valeur_dd'group by date";

A mon avis il y a un problème dans la comparaison des dates. Tu compares le champ date à la chaine de caractères '$valeur_dd' mais je ne sais pas de quel type est le champ date.

Une solution dans le cas ou le champ date est au format date est de faire une conversion de $valeur_dd au format date dans la requete SQL.

Quelque chose du type : where date > ctod('$valeur_dd','YYYYMMDD')

Julie17
Invité n'ayant pas de compte PHPfrance

02 déc. 2011, 17:56

Merci pour votre réponse aussi rapide.
J'ai changé la formulation de ma requête comme vous me l'avez dit mais quand je clique sur le bouton ok de ma première page, il s'affiche une page blanche...

Julie17
Invité n'ayant pas de compte PHPfrance

03 déc. 2011, 10:06

Personne n'a de solutions?
Parce que je ne comprend vraiment pas pourquoi quand je clique sur ok de la première page je tombe sur une page blanche. Et comme il n'y a pas de message d'erreur je ne sais pas ce que je dois modifier.

Merci d'avance pour vos réponses.

Eléphant du PHP | 267 Messages

03 déc. 2011, 10:26

salut,

1) Dans tes 2 requetes, il y a "group by date", or ceci n'a de sens que si il y a un 'MAX', 'AVG', COUNT', après ton select
donc les 2 "group by date", il faut les retirer
peut etre, tu veux trier par date auquel cas il faut mettre "ORDER BY date"

2) la 16ème ligne du 1er script doit etre remplacée par :
echo '<option value="'.odbc_result($result_date_dd,'id_observation').'">';

3) il faudrait que tu nous donnes le code de la fonction creer_liste() et que tu nous dises de quel type est le champ 'date' dans la base de données

@+
dix2
Modifié en dernier par dix2 le 03 déc. 2011, 10:47, modifié 1 fois.

Mammouth du PHP | 2278 Messages

03 déc. 2011, 10:34

Bjr,
Si la deuxième page n'affiche strictement rien, le problème ne vient pas de la requete, mais de la valeur passée.
2ème page:
<html>
<body>
<?php
errror_reporting(E_ALL); // peut aider
//1 pour voir ce qui est reçu (penser à sélectionner une valeur dane la page 1)
print_r ($_POST);
if (isset($_POST['liste_dd']))
{
$valeur_dd=$_POST["liste_dd"];
$connexion=odbc_connect("oiseaux","","");
$req_date_df="select date from Observations where date>'$valeur_dd'group by date";
//2 vérification des valeurs passées et tenter de passer la requete à la base par un autre moyen....
print "<br>requete> $req_date";
/
// 3 serait peut-être mieux avant l'emploi d'une fonction
require "fonctionsODBC.php";
$result_date_df=odbc_exec($connexion,$req_date_df);
echo "Sélectionner la date de fin [d'observation]:";
//4 il faudrait éventuellement examiner creer_liste si $result_date_df est correct
print "<br>result_date ==>$result_date<==";
//4b si result_date_df est incorrect, enlever les quotes
creer_liste($result_date_df,"liste_df","id_observation","date");
odbc_free_result($result_date_df);
echo"<input type='submit' value='GO' size='3' name='bt_date_df'>";
echo "</form>";
}
?>
</body>
</html>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 267 Messages

03 déc. 2011, 10:59

pour éviter d'avoir plusieurs fois la même date, il faut mettre le mot-clé 'DISTINCT'
ce qui donne pour la 1ère page :
$req_date_dd = "SELECT DISTINCT date FROM Observations";

et pour la 2ème page :
$req_date_df = "SELECT DISTINCT date FROM Observations WHERE date>'$valeur_dd'";

dix2

Eléphant du PHP | 267 Messages

03 déc. 2011, 12:24

Voici un code qui fonctionne sur mon poste avec serveur MySQL :
page 1 :
<html>
  <body>
    <!--CREATION DE LA PAGE PERMETTANT A L'UTILISATEUR DE SELECTIONNER DEUX DATES-->
    <form method="POST" action="deuxiemedate.php">
<?php
  // On établit la connexion avec la BDD
  $connexion = odbc_connect("DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;Database=mysql", "login", "password");
  //$connexion = odbc_connect("Server=localhost;Database=mysql", "root", "");
  odbc_exec($connexion, "USE oiseaux");
  // On crée la requête permettant de récupérer les dates d'observation
  $req_date_dd = "SELECT DISTINCT date FROM Observations ORDER BY date";
  //On traite la requête
  $result_date_dd = odbc_exec($connexion,$req_date_dd);
  echo "Sélectionner la date de début [d'observation]:";
  echo "<select name='liste_dd'>";
  while(odbc_fetch_row($result_date_dd)){
    echo '<option value="'.odbc_result($result_date_dd,'date').'">';
    echo odbc_result($result_date_dd,"date");
    echo "</option>";
  }
  echo "</select>";
  echo "<br/>";
  odbc_free_result($result_date_dd);
  echo "<input type='submit' value='GO' size='3' name='bt_date_dd'>";
?>
    </form>
  </body>
</html>
page 2:
<html>
  <body>
<?php
if(isset($_POST['liste_dd'])){
  $valeur_dd = $_POST["liste_dd"];
  $connexion = odbc_connect("DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;Database=mysql", "login", "password");
  odbc_exec($connexion, "USE oiseaux");
  $req_date_df = "SELECT DISTINCT date FROM Observations WHERE date>'$valeur_dd' ORDER BY date";
  $result_date_df = odbc_exec($connexion,$req_date_df);
  echo '<form method="GET" action="troisiemePage.php">';
  echo "Sélectionner la date de fin [d'observation]:";
  echo "<select name='liste_dd2'>";
  while(odbc_fetch_row($result_date_df)){
    echo '<option value="'.odbc_result($result_date_df,'id_observation').'">';
    echo odbc_result($result_date_df,"date");
    echo "</option>";
  }
  echo "</select>";
  odbc_free_result($result_date_df);
  echo "<input type='submit' value='GO' size='3' name='bt_date_df'>";
  echo "</form>";
}
?>
  </body>
</html>
Quel serveur de base de données utilises-tu ?

dix2
Modifié en dernier par dix2 le 03 déc. 2011, 12:27, modifié 1 fois.

Julie17
Invité n'ayant pas de compte PHPfrance

03 déc. 2011, 12:27

c'est un serveur de base de donnée fournit par mon école.
Vous pouvez y accéder si je vous donne un mot de passe et un login.

Eléphant du PHP | 267 Messages

03 déc. 2011, 12:29

c'est un serveur de base de donnée fournit par mon école.
Vous pouvez y accéder si je vous donne un mot de passe et un login.
ça, on va éviter
niveau sécurité, c'est moyen

Eléphant du PHP | 267 Messages

03 déc. 2011, 12:31

connecte-toi et regarde si c'est MySQL, Oracle, MS SQL, PostgreSql ...

Eléphant du PHP | 267 Messages

03 déc. 2011, 12:32

ou peut être Access

Eléphant du PHP | 267 Messages

03 déc. 2011, 12:37

en fait, il faut juste remplacer la ligne :
$connexion = odbc_connect("DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;Database=mysql", "login", "password");
par :
$connexion = odbc_connect("oiseaux","","");

mais ça me paraît étonnant que ça fonctionne avec juste "oiseaux" comme 1er paramètre pour la fonction odbc_connect()

dix2

Petit nouveau ! | 5 Messages

03 déc. 2011, 12:50

Et aujourd' hui je ne suis pas chez moi j ai une connexion internet ou je passe par une borne sfr. Or quand je modifie mes pages php je dois les mettre dans un dossier via filezila pour voir si elle fonctionne mais celui ci ne veut pas se connecter..il y a une solution?

Eléphant du PHP | 267 Messages

03 déc. 2011, 13:04

à priori, avec les bornes SFR, on ne peut pas se connecter à un serveur FTP et FileZila utilise le protocole FTP