Probleme de requette dans php

Bonjour,
le probleme que j ai compte facile mais j ai pas encore trouvé la solution acause d un message d array!! ce message apparai apres avoir creer une requette qui appel des informations d'un tableau cree dans ma base de donnee: si la requette est simple ou j ai donnee une seul condition les resultats s'affiche dans ma page comme je veux, si j ai specifié plusieur condition comme "(.....where personne=".$P."and age=>".$Age) la je trouve un seul mot dans ma page php qui est "array"!!
svp je sais pas c quoi le probleme car je croi que la requette est juste !! dites moi quoi faire ?
et merci d avance

12 réponses

  1. salut,
    comme j ai deja dit il faut qu il m affiche tt les informations compri par exemple entre 02/04/2000 et 03/04/2001
    ce que j ai dans mon tableau est de 02/03/1999, 03/03/1999, 04/03/1999 .......jusqu a 12/09/2010
    mais ce qu il m donne la requette c les resultats suivantes: 02/04/2000 , 03/04/2000 c fini pour l annee 2000!!! apres 02/04/2001 et 03/04/2001 !!!!!!!!!
    alors c comme cette requette controle si les dates que tu as est egale a ces 4 dates je vai les afficher sinon je peux rien faire!!
    j espere que vous avez compris ou est le probleme
    merci bcq atout1 :)
    1. salut,

      cette requette m affiche qlq reponse mais pas tt! j explique: j ai testé deux exemples de date : de 02/04/2000 a la date 03/04/2010 et il m affiche les dates ont des jours compris entre 02 et 03 avec mois compris entre 04 et 04 pour tt les annees compris entre 2000 et 2010!! et c pas ca qu on veux!
      est c que vous avez d autre propos ??
      merci
      1. cé koi les résultats attendus ???
    2. salut,

      oui j aime bien faire ca mais mon encadrant a insisté d utiliser trois champs de date pour eviter qlq probleme!!
      j espere que vous m comprenez
      merci
      1. essaye avec ce requete , je pense ton requete cé tres complique :D
        tas pas besoin de tou ses AND et OR

        $reponse = mysql_query("SELECT * FROM annee WHERE (annee >= '$annee_debut' AND annee <='$annee_fin')
        AND(mois >= '$mois_debut' AND mois <='$mois_fin') AND (jour >= '$jour_debut' AND jour <='$jour_fin')") or die(mysql_error());


        ca doit marche

        bonne chance
      2. les resultats attendus est l affichage des informations enregistrer chaque jour et pour bien preciser les jours je donne deux dates date1 et date2 et il va m afficher les infos enregistrer dans cette periode.
        you get the idea??
        thanks
    3. merci bcq atout1 ca marche !!!!! vous ma sauvez merci bcq :)

      si vous voulez, dites moi pour bien specifier les resultats de date c.a.d jour mois et annee j ai fait cette requette et ca m donne le resultat mais il donne pas l importante parfoi au mois et autre au jour !!

      au lieu de l annee slm :

      $reponse = mysql_query("SELECT * FROM annee WHERE annee_debut >= '$annee_debut'AND annee_fin <='$annee_fin'") or die (mysql_error());

      on fait:

      $jour_debut=7;
      $jour_fin=6;
      $mois_debut= 4;
      $mois_fin= 7;
      $annee_debut=2006;
      $annee_fin=2009;

      $reponse = mysql_query("SELECT * FROM annee WHERE (annee >= '$annee_debut' AND annee <='$annee_fin')
      OR ((mois >= '$mois_debut' AND annee>= '$annee_debut') AND ( mois <= '$mois_fin' AND annee <= '$annee_fin')) OR ((jour>= '$jour_debut' AND mois >= '$mois_debut' AND annee >= '$annee_debut') AND (jour <= '$jour_fin' AND mois <= '$mois_fin' AND annee <= '$annee_fin'))");

      ca me donne pas des erreurs mais le resultat est comme par exemple: de 07/04/2006 a 06/12/2009!!!!! et normalement il faut qu il s arret dans 06/07/2009

      si vous avez des idees sur ca je serai tres content merci d avance pour votre aide atout1 :)
      1. aussi j ai oublié de vous dire atout1, j ai trouvé que le probleme etais dans la base de donnee ou j ai consideré annee comme varchar !!
        merci bcq
      2. bonjour, prkoi tu fais pas des trucs de ce genre : remplace les trois champs (jour, mois, annee) par une seule champ (date de type DATE)

        et tu modifier ton code comme suivant

        echo "
        <html>
        <body>";

        //voila les exemples que je donne slm pour l tester
        $date_debut = "2010-05-27"; (aaaa-mm-jj)
        $date_fin = "2010-05-31"; (aaaa-mm-jj)
        echo "<p><strong>De la date $date_debut a la date de $date_fin </strong></p>";
        echo "
        <table BGCOLOR=#fff000 BORDER=3 WIDTH=80% align=center>
        <tr>
        <thead>
        <th><p>Nom</p></th>
        <th><p>Age</p></th>
        <th><p>La date</p></th>
        <thead>
        </tr>
        <tbody>";
        $reponse = mysql_query("SELECT * FROM annee WHERE date >= '$date_debut'AND date <='$date_fin'") or die (mysql_error());
        while($donnees = mysql_fetch_array($reponse))
        {
        echo"
        <tr>
        <td>$donnees[nom]</td>
        <td>$donnees[age]</td>
        <td>$donnees[date]</td>
        </tr>";
        }
        echo "
        </tbody>
        </table>
    4. copie le code suivant dans un fichier.php
      <?php
      // connection a la base de donnees
      $db = mysql_connect("localhost", "root", "") or die(mysql_error());
      mysql_select_db("NOM_BASE") or die(mysql_error());
      echo "
      <html>
      <body>";

      //voila les exemples que je donne slm pour l tester
      $annee_debut = 2006;
      $annee_fin = 2010;
      echo "<p><strong>De la date $annee_debut a la date de $annee_fin </strong></p>";
      echo "
      <table BGCOLOR=#fff000 BORDER=3 WIDTH=80% align=center>
      <tr>
      <thead>
      <th><p>Nom</p></th>
      <th><p>Age</p></th>
      <th><p>La date</p></th>
      <thead>
      </tr>
      <tbody>";
      $reponse = mysql_query("SELECT * FROM annee WHERE annee >= '$annee_debut'AND annee <='$annee_fin'") or die (mysql_error());
      while($donnees = mysql_fetch_array($reponse))
      {
      echo"
      <tr>
      <td>$donnees[nom]</td>
      <td>$donnees[age]</td>
      <td>$donnees[jour]/$donnees[mois]/$donnees[annee]</td>
      </tr>";
      }
      echo "
      </tbody>
      </table>
      <body>
      </html>";
      ?>

      toi tas moi dans ton WHERE annee_debut <= $annee_debut et annee_fin<= $annee_fin
      mais normalement le champ dans la base de donnees s'appelle annee.
      en plus au lieu </br> met plutot <br/>
      et prkoi tu utilise le $rowcount() ???? tas pas besoin.

      ton table dans la base de donnees doit contient les champs suivant id (cle primaire), nom, age, jour, moi, annee , etc.. de ce genre :
      CREATE TABLE IF NOT EXISTS 'annee' (
      'id' int(11) NOT NULL AUTO_INCREMENT,
      'nom' varchar(10) NOT NULL,
      'age' int(2) NOT NULL,
      'annee' int(4) NOT NULL,
      'jour' int(2) NOT NULL,
      'mois' int(2) NOT NULL,
      PRIMARY KEY ('id')
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

      essaye ce code et dis moi si ca marche ou pas.. il doit marche car il y a rien de complique .

      A+
      1. j crois que le probleme est dans mes tableaux de base de donnee je vai vous montrer tt le code

        <html>
        <?php
        try
        {
        $bdd = new PDO('mysql:host=localhost;dbname= nom', 'root1', ' ');
        }

        catch (Exception $e)
        {
        die('Erreur : ' . $e->getMessage());
        }
        ?>

        <body>
        <?php
        //voila les exemples que je donne slm pour l tester
        $annee_debut = 2006;
        $annee_fin = 2010;

        ?><p><strong><?php echo 'De la date '.$annee_debut.' a la date '.$annee_fin;?></strong></p>
        </br>
        </br>
        </br>

        <center >

        <table BGCOLOR="#fff000" BORDER=3 WIDTH="80%">
        <tr>
        <thead>
        <th><p> Nom </p></th>
        <th><p> age </p></th>
        <th><p> La date </p></th>
        <thead>
        </tr>
        <tbody>
        /*normalement ce que j ai dans la table c la date separait de trois
        champs: jour mois et annee avec nom et age ...*/
        <?php
        $requet1= $bdd->query("SELECT * FROM annee WHERE annee_debut =>".$annee_debut." AND annee_fin <=".$annee_fin) or die($bdd->errorInfo());
        $requet1->execute();
        $cont1=requet1->rowCount();

        for($i=0;$i<=$cont1+1;$i++)
        {

        $donnees=$requet1->fetch();

        ?>
        <tr>
        <td><p> <?php echo $donnees[1];?></p></td>
        <td><p> <?php echo $donnees[2];?></p></td>
        <td><p><?php echo $donnees[3].'/ '.$donnees[4].'/'.$donnees[5];?></p></td>

        </tr>

        <?php

        }

        ?>

        </tbody>
        </TABLE>

        </center>

        <?php

        ?>
        </body>
        </html>
        j espere que vous avez compris merci encore de m aider
        1. salut,

          merci de m suivi atout1 tres jentil de votre part :)

          j ai essayé avec ce code que vous m avez proposé mais s affiche le meme probleme "array"!!

          si vous avez d autre proposition aidez moi merci
          1. bizzare car j'ai tester chez moi et ça marche bien..

            tu peux montrer ton code ??
        2. essaye ce code :
          $reponse = mysql_query("SELECT * FROM annee

          WHERE annee_debut >= '$annee_debut'
          AND annee_fin <='$annee_fin'") or die (mysql_error());

          while($donnees = mysql_fetch_array($reponse))

          {

          echo "$donnees[nom_colonne_tu_veux_afficher] <br/>";

          }
          1. merci, mais meme avec le => et <= ca marche pas sauf qu 'avec le code:

            $requette1= $bdd->query("SELECT * FROM annee WHERE annee_debut =>".$annee_debut)

            mais lorsque j ajoute "AND annee_fin<=$annee_fin" je trouve dans ma page php le mot "array":

            $requette1= $bdd->query("SELECT * FROM annee WHERE annee_debut =>".$annee_debut."AND annee_fin <=".$annee_fin)

            dites moi quoi faire svp et merci encore
            1. salut,

              oui j ai utilisé le fetch et ca marche dans tt les requettes que j ai fait sans conditions! mais celle la non!! le code est:

              $requette1= $bdd->query("SELECT * FROM annee WHERE annee_debut =<".$annee_debut."AND annee_fin >=".$annee_fin) or die($bdd->errorInfo());
              $requette1->execute();
              $cont1=$requette1->rowCount();

              for($i=0;$i<=$cont1+1;$i++)
              {
              $donnees=$requette1->fetch();
              echo $donnees[0];
              }
              merci de m aider
              1. bonjour,

                tas fais un mysql_fetch_array($requete) ????

                tu peux montrer ton code ??

                A+