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

  1. #1
    Futur 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
    Points : 5
    Points
    5
    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 éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    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.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    pour parser du csv c'est avec fgetcsv

  4. #4
    Futur 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
    Points : 5
    Points
    5
    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 éminent sénior

    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
    Points : 10 726
    Points
    10 726
    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 éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    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) ;
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    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.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    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

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

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

  10. #10
    Futur 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
    Points : 5
    Points
    5
    Par défaut
    Merci pour tout, c'est clair que j'ai de quoi me faire la main .

  11. #11
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

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

  12. #12
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    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...

  13. #13
    Futur 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
    Points : 5
    Points
    5
    Par défaut
    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 .

+ 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