Aller au contenu

Script PHP qui mange mes variables...


Sujets conseillés

Posté

Bonsoir à tous et à toutes.

Pour vous expliquer la situation, mon site sur la ferme est hébergé sur un serveur IIS depuis 2001, jusque là tout va bien. :D

Il y a quelques semaines, je me rends compte que je peut bénéficier du module Isapi_rewrite (équivalent du mod_rewrite sous Apache) et j'en fais la demande.

Comme le serveur où j'était hébergé n'était pas équipé de l'extension, un technicien a déplacé le site et la base mysql sur une autre machine. :rolleyes:

Petit message de l'hébergeur (hier) : votre site a bien été déplacé, vous pouvez configurer le httpd.ini, bla bla... :)

Je vais sur le site pour voir si tout va bien et :yoot: des scripts ne fonctionnent plus MAIS aucun warning ou notice. <_<

Je mets la ligne suivante à la base de mes scripts afin que je puisse voir les messages d"erreur.

error_reporting(E_ALL);

J'uploade mais toujours aucune erreur et des scripts ne fonctionnent toujours pas. :blink: Regardez ici : Galerie Photo et essayez de visualiser une miniature.

Je vérifie les versions de PHP, 4.3.8 en local et sur le serveur, je regarde les phpinfo, pas de grosses différences.

Je me dit que c'est mes requêtes qui sont trop compliquées et mal optimisées et j'en fait une toute simple pour tester (requete toute simple) et ça ne fonctionne encore pas.

La fonction pour faire les miniatures fonctionne très bien lorsqu'on fait une recherche : Cherchez les chats.

J'ai testé plein de choses et là j'en ai vraiment marre :evil:

Ça fonctionnait impeccable avant, ça fonctionne impeccable en local et ça foire pour un simple changement de serveur :blink:

Quelqu'un pourrait-il m'éclairer :?:

Posté

j'avoue que tout n'est pas très clair :).... toutefois je te conseille de vérifier les droits des fichiers, si ceux si sont à jour et correspondent au besoins du script.... deuxieme chose, les coordonnées et la connexion à la base de données sont à verifier

Posté

AllForEver,

Soit ta fonction Miniature ne fonctionne pas, soit ta requête ne retourne pas les bonnes valeurs... et pour la cause, lis mon PS en fin de post ;)

Peux-tu faire un essai et remplacer:

while($pics=mysql_fetch_array($result, $cnx)){
    echo Miniature($pics[file], $pics[title], $pics[id], $page);
}

par:

while($pics=mysql_fetch_array($result, $cnx)){
    print "File = ".$pics[file]."<br>Title = ".$pics[title]."<br>Id = ".$pics[id]."<br>Page = ".$page."<br>---------<br>";
}

et nous donner le résultat pour s'assurrer que la fonction Miniature reçoit bien les bonnes valeurs.

Dan

PS: il s'agit vraisemblablement de la variable "register_globals" qui est mise à "Off" par défaut sur les dernières versions de Php

Dans ce cas, comme tu n'as pas accès au php.ini, il te suffit d'ajouter une ligne dans le fichier .htaccess à la racine de ton site:

php_flag register_globals on

;)

Posté

:wacko:

Où alors, si la cause en est le register_globals à off, d'initaialiser toutes tes variables comme il faut avant traitement, et de coder en conséquence (le pense à cela, par exemple:

Posté

Bonsoir,

Je viens de modifier la ligne de code, tel que tu me l'avais demandé Dan et j'ai initialisé mes variables avant.

$query="SELECT file, title, id FROM images WHERE id_cat=1";

$result=mysql_query($query, $cnx) or die ("Erreur requete : $query");

$pics['file']='';
$pics['title']='';
$pics['id']='';

while($pics=mysql_fetch_array($result, $cnx)){
   print "File = ".$pics[file]."<br>Title = ".$pics[title]."<br>Id = ".$pics[id]."<br>---------<br>";
}

Cela n'a rien changé, : Page de test

Justement, la fonction miniature ne reçoit aucune variable, la boucle se fait bien mais les variables ne passent pas. :evil:

La fonction miniature fonctionne bien ici : Recherche sur les chats

J'ai remarqué aussi que le script pour afficher les miniatures connaissait le même problème. :blink: Cliquez sur une des miniatures pour la recherche des chats, vous verrez bien.

D'autres scripts passent très bien tel celui ci, qui est dans cette page Liens agricoles

$queryCategories="SELECT id_cat, description FROM cat_liens ORDER BY description";
$resultCategories=mysql_query($queryCategories, $cnx);

$categories='';
$id_categories='';
$liste_categories='';

while($listcategories=mysql_fetch_array($resultCategories)){
$categorie=$listcategories['description'];
$id_categorie=$listcategories['id_cat'];

$liste_categories.="<li><a href=en_savoir_plus.php?categorie=$id_categorie title=\"$categorie\" class=ver10noir>$categorie</a></li>\n";
}

deuxieme chose, les coordonnées et la connexion à la base de données sont à verifier

Tout est ok de ce côté la, d'autres scripts du site fonctionnent à merveille. :)

Est-ce que le problème ne pourrait pas venir de la base mysql, étant donné qu'elle a été déplacée elle aussi ?

Posté

bonjour,

pour etre rigoureux, vous devez ecrire $pics['file'] et non pas $pics[file]. Ce que vous avez d'ailleurs fait dans les cas qui fonctionnent :)

Ensuite, toujours comme dans les cas qui fonctionnent, pas besoin d'un second argument a mysql_fetch_array().

A l'occasion, essayez ceci :

$query="SELECT file, title, id FROM images WHERE id_cat=1";

$result=mysql_query($query) or die ("Erreur requete : $query");

while($pics=mysql_fetch_array($result))

{

print_r($pics);

}

:)

Posté (modifié)

Effectivement, vous avez raison :blush: le problème venait du fait que je passait un 2ème argument dans le mysql_fetch_array.

Ah, c'était une bien mauvaise habitude que j'avait pris lorsque je commencais à coder. Voila pourquoi il n'y avait que certains bouts de scripts qui posaient problème : les plus anciens.

A force de voir l'erreur on ne la voit même plus. :(

Mais je ne comprends toujours pas pourquoi il n'y avait aucun message d'erreur malgré la ligne suivante en début de script :

 error_reporting(E_ALL);

Dans tout les cas, merci à tout ceux qui ont jeté un oeil sur mon souci, encore une erreur bête de ma part :mad2:

Vous pouvez donc maintenant admirer les z'animaux de ma galerie ! :lol:

Edit : Si un gentil modérateur pouvait éditer le titre du sujet pour ajouté [Résolu] :)

Modifié par AllForEver
Posté
Mais je ne comprends toujours pas pourquoi il n'y avait aucun message d'erreur malgré la ligne suivante en début de script :
 error_reporting(E_ALL);

Simplement parce qu'il ne s'agit pas d'une erreur php :)

Un deuxieme argument est autorise avec la fonction mysql_fetch_array(). Par defaut il s'agit de la constante MYSQL_BOTH, mais vous pouvez aussi utiliser MYSQL_NUM et MYSQL_ASSOC.

Dans votre cas, $cnx avec une valeur de type "Resource id #..." ne correspondant a aucune des constantes attendues, est considere comme egale a MYSQL_NUM (choix du compilateur php).

Vos resultats ne sont donc accessibles que via des referants numeriques ($pic[0], $pic[1], etc.), et non pas associatifs ($pic['description'], $pic['id_cat'], etc.).

Vous auriez pu vous en rendre compte via la fonction print_r();

:)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...