Algo en PHP

Résolu/Fermé
0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 - 19 févr. 2010 à 16:45
0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 - 24 févr. 2010 à 09:14
Bonjour,

J'ai un site fait en PHP. Dans ce site j'affiche dans un tableau des infos que je récupère dans un fichier CSV.
Enfaite, ce fichier contient une liste de produits qui doivent être fabriqué avant une certaine date.
Pour le moment il y a la liste des produits avec la date à laquelle ils doivent être fabriqué dans un même tableau.
Ce que je voudrais c'est faire un tableau différent pour chaque date.

Pourriez-vous m'aider s'il vous plait parce que pour l'instant je n'arrive à faire des tableaux différents seulement en mettant des dates à la main.
Il faudrait juste une boucle avec la date mais alors ou la placer et comment mettre cette boucle....

Voici mon code :
$file = $_FILES['fichier_csv']['tmp_name'];
$contenu = fopen ($file, "r") or die("Can not open $file");
if (!$fp = fopen($file,"r")) {
	echo "Echec de l'ouverture du fichier";
}
else {
	$date_actuelle = date('d/m/Y');
	$date_actuelle = explode("/", $date_actuelle);
	$date_actuelle = mktime(0, 0, 0, $date_actuelle[1], $date_actuelle[0], $date_actuelle[2]);
	$conteneur = Array();
	$colonne = fgetcsv($fp, 1024, ';');
	echo "<table border='1'>";
		echo "<td>$colonne[23]</td>";
		echo "<td>$colonne[22]</td>";
		echo "<td>$colonne[24]</td>";
		echo "<td>$colonne[25]</td>";
		echo "<td>$colonne[26]</td>";
		echo "<td>$colonne[17]</td>";
	while(!feof($fp)) {
		$colonne = fgetcsv($fp, 1024, ';'); 
		if ($colonne != NULL) { 
			$datea = explode("/", $colonne[17]); 	
			$dateb = mktime(0, 0, 0, $datea[1], $datea[0], $datea[2]);
			if ($date_actuelle == $dateb) {
				$indicateur = $colonne[22] . $dateb;
				if (isset($conteneur[$indicateur])) {
					$conteneur[$indicateur][4] += $colonne[26];
				}
				else {
					$conteneur[$indicateur] = Array(	
						$colonne[23],$colonne[22],$colonne[24],$colonne[25],$colonne[26],$colonne[17]
					);
				}
			}
			
		}
	}
	fclose($fp);
	foreach ($conteneur as $colonne) {
		echo "<tr>";	
		for ($i = 0; $i<6; $i++) {			
			echo "<td>$colonne[$i]</td>";
		}
		echo "</tr>\n";
	}
	echo "</table>\n";
}
A voir également:

29 réponses

0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 5
23 févr. 2010 à 12:00
Ahhhhh ca marche !!!!!
Tout ca pour une histoire de majuscule-minuscule :/
Ce qui est bizarre quand même c'est que ca marchait très bien avec la majuscule sur mon pc...
Fin bon, le principal c'est que ca marche :)

Merci bien Alain_42.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
23 févr. 2010 à 12:10
Par contre ça ne marchera plus sur ton PC, c'est le cas chez moi

car bizarrement la date du fichier csv 11/02/10 ets transformée lors de la lecture par php en 11/02/2010

donc avec la modif Y en y ça ne marche plus

expliquation:

dans un fichier excel ce qui est affiché n'est pas exactement ce qui est contenu dans la cellule

pour une date, tu peux afficher 11/02/10 ou 11/02/2010 la valeur contenue dans la cellule est la même

d'ou l'utilité des "
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
23 févr. 2010 à 13:09
je reviens

donc pour contourner le pb et que ça marche dans tous les cas:

il faut adapter cette partie:

//timestamp de la datea
			$datea = explode("/", $colonne[17]); 
			if(strlen($datea[2])<4){
				//si annee au format aa
				$dateb = mktime(0, 0, 0, $datea[1], $datea[0], '20'.$datea[2]);
			}else{
				//si annee au format aaaa
				$dateb = mktime(0, 0, 0, $datea[1], $datea[0], $datea[2]);
			}
			//datea dans l'array
			$array_datesA[]=$dateb;

ainsi si php transforme pas 10 en 2010 on rajoute 20 devant sinon on laisse 2010

et remettre le Y, pour comparer dans tous les cas avec les 4 ch


//lignes des donnees correspondant à cette date					
				foreach($conteneur as $cle2=>$value2){
				
					////TEST
					echo 'Date dans l\'array des dates: '.date('d/m/Y',$value).' Date dans le conteneur: '.trim($value2[5]).'<br />';
					/////
					
						if(date('d/m/Y',$value) == trim($value2[5])){ //trim pour supprimer les espaces eventuels qui trainent en debut et fin
							echo '<tr>'; 
								echo '<td>'.$value2[0].'</td><td>'.$value2[1].'</td><td>'.$value2[2].'</td><td>'.$value2[3].'</td><td>'.$value2[4].'</td><td>'.$value2[5].'</td>';			
							echo '</tr>';	
						}
					///////						
				}

0
0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 5
23 févr. 2010 à 14:00
Exact ca ne marche pas sur mon pc avec le y au lieu du Y.
Mais le code qu tu as mit si dessus ne marche pas plus. Le test renvoi bien les valeurs mais les tableaux sont toujours vide :/
0

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

Posez votre question
0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 5
23 févr. 2010 à 14:23
Bon finalement dans mon fichier csv j'ai modifier les paramètres des cellules contenant la date.
Comme tu l'as dit, ce qui est affiché dans une cellule n'est pas forcément ce que contient la cellule.
Je lui ai donc dit d'afficher en format jj/mm/aaaa au lieu de jj/mm/aa.
Du coup sur le pc du bureau ca fonctionne bien avec date('d/m/Y') mais plus avec date('d/m/y').
Pareil pour mon pc.

Je vais donc opter pour le date('d/m/Y'). C'est le seul qui marche pour les deux...pour le moment du moins.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
23 févr. 2010 à 17:07
oui sinon opte pour la modif que je t'ai fait en dernier et qui adapte en fonction du format

if(strlen(......
0
0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 5
23 févr. 2010 à 17:15
J'ai essayé avec la fonction que tu as mise mais les tableaux sont toujours vide....
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
23 févr. 2010 à 17:36
attention il faut la fonction strlen et plus bas dans le script

date('d/m/Y....

chez moi ça marche comme ça

si pb laisses les echo pour voir
0
0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 5
24 févr. 2010 à 09:14
J'ai bien gardé la fonction strlen et la date('d/m/Y') mais ca ne fonctionnait pas jusqu'à ce que je change les paramètres des cellules. Maintenant ca fonctionne.
0