IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Erreur dans code php [Débutant(e)]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Erreur dans code php
    Bonsoir,

    Je vais essayer de vous expliquer rapidement mon problème bien que ce soit pas tout à fait simple. Je créé actuellement un site où j'aimerai fait apparaître un encadré météo, hébergé sous free j'utilise donc leur service pour afficher les vignettes météo. (http://support.free.fr/web/pperso/meteo.html)

    Seulement je voulais optimiser la navigation en permettant au visiteur de choisir son département dans une liste déroulante afin que la vignette correspondant à son choix s'affiche. Le soucis c'est que je suis totalement débutant et que je ne sais faire que peu de choses.

    On m'a conseillé d'utiliser du JavaScript mais je ne me suis jamais vraiment penché sur ce langage. On m'a alors proposé un lien vers un script en php/mysql qui a été fait pour proposer le même temps de service. (à savoir afficher la météo free par département non pas avec une liste déroulante mais à l'aide d'un champs de texte et d'un bouton de validation)

    Je me suis donc rabattu sur ce code, j'ai tenté de l'ajouter à ma page d'index mais il y a une erreur dont je ne parviens pas à me débarasser et qui est, forcément, très gênante.

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/d/b/preventionrisques/meteo.php3 on line 40
    J'ai essayé de modifier le code, je l'ai retourné dans tous les sens, j'ai parcourru des sites de cours php/mysql, quoi que je fasse rien ne change.

    La ligne incriminée est la suivante :

    $de = mysql_num_rows($result);
    Je vous laisse ici le code (un peu encombrant désolé) des fois que quelqu'un ai une idée d'où vient le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
     
    /* ------------------------------------
       Free-Météo V1.0 par Christophe MEYER
       http://stombi.free.fr/
       E-Mail : stombi@free.fr
       ------------------------------------
    */
     
    echo "<body bgcolor=#000000>";
     
     
    require ("cfg-meteo.php3");
     
     
    if ($dept == "") {
         $dept="34";
             }   
     
     
    $ide= MYSQL_CONNECT($host,$user,$pass);
    mysql_select_db("$bdd"); 
    $query = "SELECT * FROM meteo WHERE departem=$dept";
    $result = mysql_query($query,$ide);
    $de = mysql_num_rows($result);
     
    $p=0;
    	while($p<$de){
    		$dept=mysql_result($result,$p,"departem");
    		$nomdept=mysql_result($result,$p,"nomdepartem");
    $p++;
    }
     
     
    echo ("
    <br>
    <table width=110 border=1 cellspacing=0 cellpadding=5 bgcolor=#82BFF2 bordercolor=#FFFFFF align=center>
      <tr>
        <td>
          <table width=100% border=0 cellspacing=3 cellpadding=0>
            <tr>
              <td>
                <div align=center><b><font face=arial size=2 color=#0F324D>METEO</b></font></div>
              </td>
            </tr>
            <tr>
              <td align=center><font face=verdana size=1 color=#0F324D>$dept - $nomdept</font></td>
    		</tr>
            <tr>
              <td align=center><img src=http://perso0.free.fr/cgi-bin/meteo.pl?dep=$dept></td>
            </tr>
            <tr>
              <td align=center><font face=verdana size=1 color=#0F324D>Votre n&deg; de d&eacute;partement
                :</font></td>
            </tr>
            <tr>
              <td align=center>
                <form method=post action=index.php3>
                    <input type=text name=dept size=2 maxlength=2>
                    <input type=submit name=deptok value=Ok>
                  </form>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>");
     
    mysql_close(); 
    ?>
    D'ailleurs j'ai aussi un problème pour afficher cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td align=center><font face=verdana size=1 color=#0F324D>$dept - $nomdept</font></td>
    Elle est censée faire apparaître le numéro de département et le nom selon le format : "01 - Ain" mais seul le numéro s'affiche, je n'arrive pas à faire apparaître le nom.

    Voilà, questions sans doute futiles et assez basiques, excusez mon incompétence et merci d'avance pour votre aide.

  2. #2
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    salut,
    t'es sur que ta requete est correcte et qu'elle retourne quelque chose? pour verifier, juste en dessous de ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT * FROM meteo WHERE departem=$dept"; tu mets :
    tu mets
    tu executes le tout, ta page va afficher ta requete, tu vas la copier et l'executer direct dans la base de données.
    ça retourne quoi?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonsoir gofono_bass,

    J'ai rajouté la ligne que tu m'as demandé et j'obtiens le message suivant :

    SELECT * FROM meteo WHERE departem=22
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/d/b/preventionrisques/meteo.php3 on line 41
    En fait c'est bizarre parce que tout marche correctement (mis à part l'affichage du département) il y a seulement ce message d'erreur que j'ai cité dans mon premier post. Encore si le code ne fonctionnait pas ... Mais là il marche lol

    Je vois vraiment pas le soucis

  4. #4
    Fabouney
    Invité(e)
    Par défaut
    ce genre d'erreur c'est que la requête contient une erreur.
    execute ta requete manuellement, dans phpmyadmin par exemple et regarde s'il n'y a pas d'erreur dans une premier temp ...

    SELECT * FROM meteo WHERE departem=22
    le champ departem est bien de type entier ? v"rifie bien ta requête et tient nous au courant

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Re Fabouney,

    Je te montre la base mysql qui est associée au code php, pour ce qui est de la notion de "entier" je sais pas comment le vérifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    DROP TABLE IF EXISTS meteo;
    CREATE TABLE meteo (
       departem char(2) NOT NULL,
       nomdepartem varchar(50) NOT NULL
    );
     
    INSERT INTO meteo VALUES( "01", "Ain" );
    INSERT INTO meteo VALUES( "02", "Aisne" );
    INSERT INTO meteo VALUES( '03', 'Allier' );
    INSERT INTO meteo VALUES( '04', 'Alpes-de-Haute-Provence' );
    INSERT INTO meteo VALUES( '05', 'Hautes-Alpes' );
    INSERT INTO meteo VALUES( '06', 'Alpes-Maritimes' );
     
    ...
     
    [Je coupe le code pour diminuer la taille]
     
    ...
     
    INSERT INTO meteo VALUES( '90', 'Territoire de Belfort' );
    INSERT INTO meteo VALUES( '91', 'Essonne' );
    INSERT INTO meteo VALUES( '92', 'Hauts-de-Seine' );
    INSERT INTO meteo VALUES( '93', 'Seine-Saint-Denis' );
    INSERT INTO meteo VALUES( '94', 'Val-de-Marne' );
    INSERT INTO meteo VALUES( '95', 'Val-d\'Oise' );
    Je ne trouve pas d'erreur, ou alors elle concerne les requêtes que j'ai dû mal configurer ...

  6. #6
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Salut
    dans ta création de table
    pourquoi utilise tu un type char?
    utilise une type entier si tu ne mets que des nombres ce champs

    essaie ca...

    Et lors de ta requete dans la clause where place ta variable entre simple guillemets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $ide= MYSQL_CONNECT($host,$user,$pass); 
    mysql_select_db("$bdd");
     
    $query = "SELECT * FROM meteo WHERE departem= '$dept'";
    $result = mysql_query($query);
    Je doute un peu de l'utilisation de mysql_num_rows dans ton cas...tu fais des instruction pour rien pour parcourir tes résultats avec l'incrémentation d'un compteur $p

    J'essaierais plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($result = mysql_fetch_array($requete)){
      $dept = $result['departem'];
      $nomDept = $result['nomdepartem'];
    }

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonsoir ozzmax,

    Oui j'ai utilisé mysql_num_rows mais j'ai testé mysql_fetch_row ou mysql_fetch_array et rien n'y faisait ... Comme je n'y connais absoluement rien j'ai essayé d'agir sur les "problèmes" un peu à l'aveugle ...

    Je vais essayer tes conseils et je te tiens au courant :o

    Merci

  8. #8
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Salut

    je regardais a nouveau le post
    et dans le cas de ta requete comme il ne peut y avoir qu'un seul résultat possible car ta clause where tu spécifie une valeur qui doit être unique d'après la déclaration de ta table...
    tu peux ommettre le while car mysql_fetch_array() retourne un array de valeur et le while sert a les parcourir en entier...le while est utile lorsqu'il y a plusieur résultat...

    Pour ta 2e erreur qu'il n'affichait pas le nom dans ta page
    Citation Envoyé par Badr3am
    Elle est censée faire apparaître le numéro de département et le nom selon le format : "01 - Ain" mais seul le numéro s'affiche, je n'arrive pas à faire apparaître le nom.
    change ton affichage pour ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    echo "
    ...
     
     <tr> 
              <td align=center><font face=verdana size=1 color=#0F324D>".$dept." - ".$nomdept."</font></td> 
          </tr> 
     
    ...
     
    "; //Fermeture du echo

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Re ozzmax,

    J'ai fais les modif que tu m'as conseillé, j'ai remplacé mysql_num_rows par mysql_fetch_array mais visiblement l'erreur est toujours présente.

    J'ai enlevé le while.

    Et j'ai modifié l'affichage en ".$dept." - ".$nomdept." et rien ne s'affiche.

    Le code a désomais cette config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php
     
    /* ------------------------------------
       Free-Météo V1.0 par Christophe MEYER
       http://stombi.free.fr/
       E-Mail : stombi@free.fr
       ------------------------------------
    */
     
    echo "<body bgcolor=#000000>";
     
     
    require ("cfg-meteo.php3");
     
     
    if ($dept == "") {
         $dept="34";
             }   
     
     
    $ide= MYSQL_CONNECT($host,$user,$pass);
    mysql_select_db("$bdd"); 
    $query = "SELECT * FROM meteo WHERE departem= '$dept'";
    $result = mysql_query($query,$ide);
    $num = mysql_fetch_array($result);
     
     
    echo "
    <br>
    <table width=110 border=1 cellspacing=0 cellpadding=5 bgcolor=#82BFF2 bordercolor=#FFFFFF align=center>
      <tr>
        <td>
          <table width=100% border=0 cellspacing=3 cellpadding=0>
            <tr>
              <td>
                <div align=center><b><font face=arial size=2 color=#0F324D>METEO</b></font></div>
              </td>
            </tr>
            <tr>
              <td align=center><font face=verdana size=1 color=#0F324D>".$dept." - ".$nomdept."</font></td>
    		</tr>
            <tr>
              <td align=center><img src=http://perso0.free.fr/cgi-bin/meteo.pl?dep=$dept></td>
            </tr>
            <tr>
              <td align=center><font face=verdana size=1 color=#0F324D>Votre n&deg; de d&eacute;partement
                :</font></td>
            </tr>
            <tr>
              <td align=center>
                <form method=post action=index.php3>
                    <input type=text name=dept size=2 maxlength=2>
                    <input type=submit name=deptok value=Ok>
                  </form>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>";
     
     
    mysql_close(); 
    ?>
    Je ne sais pas si j'ai tenu compte de toutes tes remarques, je crois pas en avoir oublié, le script fonctionne tjrs mais il reste l'erreur et l'affichage absent.

  10. #10
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Salut oui l'affichage est manquant car tu n'affect pas tes variable avec les résultats de ta requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    <?php 
     
    /* ------------------------------------ 
       Free-Météo V1.0 par Christophe MEYER 
       http://stombi.free.fr/ 
       E-Mail : stombi@free.fr 
       ------------------------------------ 
    */ 
     
    echo "<body bgcolor=#000000>"; 
     
     
    require ("cfg-meteo.php3"); 
     
     
    if ($dept == "") { 
         $dept="34"; 
             }    
     
     
    $ide= MYSQL_CONNECT($host,$user,$pass); 
    mysql_select_db("$bdd"); 
    $query = "SELECT * FROM meteo WHERE departem= '$dept'"; 
    $result = mysql_query($query,$ide); 
    $num = mysql_fetch_array($result); 
    //ici-----
    $dept = $num['departem'];
    $nomdept = $num['nomdepartem'];
     
     
    echo " 
    <br> 
    <table width=110 border=1 cellspacing=0 cellpadding=5 bgcolor=#82BFF2 bordercolor=#FFFFFF align=center> 
      <tr> 
        <td> 
          <table width=100% border=0 cellspacing=3 cellpadding=0> 
            <tr> 
              <td> 
                <div align=center><b><font face=arial size=2 color=#0F324D>METEO</b></font></div> 
              </td> 
            </tr> 
            <tr> 
              <td align=center><font face=verdana size=1 color=#0F324D>".$dept." - ".$nomdept."</font></td> 
          </tr> 
            <tr> 
              <td align=center><img src=http://perso0.free.fr/cgi-bin/meteo.pl?dep=$dept></td> 
            </tr> 
            <tr> 
              <td align=center><font face=verdana size=1 color=#0F324D>Votre n&deg; de d&eacute;partement 
                :</font></td> 
            </tr> 
            <tr> 
              <td align=center> 
                <form method=post action=index.php3> 
                    <input type=text name=dept size=2 maxlength=2> 
                    <input type=submit name=deptok value=Ok> 
                  </form> 
              </td> 
            </tr> 
          </table> 
        </td> 
      </tr> 
    </table>"; 
     
     
    mysql_close(); 
    ?>

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Re re re,

    Quel bordel lol ... En affectant des variables au résultat de la requête ça a pour effet de bloquer le script ... Il ne fonctionne plus du tout, quand tu choisis un département la vignette reste figée et l'affichage n'indique ni le numéro, ni le nom du département.

    C'est vraiment prise de tête

  12. #12
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    En effet c'est ennuyant

    alors je te conseil de restrcuturer ta page un peu
    et de faire afficher seulement si tes valeurs on été postée

    ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    if (isset($_POST['dept'])){
       if($_POST['dept'] ==''){
          $dep="34"; 
       }
       else{
          $dep = $_POST['dept'];
       }
     
      $ide= MYSQL_CONNECT($host,$user,$pass); 
      mysql_select_db("$bdd"); 
      $query = "SELECT * FROM meteo WHERE departem= '$dep'"; 
      $requete = mysql_query($query,$ide); 
      $resultat = mysql_fetch_array($requete); 
     
      $dept = $resultat['departem']; 
      $nomdept = $resultat['nomdepartem']; 
    }
    Mais bien entendu, si ca n'entre pas dans ce code alors la page va avoir des erreurs d'affichage
    Car lorsque dans ton code tu demande de faire afficher les valeurs de $dept et $nomdept, si elle ne sont pas affecter, le script plante et arrete l'affichage...il faut que tu trouve une facon de faire ton echo seulement si ta valeur du champ texte est postée

Discussions similaires

  1. Déclencher une "alert" JavaScript dans code PHP
    Par webrider dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 13/09/2009, 20h34
  2. [SQL] Erreur dans code PHP
    Par Mans91 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/06/2007, 10h08
  3. erreur dans code: écrir dans un fichier
    Par wiss20000 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/03/2007, 09h49
  4. [PHP-JS] Popup d'alerte - insertion dans code PHP ?
    Par bilou95 dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2006, 16h28
  5. balise div dans code php
    Par mealtone dans le forum Langage
    Réponses: 3
    Dernier message: 11/08/2006, 19h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo