IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Besoin d'aide pour un script de migration de BDD


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    pour parser du csv c'est avec fgetcsv

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Par défaut
    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

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    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)

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    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.

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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) ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour petit script
    Par tibofo dans le forum VBScript
    Réponses: 2
    Dernier message: 22/07/2009, 22h37
  2. [MySQL] Besoin d'aide pour un script
    Par spespam dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/11/2008, 15h03
  3. [MySQL] besoin d'aide pour un script pour la numérotation de page
    Par rysis83 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/01/2008, 20h59
  4. Besoin d'aide pour modif script
    Par Abdias dans le forum Langage
    Réponses: 5
    Dernier message: 12/10/2006, 07h00
  5. Besoin d'aide pour un script shell
    Par lecharcutierdelinux dans le forum Linux
    Réponses: 5
    Dernier message: 20/05/2006, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo