Page 1 sur 2

erreur in_array()

Posté : 29 sept. 2005, 23:04
par osmoz
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

Posté : 29 sept. 2005, 23:14
par ouckileou
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 ?

Posté : 29 sept. 2005, 23:18
par Truc
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.

Posté : 29 sept. 2005, 23:39
par osmoz
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:

Posté : 29 sept. 2005, 23:50
par Cyrano
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;
?>

Posté : 29 sept. 2005, 23:56
par osmoz
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 ...

Posté : 30 sept. 2005, 00:03
par Truc
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

Posté : 30 sept. 2005, 00:07
par osmoz
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 ...)

Posté : 30 sept. 2005, 00:10
par Truc
voila, tu fait tu as dis.. déclaration ensuite var_dump :wink:

Posté : 30 sept. 2005, 00:12
par osmoz
voilà ce que ça me met
bool(false)

Posté : 30 sept. 2005, 00:26
par Truc
le chemin que tu donne :arrow: ./pages/ .... n'est pas bon...par contre je ne saurai te dire le bon chemin ..

Posté : 30 sept. 2005, 00:29
par osmoz
Mais pourtant 0.php est également dans le dossier pages !
Et pourquoi alors ça fonctionne en local ?

Je n'y comprend rien ! :lol:

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

Posté : 30 sept. 2005, 00:40
par osmoz
je ne suis pas à la racine, mes pages sont dans un dossier pages !

Mais bon je vais essayer ...

Posté : 30 sept. 2005, 00:45
par osmoz
ça ne fonctionne pas ...