Problème de in_array [Résolu]

Signaler
Messages postés
8
Date d'inscription
dimanche 4 novembre 2007
Statut
Membre
Dernière intervention
5 novembre 2007
-
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
-
Tout d'abord, Bonsoir

Lors de l'éxécution de ma page PHP, j'obtient cette erreur (en 30 Fois, car il y a 30 Jours en Novembre
Warning: in_array() [function.inarray]: Wrong datatype for second argument in /mnt/122/free.fr/d/5/revan38/calend/admin/calendrier.inc.php on line 95

Le code source se trouve ici http://paste.ubuntu-nl.org/43319/ (je l'ai mis ici pour la lisibilité, et la coloration ^^)

A savoir que beaucoup de fonctions echo(); sont là, comme test ^^

En esperant que vous puissiez m'aider =)
A voir également:

14 réponses

Messages postés
8
Date d'inscription
dimanche 4 novembre 2007
Statut
Membre
Dernière intervention
5 novembre 2007

J'ai trouvé la cause de mon erreur !

Pour je ne sais quelle raison, je dois mettre Ma requête SQL DANS la fonction showcalendar()

En espèrant que ça puisse aider des autres personnes ;)
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Ah ! J'avais pas fait gaffe à ça.
C'est à cause de la portée des variables... La variable tableau qui contient les données récupérées par ta requête n'existe pas dans ta fonction, à moins d'utiliser global :

global $dbtime;
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

http://fr.php.net/manual/fr/function.in-array.php

Le deuxième argument passé à in_array() doit être un tableau, pas une chaine de caractères...
Messages postés
8
Date d'inscription
dimanche 4 novembre 2007
Statut
Membre
Dernière intervention
5 novembre 2007

Justement, mon $timedb est un tableau quand je le print_r j'obtient

Array
(
[0] => 1179612000
[1] => 1180044000
[2] => 1180735200
[3] => 1181512800
[4] => 1181944800
[5] => 1183845600
[6] => 1188856800
[7] => 1190152800
)

(ce sont des timestamp)
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

$timedb est peut-être un array, mais pas le second argument que tu passes à in_array()

if (in_array(''.$mktime.'', ''.$timedb.'', true))

''.$timedb.'' => ça, c'est une chaine de caractères

^^
Messages postés
8
Date d'inscription
dimanche 4 novembre 2007
Statut
Membre
Dernière intervention
5 novembre 2007

J'ai remplacé la ligne que tu a cité par

if (in_array(''.$mktime.'', $timedb, true))

Et toujours la même erreur
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Re,

Juste pour savoir... Pourquoi tu concatènes $mktime avec deux chines vides ?

Bon... Dans ton tableau, tu as des entiers. Toi, puisque tu concatènes $mktime avec deux chaines vides et que tu passes TRUE en troisième argument, tu cherches des chaines.

http://fr3.php.net/manual/fr/function.in-array.php :
"Le troisième paramètre strict est optionnel. S'il vaut TRUE alors in_array() vérifiera aussi que le type du paramètre needle correspond au type de la valeur trouvée dans haystack."

Donc ça marche pas.

Enlève le troisième argument pour voir...

if (in_array(''.$mktime.'', ''.$timedb.''))
Messages postés
8
Date d'inscription
dimanche 4 novembre 2007
Statut
Membre
Dernière intervention
5 novembre 2007

J'ai fait 
if (in_array($mktime, $timedb))

et

 if (in_array(''.$mktime.'', $timedb))

Et dans les deux cas, j'ai encore la même erreur 
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Ben écoute je viens de tester chez moi, et ça marche...

J'ai pris tes fonctions geSecond, getMinute, etc
Ensuite, j'ai mis ça :

// Simulation du passage de l'argument de la fonction showCalendar
$periode = time();
// Simulation du compteur
$pas = 1;
// Code normal
$mktime = mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode));
// Simulation du résultat de la bdd
$timedb = array(1179612000, 1180044000, 1180735200, 1181512800, 1181944800, 1183845600, 1188856800, 1190152800);

if (in_array($mktime, $timedb)) {
echo 'Oui';
}
else {
echo 'Non';
}

Et là, ça m'affiche "Non"...

J'sais pas quoi te dire... Parce que le code, comme ça, est correct...
Messages postés
8
Date d'inscription
dimanche 4 novembre 2007
Statut
Membre
Dernière intervention
5 novembre 2007

Oui, un des mystères de PHP ^^
Messages postés
8
Date d'inscription
dimanche 4 novembre 2007
Statut
Membre
Dernière intervention
5 novembre 2007

Hey, Tu as l'erreur ou pas ?


Car après tout C'est normal qu'il affiche non, les timestamp de $timedb sont d'avant le 20 septembre il me semble, donc aucun Timestamp de ce mois ci.

Peut être une piste à suivre ^^
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Ben... Tu utiliserais pas un système de cache par exemple ? Zend Optimizer, APC, ou autre ?
Est-ce que si tu rajoutes une ligne vide avant la ligne où il y a l'erreur, le message d'erreur change ou bien estè-ce qu'il indique toujours le même numéro de ligne ?
Messages postés
8
Date d'inscription
dimanche 4 novembre 2007
Statut
Membre
Dernière intervention
5 novembre 2007

Non non, je teste sur un .free.fr et je n'ai aucun système de caché activé, la preuve, j'suis passé de la ligne 95 à 97 ^^
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Ben moi j'ai pas d'erreur, puisque le script s'exécute normalement. Il m'affiche "non" parce que c'est la bonne réponse, pas parce que le script ne marche pas...