[RESOLU] var_dump: array empty

Eléphanteau du PHP | 17 Messages

27 janv. 2016, 17:31

Bonjour, je cherche à récupérer le nombres de pages vues, dans le mois d'un site, ceci dans un tableau. Seulement il ne se rempli pas. J'ai pu le voir grâce au var_dump, car il n'y a aucune erreur d'affichée :shock:
$visite_par_mois = array();
$sql = 'SELECT date FROM statistiques WHERE date LIKE "'.$date_annee.'%" ORDER BY date ASC';

$result = mysqli_query($base,$sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($base));
while ($data = mysqli_fetch_array($result)) {
	$date=$data['date'];
	
	sscanf($date, "%4s-%2s-%2s %2s:%2s:%2s", $date_Y, $date_m, $date_d, $date_H, $date_i, $date_s);
	
	if(isset($date_m) ) {
		if($date_m < "10") {
			$date_m = substr($date_m, -1);
		} else {
			$visite_par_mois[$date_m]=$visite_par_mois[$date_m] + 1;
		}
	}
}
var_dump($visite_par_mois);

$total_pages_vu = mysqli_num_rows($result);
mysqli_free_result($result);

sscanf($date_annee, "%4s-%2s-%2s %2s:%2s:%2s", $date_Y, $date_m, $date_d, $date_H, $date_i, $date_s);

// on affiche le nombre de pages vues en fonction des mois
echo '<br />Les statistiques de l\'année '.$date_annee.' : <br /><br />';

for($i = 1; $i <= 12; $i++) {
	if (!isset($visite_par_mois[$i])) {
	echo 'Mois : '.$i.' : 0 page vue<br />';
	}
	else {
	echo 'Mois : '.$i.' : '.$visite_par_mois[$i].' pages vues<br />';
	}
}
Avez-vous des idées pour corriger cela ?
Merci d'avance :)

Mammouth du PHP | 1967 Messages

27 janv. 2016, 17:38

if($date_m < "10") {
Ceci me semble douteux, une comparaison de string ne va rien apporter de bon, et surement que la condition est toujours remplie.

Vérifie avec var_dump le contenu de $date_m et son type, et enlève peut être les guillemets pour faire une comparaison d'entier.

En règle générale, tu aura plus facile si tu gérais directement des timestamp dans MYSQL et PHP plutot qu'un format précis que tu dois parser à chaque utilisation
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 17 Messages

27 janv. 2016, 17:41

le var_dump de $date_m me renvoie "1" o.O

Avatar du membre
Mammouth du PHP | 1609 Messages

27 janv. 2016, 17:42

Salut, je vois au moins 2 problèmes sur le script ici :
if($date_m < "10") {
  $date_m = substr($date_m, -1);
} else {
  $visite_par_mois[$date_m]=$visite_par_mois[$date_m] + 1;
}
Si $date_m est inférieur à 10 alors $visite_par_mois[$date_m] n'est pas incrémenté.
Et les différents index de $visite_par_mois ne sont jamais initialisés.

L'algo devrait plutôt ressembler à ceci :
if($date_m < 10)
  $date_m = substr($date_m, -1);

if(!isset($visite_par_mois[$date_m]))
  $visite_par_mois[$date_m] = 0;

$visite_par_mois[$date_m]+= 1;
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 17 Messages

27 janv. 2016, 17:45

Saian, je reste sans voix, je suis passé par plusieurs forum durant 6 jours entier, un copier/coller a suffit pour tout arranger.
Merci beaucouuup :)

Avatar du membre
Mammouth du PHP | 1609 Messages

27 janv. 2016, 17:53

Héhé 8-)
Développeur web depuis + de 20 ans