Insertion données csv dans un tableau

Eléphanteau du PHP | 44 Messages

14 nov. 2017, 12:51

Bonjour à tous,
Je viens auprès de vous car j'ai un souci.
En effet j'essaie de mettre les informations qui se trouvent dans un csv dans un tableau avant de faire leur insertion en bdd.
Voici mon code:

Code : Tout sélectionner

<?php $nb_fichier = 0; $dossier = ""; $ok=0; echo '<ul>'; //Scan du dossier csv if($dossier = opendir('./csv')) { while(false !== ($fichier = readdir($dossier))) { // le count inclut toujours le dossier actuel et le dossier parent d'où ce test avec le . et le .. if($fichier != '.' && $fichier != '..') { $nb_fichier++; echo '<li><a href="./csv/' . $fichier . '">' . $fichier . '</a></li>'; } } echo '</ul><br />'; $ok=1; closedir($dossier); } else { echo 'Le dossier n\' a pas pu être ouvert'; } ?> </main> <?php if($ok==1) { echo "<div id=\"rslt\">"; if($nb_fichier<0) echo 'Il n\'y a aucun fichier dans le dossier'; else echo 'Il y a <strong>&nbsp;' . $nb_fichier . '&nbsp;</strong> fichier(s) dans le dossier'; //Connection des fichiers en base include 'connectBDD.php'; connectBdd(); $fichier = $fichier.".csv"; $fic = fopen($fichier,'rb'); echo "<table border='1'>\n"; for($ligne = fgetcsv($fic, 1024);!feof($fic);$ligne = fgetcsv($fic, 1024)) { echo "<tr>"; $j = sizeof($ligne); for($i = 0; $i < $j; $i++) { echo "<td>$ligne[$i]</td>"; } echo "</tr>"; } echo "</table>\n"; echo "</div>"; } ?>
Et voici l'erreur que j'ai en boucle:
Warning: feof() expects parameter 1 to be resource, boolean given in C:\wamp64\www\Gestion_Compteur_Eau\view.php on line 58
Call Stack
# Time Memory Function Location
1 0.0010 232840 {main}( ) ...\index.php:0
2 0.0020 245280 require( 'C:\wamp64\www\Gestion_Compteur_Eau\view.php' ) ...\index.php:2
3 0.5211 254904 feof ( ) ...\view.php:58
Sauriez-vous me dire ce qui n'est pas bon?
J'ai suivi un tutoriel que j'ai trouvé sur internet mais chez moi cela ne fonctionne pas.
Merci beaucoup par avance pour le temps que vous me consacrerez.

Eléphanteau du PHP | 44 Messages

14 nov. 2017, 12:52

La ligne 58 de view.php correspond à celle ci:
for($ligne = fgetcsv($fic, 1024);!feof($fic);$ligne = fgetcsv($fic, 1024))

Mammouth du PHP | 872 Messages

14 nov. 2017, 13:13


Eléphanteau du PHP | 44 Messages

14 nov. 2017, 14:45

J'ai bien suivi l'exemple mais je dois avoir une petite erreur quelque part.
Voici mon code:

Code : Tout sélectionner

<!doctype html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Gestion compteur d'eau</title> <link rel="stylesheet" href="style.css"> </head> <body> <h1>Gestion des compteurs d'eau</h1> <main> <?php $nb_fichier = 0; $dossier = ""; $ok=0; echo '<ul>'; //Scan du dossier csv if($dossier = opendir('./csv')) { while(false !== ($fichier = readdir($dossier))) { // le count inclut toujours le dossier actuel et le dossier parent d'où ce test avec le . et le .. if($fichier != '.' && $fichier != '..') { $nb_fichier++; echo '<li><a href="./csv/' . $fichier . '">' . $fichier . '</a></li>'; } } echo '</ul><br />'; $ok=1; closedir($dossier); } else { echo 'Le dossier n\' a pas pu être ouvert'; } ?> </main> <?php if($ok==1) { echo "<div id=\"rslt\">"; if($nb_fichier<0) { echo 'Il n\'y a aucun fichier dans le dossier'; } else { echo 'Il y a <strong>&nbsp;' . $nb_fichier . '&nbsp;</strong> fichier(s) dans le dossier'; //Connection des fichiers en base include 'connectBDD.php'; connectBdd(); ?> <?php $row = 1; if($dossier = opendir('./csv')) { while(false !== ($fichier = readdir($dossier))) { if (($handle = fopen($fichier, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); echo "<p> $num champs à la ligne $row: <br /></p>\n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "<br />\n"; } } fclose($handle); } } } } echo "</div>"; } ?> </body> </html>
L'erreur retournée est :
Warning: fopen(.): failed to open stream: Permission denied in C:\wamp64\www\Gestion_Compteur_Eau\view.php on line 63
Call Stack
# Time Memory Function Location
1 0.0000 232840 {main}( ) ...\index.php:0
2 0.0000 246424 require( 'C:\wamp64\www\Gestion_Compteur_Eau\view.php' ) ...\index.php:2
3 0.0140 255432 fopen ( ) ...\view.php:63
Je ne vois pas d'où vient cette erreur de permission.

Eléphanteau du PHP | 44 Messages

14 nov. 2017, 14:46

Petite question qui n'a rien à voir mais est ce normal que l'indentation ne se fasse pas lorsque j'insère du code sur le forum ou est ce que je fais quelque chose pas correctement mdr?

Eléphanteau du PHP | 44 Messages

14 nov. 2017, 14:51

Le problème vient de la récupération de la variable fichier!
Lorsque je met le chemin en dur dans le code, il arrive bien à me récupérer ce qu'il y a dedans.

Mammouth du PHP | 872 Messages

14 nov. 2017, 17:17

normal les fichiers sont dans le répertoire ./csv, pas dans le même répertoire que le php.