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. bonjour,

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

    tu peux montrer ton code ??

    A+
    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. 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. 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. 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. 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. 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. 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>
              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. 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 ???
              4. 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 :)