Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/05/2011, 16h56   #1
Invité de passage
 
Homme Florient
Étudiant
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Florient
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 2
Points : 2
Par défaut Besoin d'aide pour un script de migration de BDD

Bonjour à tous .
Alors voilà, fortement intéressé par le php et le dev Web, je m'entraîne un peu sur divers scripts !
Et en voilà un où j'ai un soucis que je n'arrive pas à comprendre:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
 
	function displayCSV() {
 
		$fichier = "files/uploadedDoc.csv";
		if (file_exists($fichier)) {
		 $fp = fopen("$fichier", "r");
		}
		else { /* le fichier n'existe pas */
		   echo "Fichier introuvable !<br/>Arret de l'importation.";
		   exit();
		}
		$row = 0;
		while (!feof($fp)){ 
 
			$ligne = fgets($fp,4096); 
 
 
			$liste = explode( ";",$ligne);
			$nbrColonnes = count($liste);
			$tableauTitre = array($nbrColonnes);
			$tableauVariables = array($nbrColonnes);
			$row++;
			if($row == 1) {
				echo "---------------------------------------------<br/>
					Affichage des titres de colonnes: <br/>
					---------------------------------------------<br/><br/>";
				for($i = 0; $i < $nbrColonnes; $i++) {
 
					$tableauTitre[$i] = $liste[$i];
					echo $tableauTitre[$i]."<br/>";
 
				}
				echo "<br/>
					---------------------------------------------<br/>";
				echo "Importation des variables par titre: <br/>
				---------------------------------------------<br/><br/>";
			}
			else {
				$row2 = $row - 1;
				echo $row2."eme Ligne: <br/>";
				for($j = 0; $j < $nbrColonnes; $j++) {
 
					$tableauVariables[$j] = $liste[$j];
					echo $tableauTitre[$j]." = ".$tableauVariables[$j]."<br/>";
 
				}
			}
 
		}
	}
?>
Je n'arrive pas à comprendre l'erreur:
Elle se situe dans la seconde boucle "for".
Notice: Undefined offset: 1 in C:\xxx\displayCSV.php on line 45

Et cette erreur est répétitive pour chacune des colonnes de mon fichier csv ...


Merci d'avance à ceux qui trouveront une réponse à mon problème
Argetloum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 17h20   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Code :
1
2
$tableauTitre = array($nbrColonnes);
$tableauVariables = array($nbrColonnes);
Ici tu ne dis pas que $tableauTitre/Variables pourront contenir $nbrColonnes valeurs, tu ne fais que les initialiser avec 1 entier valant $nbrColonnes (ce qui ne sert à rien et n'a aucun sens dans ton script).

Le pb vient du fait que $tableauTitre est réinitialisé à chaque boucle du while( ), tu perds son contenu après le 1er tour, d'où les "undefined index" s'ensuivant.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 17h25   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pour parser du csv c'est avec fgetcsv
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 17h38   #4
Invité de passage
 
Homme Florient
Étudiant
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Florient
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 2
Points : 2
Oups, je viens de corriger ^^.
Erreur bête !
Et oui, j'avais déjà vu pour fgetcsv, mais comme j'étais déjà parti avec un simple fopen, pourquoi ne pas continuer ? ^^

Merci pour tout en tout cas
Argetloum est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/05/2011, 17h50   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Argetloum Voir le message
Oups, je viens de corriger ^^.
Erreur bête !
Et oui, j'avais déjà vu pour fgetcsv, mais comme j'étais déjà parti avec un simple fopen, pourquoi ne pas continuer ? ^^

Merci pour tout en tout cas
fgetcsv s'utilise avec fopen, c'est le fgets + explose qui n'est pas bon (enfin pas fait pour)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 17h50   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Vu que tu découvres PHP je me permets de te coller le script tel que je l'aurais écrit
Ce qui est intéressant pour toi est notamment le foreach au lieu du for, le implode( ) qui peut remplacer parfois avantageusement les for/foreach, délimiter les chaînes avec des ' plutôt que des " quand elle ne contiennent pas de variables (évite un parsing inutile), la syntaxe heredoc (<<<) qui permet de créer assez facilement une variable avec un bloc de texte conséquent.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
 
function displayCSV($file)
{
    $fp = fopen($file, 'r') ;
 
    if ( $fp === FALSE ) {
        return FALSE ;
    }
 
    $row = 0 ;
    while ( ! feof($fp) ) {
 
        $line = fgets($fp) ;
        $values = explode(';', $line) ;
 
        if ( $row === 0 ) {
            $headers = $values ;
            echo '-------------------<br>' ;
            echo 'TITRES<br>' ;
            echo '-------------------<br><br>' ;
            echo implode('<br>', $headers), '<br><br>' ;
            echo '-------------------<br>' ;
            echo 'VALEURS<br>' ;
            echo '-------------------<br><br>' ;
        } else {
            echo "Ligne n° $row :<br>" ;
            foreach ( $values as $i => $value ) {
                echo "- $headers[$i] = $value<br>" ;
            }
            echo '<br>' ;
        }
 
        $row++ ;
    }
 
    fclose($fp) ;
 
    return TRUE ;
}
 
$data = <<<EOS
Pays;Capitale;Population;Continent
Italie;Rome;61M;Europe
Japon;Tokyo;125M;Asie
France;Paris;65M;Europe
USA;Washington;310M;Amérique
EOS;
 
$file = 'data.csv' ;
file_put_contents($file, $data) ;
displayCSV($file) ;
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 17h51   #7
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Citation:
Envoyé par stealth35 Voir le message
fgetcsv s'utilise avec fopen, c'est le fgets + explose qui n'est pas bon (enfin pas fait pour)
Pas fait pour, t'y vas fort C'est juste qu'il y a plus simple et plus efficace.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 17h54   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Séb. Voir le message
Pas fait pour, t'y vas fort C'est juste qu'il y a plus simple et plus efficace.
non c'est pas fait pour, explode ne gère ni l'enclosure, ni échappement
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 18h30   #9
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Citation:
Envoyé par stealth35 Voir le message
non c'est pas fait pour, explode ne gère ni l'enclosure, ni échappement
Hum t'as pas compris que Argetloum veut se faire la main sur PHP ?
Ne te rappelles-tu pas de tes premiers cours de dév/algo ? Tu sais ceux où les seules fontions de manipulations de chaînes autorisées étaient strlen( ), substr( ) et dans les bons jour du prof strpos( ) ?
Ben là c'est pareil, peu importe que explode convienne à 100% ou pas ce n'est pas le but du *jeu*.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 18h35   #10
Invité de passage
 
Homme Florient
Étudiant
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Florient
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 2
Points : 2
Merci pour tout, c'est clair que j'ai de quoi me faire la main .
Argetloum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 18h38   #11
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Citation:
Envoyé par Argetloum Voir le message
Merci pour tout, c'est clair que j'ai de quoi me faire la main .
Heureusement PHP a une excellente doc : http://fr.php.net/manual/fr/langref.php
Au début t'auras surtout besoin de ça http://fr.php.net/manual/fr/language.types.string.php et de ça http://fr.php.net/manual/fr/language.types.array.php
Puis ceci http://fr.php.net/oop5 si tu comptes développement en Orienté Objet.
A+
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 18h40   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Séb. Voir le message
Hum t'as pas compris que Argetloum veut se faire la main sur PHP ?
Ne te rappelles-tu pas de tes premiers cours de dév/algo ? Tu sais ceux où les seules fontions de manipulations de chaînes autorisées étaient strlen( ), substr( ) et dans les bons jour du prof strpos( ) ?
Ben là c'est pareil, peu importe que explode convienne à 100% ou pas ce n'est pas le but du *jeu*.
Y'a rien de mal a faire une piqure de rappelle sur une fonctionnalité qui existe depuis 11 ans. Vu qu'il découvre PHP autant partir sur de bonne base je ne vois pas non plus le mal à prôner ça...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 19h44   #13
Invité de passage
 
Homme Florient
Étudiant
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Florient
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 2
Points : 2
Hé ho hé, je ne découvre pas non plus xD, mais je suis quand même un débutant là dedans, étant donné les nombreuses fonctionnalités .
Enfin merci pour tous les tuyaux, il est certain que je souhaite apprendre l'objet, et donc php5 du mieux possible, donc ce me sera utile !
J'ai aussi fait l'acquisition du livre PHP5 Avancé, 5ème édition, très pratique .
Argetloum est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h11.


 
 
 
 
Partenaires

Hébergement Web