Fichier txt dans un tableau

Eléphanteau du PHP | 15 Messages

14 avr. 2013, 18:01

Bonjour à tous.
Après plusieurs tentatives de codes qui ne me conviennent pas. Pourriez-vous m'expliquer comment obtenir ce que je souhaite..

Sur une page html, je souhaiterais obtenir un tableau de 3 ou 4 colonnes selon mes besoins.
Les informations que doivent contenir le tableau se situent dans un fichier .txt ; sachant que sur chaque ligne, une dizaine d'informations y figurent séparaient par des virgules. Seules 2 ou 3 informations m'intéressent pour remplir mon tableau.

Dans ma page html, je fais appel à ma feuille de style.
Dans la balise body, j'écris mon php.
J'ai testé quelque chose, de ce style là, mais cela ne me convient pas. Je n'ai pas pas de tableau qui apparaît. Et j'ai des erreurs dans mon php. Pourriez-vous m'aider à comprendre mes erreurs et à les résoudre.

<?php 
$tab = array();
$fichier = fopen("fichier.txt", "r"); //on ouvre le fichier en lecture
$i=0;

while(!feof($fichier))
	{
		//On verifie que la fin du fichier n'est pas atteinte
		$ligne = fgets($fichier, 4096); //On lit la ligne courante
		$informations = explode(',' , $fichier[$i]); //On sépare les différents éléments constituant une ligne
		$tab[$i] = $informations[1]; // Je souhaite obtenir la deuxième information de mon fichier
		$tab[$i]= $informations[2]; // Je souhaite obtenir la troisième information de mon fichier
		$i = $i+1;
	}
	
echo "<tr><th> 1ère colonne </th><th> 2ème colonne </th></tr><br/>";
foreach($tab as $untab)
	{
		echo $untab;// afficher le nouveau tableau
	}
?>	
Je vous remercie d'avance pour votre aide. Bonne journée.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 avr. 2013, 21:25

salut,

utilise :
  • file : pour avoir un tableau avec une ligne du tableau == une ligne du fichier (simple et rapide ;) )
  • foreach : pour parcourir le tableau
  • str_getcsv : pour obtenir un tableau correspondant à ta ligne (qui est du csv) un élément par ligne de tableau
  • echo : pour afficher le tableau :mrgreen: (mais ça tu t'en doutais ;) )
essai de faire une truc avec ça et revient si tu as des soucis.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

14 avr. 2013, 22:02

D'abord, merci pour le temps que vous me consacrez.
Déjà, est-ce que ceci est correct, afin d'avoir un affichage tableau ?
<div class="tableau">
<table>
	<thead>
		<th>Colonne 1</th>
		<th>Colonne 2</th>
		<th>Colonne 3</th>
	</thead>
        <?php
		//Code php à faire
		foreach($blabla as $unblabla=>$ahah=>$ihihi)
	        // Entête du tableau HTML
		echo "<tr><td>$unblabla</td><td>$ahah</td><td>$ihih</td></tr><br/>";
	?>
</table>
</div>
Ensuite, pour mon code php. Dois-je repartir de ce que j'ai commencé ? Ou reprendre tout à zéro ?
Sachant que je vais devoir faire ceci pour plusieurs pages, ne serait-ce pas mieux de faire des fonctions ? Mais selon les pages, j'aurais 2 ou 3 colonnes; est-ce faisable ?
De plus, dans la dernière colonne de mes tableaux, une croix devra s'afficher pour effectuer une suppression de ligne et suppression dans le fichier. Donc, pour cela, faut-il que je traite cette colonne en même temps que ma lecture dans le fichier ?

Encore merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 avr. 2013, 23:10

il te manque les <tr></tr> dans le thead, la déclaration de ligne est obligatoire ;)

Pour le corps de tableau il te manque le <tbody> et tu n'as pas besoin du <br /> (un tableau change de ligne tous seul entre les tr ;) )


pour le reste effectivement tu peux faire une fonction pour éviter de dupliquer le code.

tu peux passer en paramètre les colonnes à afficher.

pour ce qui est de la suppression, cela dépend comment prévois la chose.
Avec seulement du php il faut que tu pense a embarque le code de validation du formulaire sur toute les pages (et donc le code de suppression dans le fichier, je te conseil aussi une fonction pour cela).

Après tu peux utiliser du javascript (et une requête ajax) vers un fichier unique.

Attention si le fichier est différent pense le passer en paramètre de la requête ajax !


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

21 avr. 2013, 20:54

Merci pour l'aide.
Je n'ai jamais fais de fonction. Comment fais-t-on ? Pour la créer et pour pouvoir sans servir sans problème dans mes pages.
De plus, il faudra que je l'appelle dans mes pages. Est-ce que require("functions.php") est correct ?

Je bloque vraiment pour que chaque élément séparé par , dans fichier.txt apparaisse dans une colonne différente.

Fichier.txt du style :
Dupont,Jean,15/12/1234,,
Zola,Emile,,,
etc

J'ai fais un formulaire pour remplir mon fichier. Rien ne s'écrit après les virgules, si aucune information n'est rempli ; logique.
Imaginons, que ce sont les deux premiers éléments que je souhaite afficher sur ma page html dans un tableau avec en dernière colonne, ma colonne suppression où je me chargerais de la suppression ultérieurement. Pourriez-vous m'aider ?
De plus, j'ai un autre soucis. A chaque fois que je remplis un formulaire, je souhaiterais que le compteur augmente de 1 à chaque fois afin que chaque id soit différent. Comment pourrais-je faire pour que Fichier.txt devienne de ce style là :
1,Dupont,Jean,15/12/1234,,
2,Zola,Emile,,,
etc

Je vais essayer d'obtenir mon tableau, avant de m'occuper de la suppression. Ce sera plus simple, chaque chose en son temps.
 <div class="tableau">
<table>
        <thead>
                <tr> 
                <th>Colonne 1</th>
                <th>Colonne 2</th>
                <th>Colonne 3</th>
                </tr>
        </thead>
        <tbody>
        <?php
                //Code php à faire
                foreach($blabla as $unblabla=>$ahah=>$ihihi)
                // Entête du tableau HTML
                echo "<tr><td>$unblabla</td><td>$ahah</td><td>$ihih</td></tr><br/>";
        ?>
        </tbody>
</table>
</div>

Je vous remercie d'avance pour le temps que vous me consacrez.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 avr. 2013, 23:05

as tu songé à utiliser une base de données afin de simplifier la chose ?

Si tu gère le fichier d'un bout à l'autre je te conseillerais d'utiliser un fichier plus structuré (comme sérialiser un tableau php, ou du JSON).

quand a ton problème, as tu essayé quelque chose avec les fonctions que j'ai indiqué ?

commence par créer un fichier avec des données et de le lire et l'afficher avec les fonctions ? (aide toi des exemples de la doc des fonctions).

si tu ne comprend pas une fonction demande.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

08 mai 2013, 17:44

Bonjour,
Après plusieurs tentatives.
J'ai réussi à obtenir ce que je souhaitais mais quelques erreurs apparaissent.. Sauriez-vous m'aider à les retirer?
Dans ma page php, j'ai le code suivant :
	<table border=6 bordercolor="#660000" width="30%" cellpadding="4" cellspacing="3" bgcolor="#FFCC66">
			<thead>
					<th>Pseudo</th>
					<th>Nom</th>
					<th>Prénom</th>
					<th>X</th>   // Colonne pour ma suppression disponible seulement pour un administrateur
			</thead>
			<tbody >
			<?php
				$file = fopen('fichier.txt','r');   // Ouverture du fichier concerné
				while(!feof($file))
				{
					$lignefile = fgets($file,100);
					$infos = explode(',',$lignefile);
					if($_SESSION['admin'] == 1)
					{
						if ($infos[0] == "") // Cela correspond à la dernière ligne vide
						{
							// Afficher le + pour un ajout à la fin du tableau dans la première colonne
							echo '<tr><td>' . '<a href = "formulaire-ajout.php"> + </a>' . '</td><td>' . " " . '</td><td>' . " " . '</td></tr>';
						}
						else
						{
							echo '<tr><td>' . $infos[2] . '</td><td>' . $infos[0] . '</td><td>' . $infos[1] . '</td><td>' . '<a href = "suppression.php"> X </a>' . '</td></tr>';
						}
					}
					else
					{
						echo '<tr><td>' . $infos[2] . '</td><td>' . $infos[0] . '</td><td>' . $infos[1] . '</td><tr>';
					}
				}
				fclose($file);
			?>
			</tbody>
		</table>

Mon tableau s'affiche avec les informations que je souhaite. Or 1 erreur s'affiche !
Notice: Undefined offset: 2 in D:\Site\fichier.php on line 42 (ligne : echo '<tr><td>' . $infos[2] . '</td><td>' . $infos[0] . '</td><td>' . $infos[1] . '</td><td>' . '<a href = "suppression.php"> X </a>' . '</td></tr>';)
Après cette erreur, s'affiche quelques caractères provenant de la fin de mon fichier avec X + or je ne souhaiterais avoir que le + mais dans la dernière ligne du tableau.

Merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 mai 2013, 17:55

cela veux dire que ton csv n'est pas bien formé, si l'index 2 n'existe pas c'est qu'il manque une virgule sur certaines lignes.

Vérifie le fichier ou traite ce cas de façon a ce que cela n'arrive pas.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

08 mai 2013, 19:05

J'ai examiné l'erreur de plus près.
Ce qui me provoque une erreur est l'adresse mail stockée dans une ligne du fichier.txt

Fichier.txt
Dupont,Jean,Jdupont,jean,12/12/1234,13 rue des Roses,80000,Amiens,,,1
Jean-Yves,Gerer,Gjy,Aze12-,12/12/1234,12 Rue des Comères,12343,Amiens,0344044545,[email protected],1


Dans mon tableau, j'affiche le 3e champ dans la 1 ere colonne, puis le 1e dans la 2 e colonne et le 3e champ dans la 3 e colonne.
soit, j'obtiens (en tant qu'administrateur) :
Pseudo Nom Prénom X
Jdupont Dupont Jean X
Gjy Jean-Yves Gérer X
Affichage de l'erreur
otmail.fr1 X +

Comment puis-je régler ce problème ?