erreur in_array()

Eléphanteau du PHP | 10 Messages

29 sept. 2005, 23:04

Salut à tous !

Je débute en php, et j'ai une erreur que je ne comprend pas du tout, car à vrai dire, tout fonctionnait parfaitement sous easy php ...

Voici donc l'erreur :
Warning: in_array(): Wrong datatype for second argument in /var/www/free.fr/6/c/ephenya/1024/index.php on line 36
et voici le code :
<? define("PATH", "./pages/");
     // Tableau contenant les pages autorisées
     $tableau = glob(PATH . "*.php");
     if (isset($_GET["page"]) && in_array(PATH . $_GET["page"] . ".php", $tableau)) {
          $pageInclude = PATH . $_GET["page"] . ".php";
     }
     else {
          $pageInclude = PATH .  "0.php";
     }
     include $pageInclude;
	 ?>
Sachant que la ligne 36 est :
if (isset($_GET["page"]) && in_array(PATH . $_GET["page"] . ".php", $tableau)) {
La page par default fonctionne, donc l'index sa lance sans erreurs, mais dès qu'on change d'url, on a cette erreur, mais je le répète seulement sur free et pas en local sous easy php.

Je dois avouer que là je ne comprend pas et j'implore donc votre aide !

Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 sept. 2005, 23:14

sans chercher plus loin, c'est que l'argument 2 de in_array n'est pas un tableau, donc que glob() doit renvoyer false...

cherche de ce coté là, tu es sur qu'il y a des fichiers PHP là où tu cherches ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 sept. 2005, 23:18

Salut, d'apres l'erreur il ne s'agit pas d'un tableau pour le 2nd argument de in_array()....
fait un var_dump($tableau);
ou
print_r ($tableau);
Pour voir ce que contien cette variable.

Verifi aussi le chemin que tu donne lorsque tu met ta page en ligne.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 10 Messages

29 sept. 2005, 23:39

Merci beaucoup de vos conseils, mon problème n'a vraiment pas l'air compliqué à résoudre, mais quand je dis que je début en php, je débute vraiment !!!

Alors j'essaie de voir ce que vous me dites mais vraiment j'y arrive pas :?

Pardon d'être un boulet ... :oops:

Mammouth du PHP | 19672 Messages

29 sept. 2005, 23:50

En cas d'erreur, glob() retourne false, ajoute alors un test supplémentaire:
<?
define("PATH", "./pages/");
// Tableau contenant les pages autorisées
$tableau = glob(PATH . "*.php");

if (isset($_GET["page"]) && (false !== $tableau && in_array(PATH . $_GET["page"] . ".php", $tableau)))
{
    $pageInclude = PATH . $_GET["page"] . ".php";
}
else
{
    $pageInclude = PATH .  "0.php";
}
include $pageInclude;
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

29 sept. 2005, 23:56

Merci cyrano.

Je viens donc d'essayer avec ton code, et là je n'ai plus d'erreur, mais la page reste tout le temps sur celle en default ...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 sept. 2005, 00:03

je pense plustot qu'il s'agit d'une erreur de
define("PATH", "pages/");
on ne sait jamais...pour en etre sur fair un var_dump($tableau); , dans la logique tu dois avoir une liste avec les fichier .php si ce n'est pas le cas le chemin n'est pas bon

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 10 Messages

30 sept. 2005, 00:07

Ok merci !

Je fais quoi en fait ? Je mets var_dump($tableau) après $tableau = glob(PATH . "*.php");

et j'éxécute ?

(quand je dis que je débute, je débute vraiment ...)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 sept. 2005, 00:10

voila, tu fait tu as dis.. déclaration ensuite var_dump :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 10 Messages

30 sept. 2005, 00:12

voilà ce que ça me met
bool(false)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 sept. 2005, 00:26

le chemin que tu donne :arrow: ./pages/ .... n'est pas bon...par contre je ne saurai te dire le bon chemin ..

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 10 Messages

30 sept. 2005, 00:29

Mais pourtant 0.php est également dans le dossier pages !
Et pourquoi alors ça fonctionne en local ?

Je n'y comprend rien ! :lol:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 sept. 2005, 00:37

si tu te trouve a la racine essai comme ça:
$tableau = glob("*.php"); 
ou encore comme ceci
define("PATH", "../pages/"); 
avec 2poins ../
Modifié en dernier par Truc le 30 sept. 2005, 00:40, modifié 1 fois.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 10 Messages

30 sept. 2005, 00:40

je ne suis pas à la racine, mes pages sont dans un dossier pages !

Mais bon je vais essayer ...

Eléphanteau du PHP | 10 Messages

30 sept. 2005, 00:45

ça ne fonctionne pas ...