Problème de in_array

Résolu
R3VAN38 Messages postés 8 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007 - 4 nov. 2007 à 22:02
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 5 nov. 2007 à 20:40
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 =)

14 réponses

R3VAN38 Messages postés 8 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 20:01
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 ;)
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 nov. 2007 à 20:40
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;
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
4 nov. 2007 à 22:55
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...
0
R3VAN38 Messages postés 8 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 06:14
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 nov. 2007 à 11:45
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

^^
0
R3VAN38 Messages postés 8 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 14:43
J'ai remplacé la ligne que tu a cité par

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

Et toujours la même erreur
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 nov. 2007 à 15:38
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.''))
0
R3VAN38 Messages postés 8 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 18:17
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 
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 nov. 2007 à 18:36
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...
0
R3VAN38 Messages postés 8 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 18:39
Oui, un des mystères de PHP ^^
0
R3VAN38 Messages postés 8 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 18:47
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 ^^
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 nov. 2007 à 18:50
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 ?
0
R3VAN38 Messages postés 8 Date d'inscription dimanche 4 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 18:55
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 ^^
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 nov. 2007 à 19:02
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...
0
Rejoignez-nous