fonction en PHP

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


sim100
WRInaute accro
WRInaute accro
 
Messages: 1271
Inscription: Dim Fév 02, 2003 18:45

fonction en PHP

Message le Mer Jan 04, 2006 16:42

Bonjour
J'ai une erreur sur cette fonction

Code: Tout sélectionner
function aff_photos($cont)
   {
   $query="SELECT photo_small, title FROM wpa_photo WHERE valide=1 and photo_small LIKE '%/$cont/%' ORDER BY date_ins DESC, heure_ins DESC LIMIT 2";
   $res_photo=@mysql_query($query,$db);
   $nbr_photo=mysql_num_rows($res_photo);
   for ($i=0; $i<$nbr_photo; $i++)
      {
      $list_photo=@mysql_fetch_row($res_photo);
      $photos.="<div align='center'><a href='$list_aff_photo[4]' target='_blank'><img src='$list_photo[0]' border='0' alt=\"$list_photo[1]\"></a><br><br></div>";
      }
   return $photos;
   }
$cont="southeast-asia";
echo aff_photos($cont);


Ca me retourne l'erreur
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/local/apache/htdocs/sites/t/the-world-in-photos.com/index.php on line 54

Je ne comprends pas pourquoi!!!
Pourtant ma connection à la bdd et le code marche si ce n'est pas une fonction.

Quelqu'un voit le problème?

Merci


ecocentric
WRInaute accro
WRInaute accro
 
Messages: 3577
Inscription: Mar Fév 10, 2004 16:40

Message le Mer Jan 04, 2006 16:43

global $db (par exemple)

$db est une variable locale non initialisée dans ton exemple.


sim100
WRInaute accro
WRInaute accro
 
Messages: 1271
Inscription: Dim Fév 02, 2003 18:45

si

Message le Mer Jan 04, 2006 16:49

Si elle l'est
Le programme est plus long que ça, les paramètres d'accès à la base de donnée sont initialisé au début


e-kiwi
Modérateur
Modérateur
 
Messages: 13817
Inscription: Mar Déc 23, 2003 9:04

Message le Mer Jan 04, 2006 16:50

d'où l'interet de ne pas masquer les messages d'erreurs de mysql_query ^^


sim100
WRInaute accro
WRInaute accro
 
Messages: 1271
Inscription: Dim Fév 02, 2003 18:45

???

Message le Mer Jan 04, 2006 16:52

Comment ça ?


e-kiwi
Modérateur
Modérateur
 
Messages: 13817
Inscription: Mar Déc 23, 2003 9:04

Message le Mer Jan 04, 2006 16:55

$res_photo=@mysql_query($query,$db);

si tu vire le "@", il te dis pas que la bdd '' n'existe pas ?


ecocentric
WRInaute accro
WRInaute accro
 
Messages: 3577
Inscription: Mar Fév 10, 2004 16:40

Re: si

Message le Mer Jan 04, 2006 17:02

sim100 a écrit:Si elle l'est
Le programme est plus long que ça, les paramètres d'accès à la base de donnée sont initialisé au début


Au début, certes, mais en dehors de la fonction. Donc, dans la fonction, c'est bien une variable locale non initialisée.

Et +1 pour la remarque de e-kiwi sur le @.


e-kiwi
Modérateur
Modérateur
 
Messages: 13817
Inscription: Mar Déc 23, 2003 9:04

Message le Mer Jan 04, 2006 17:04

au lieu de batailler, faire un echo $db dans la fonction ^_^


chava2b
WRInaute impliqué
WRInaute impliqué
 
Messages: 252
Inscription: Ven Déc 05, 2003 16:44

Message le Mer Jan 04, 2006 17:05

$res_photo=@mysql_query($query,$db);

J'savais pas qu'on pouvais mettre la base apres la requete... (si $db est la base bien sur)

donc ca evite de faire un mysql_select_de avant ?


e-kiwi
Modérateur
Modérateur
 
Messages: 13817
Inscription: Mar Déc 23, 2003 9:04

Message le Mer Jan 04, 2006 17:09

c'est surtout quand on utilise plusieurs BDD (rare)


sim100
WRInaute accro
WRInaute accro
 
Messages: 1271
Inscription: Dim Fév 02, 2003 18:45

merci

Message le Mer Jan 04, 2006 18:03

Merci à tous, effectivement kiwi la base n'était pas initialisée DANS la fonction :)


TOMHTML
WRInaute accro
WRInaute accro
 
Messages: 3242
Inscription: Mer Aoû 25, 2004 14:05

Message le Mer Jan 04, 2006 21:31

e-kiwi a écrit:d'où l'interet de ne pas masquer les messages d'erreurs de mysql_query ^^


c'est là qu'on reconnait le bon programmeur, celui qui a plus l'habitude de masquer ses erreurs que de les corriger :)

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Message le Jeu Jan 05, 2006 2:26

e-kiwi a écrit:d'où l'interet de ne pas masquer les messages d'erreurs de mysql_query ^^


Ou mieux, masquer les erreurs avec @ car en production c'est pas top et utiliser une fonction qui va logguer les erreurs.

Code: Tout sélectionner
if( ! @mysql_query( $sql ) ) {
    if( defined( 'LOG_ERROR' ) && LOG_ERROR ) {
      log( MYSQL_ERROR, $sql."\n".mysql_error() );
    }
}


avec la fonction log qui enregistre dans un fichier texte sur lequel ou fait un tail -f pour voir les logs en temps réel.

Avantage :
- on n'a pas à aller modifier toutes les fonctions susceptibles de générer une erreur avant le passage en prod, il suffit d'ajuster la constante adéquate.
- on dispose d'un système de suivi des erreurs même en période de production


e-kiwi
Modérateur
Modérateur
 
Messages: 13817
Inscription: Mar Déc 23, 2003 9:04

Message le Jeu Jan 05, 2006 8:13

en fait moi j'ai remplacé la fonction mysql_query() par une fonction requete() qui se connecte à la bdd, execute la requete et gere les erreurs, puis referme la connexion, comme ca c'est plus optimisé, et ca gere un journal d erreur sans avoir à le gerer à chaque requete dans le code


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités