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

PHP & Base de données Discussion :

Coder en php pour actualiser une table d'une base mysql à partir d'un fichier classeur


Sujet :

PHP & Base de données

  1. #21
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Je ne connais pas phpexcel (et pas le temps de regarder) donc je peux pas te dire dans le détail pour l'utilisation des fonctions.

    Par contre pourquoi deux fois la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Une fois suffira. Et puis tu n'es pas obligé de passer les options de la connexion une par une, tu peux créer un tableau. Par ailleurs le charset est reconnu dans la chaine de connexion depuis plusieurs années. Donc tu peux faire :

    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
    try
    {
    // Conseillé pour faire travailler le moteur pdo de la base de donnée qui est plus optimisé que l'émulateur php
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
    // mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     
    $chaine_connexion='mysql:host=localhost;dbname=cemkay;charset=utf8';
     
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', $pdo_options);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
    Ensuite tu n'as plus à redéfinir les options dans la suite du code sauf si tu veux les changer.

    Pour le reste c'est quoi ces "$data[0]", "$data[]" etc. dans les values de ta requête d'insertion ? Pour une requête préparée on utilise soit des paramètres nommés (mais alors ce n'est pas la bonne syntaxe cf doc) soit des marqueurs représentés par des points d'interrogation (?). Faudrait regarder un minimum la doc avant de coder. Et en plus je t'ai déjà donné un exemple complet

    Pour terminer il faut bien entendu que le tableau passé dans la méthode execute() représentent toutes les valeurs des cellules de la ligne en cours. J'ai un peu des doutes avec $cell = $worksheet->getCellByColumnAndRow(3, $row)->getValue(); Je ne sais pas ce que fait "getCellByColumnAndRow" mais à priori j'ai un peu des soupçons sur le "3" qui ne me fait pas penser à une syntaxe générique pour retourner toutes les cellules d'une ligne ?

    EDIT : rollbackTransaction() et commitTransaction() sont pour les sgbdd supportant les transactions comme innobd, à l'inverse des tables myIsam. Si ta table ne supporte pas les transactions suffit de ne pas les utiliser, d'ailleurs c'est facultatif pour les tables qui les supporte.

  2. #22
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Modifications apportées ... message d'erreur ... help please

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number' in C:\wamp\www\cemkay\lire_excel.php on line 40
    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
    <?php
     
    //include the following 2 files
    require 'PHPExcel/Classes/PHPExcel.php';
    require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
     
    // Connexion MYSQL
    // ---------------
    try
    {
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
    // mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $chaine_connexion='mysql:host=localhost;dbname=cemkay;charset=utf8';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', $pdo_options);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    // objPHPExcel
    $objPHPExcel = PHPExcel_IOFactory::load("liste_image.xls");
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
    {
    		$worksheetTitle     = $worksheet->getTitle();
    		$highestRow         = $worksheet->getHighestRow();
    		$highestColumn      = $worksheet->getHighestColumn();
    		$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    		$nrColumns = ord($highestColumn) - 64;
    }
     
    // requete prepare
    $stmt = $connexion_bdd->prepare('INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES (?,?,?,?,?)');
    // insertion de chaque ligne each row
    for ($row=2; $row<=$highestRow; $row++)
    	{
    		$cell = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
    		$stmt->execute(array($cell));
    	}

  3. #23
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu n'as mis qu'une seule valeur dans ton execute alors tu as 5 colonnes dans ta requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #24
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    like that? pas de message d'erreur et la table est toujours vide sous mysql ...

    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
    <?php
     
    //include the following 2 files
    require 'PHPExcel/Classes/PHPExcel.php';
    require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
     
    // Connexion MYSQL
    // ---------------
    try
    {
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
    // mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $chaine_connexion='mysql:host=localhost;dbname=cemkay;charset=utf8';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', $pdo_options);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    // objPHPExcel
    $objPHPExcel = PHPExcel_IOFactory::load("liste_image.xls");
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
    {
    		$worksheetTitle     = $worksheet->getTitle();
    		$highestRow         = $worksheet->getHighestRow();
    		$highestColumn      = $worksheet->getHighestColumn();
    		$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    		$nrColumns = ord($highestColumn) - 64;
    }
     
    // requete prepare
    $stmt = $connexion_bdd->prepare('INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES (?,?,?,?,?)');
    // insertion de chaque ligne each row
    for ($row=2; $row<=$highestRow; $row++)
    	{
    		$cell = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
    		for ($i=1; $i<=$highestColumn; $i++)
    		{
    			$stmt->execute(array($cell[$i]));
    		}
    	}

  5. #25
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n'y a toujours qu'une seule valeur dans ton execute.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #26
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Sabotage j'avoue que j ai du mal avec les requêtes et phpExcel

    Peux tu me venir en aide et corriger mon code s il te plait?

    Cordialement

  7. #27
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Enfin la ce n'est ni un problème PHPExcel ni un problème PDO, c'est du pur PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for ($row=2; $row<=$highestRow; $row++)
    	{
    		for ($c=1; $c<=$highestColumn; $c++)
    		{
                        $values[$c] = $worksheet->getCellByColumnAndRow($c, $row)->getValue();
    		}
              $stmt->execute($values);
    	}
    Attention avec les valeurs "highest" dans PHPExcel, les colonnes ou les lignes sans données sont prises en compte quand il y a, par exemple, des mises en forme etc.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #28
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    $val=array();

    Merci à tous ça marche pour un fichier .xls ...

    Mais pourquoi ça ne fonctionne pas avec un fichier .ods?

    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
     
    //include the following 2 files
    require 'PHPExcel/Classes/PHPExcel.php';
    require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
     
    // Connexion MYSQL
    // ---------------
    try
    {
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
    // mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $chaine_connexion='mysql:host=localhost;dbname=cemkay;charset=utf8';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', $pdo_options);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    // objPHPExcel
    $objPHPExcel = PHPExcel_IOFactory::load("liste_image.ods");
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
    {
    		$worksheetTitle     = $worksheet->getTitle();
    		$highestRow         = $worksheet->getHighestRow();
    		$highestColumn      = $worksheet->getHighestColumn();
    		$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    		$nrColumns = ord($highestColumn) - 64;
    }
     
    // requete prepare
    $stmt = $connexion_bdd->prepare('INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES (?,?,?,?,?)');
    // insertion de chaque ligne each row
    for ($row=2; $row<=$highestRow; $row++)
    	{
    		$val=array();
    		for ($col = 0; $col < $highestColumnIndex; ++ $col)
    		{
                        $cell = $worksheet->getCellByColumnAndRow($col, $row);
    					$val[$col] = $cell->getValue();		// remarque: $val[$col] <=> $val[]
     
    		}
              $stmt->execute($val);
    	}

  9. #29
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux être plus précis que "ça ne marche pas" et nous dire les résultats des debugages que tu as déjà fait ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #30
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Aucun message d'erreur ... et la table sous mysql n'est pas modifiée (vide)

  11. #31
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    et les résultats des debugages ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #32
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    tu veux dire dans Firefox->outils->développement web->débogueur?

    aucune alerte

  13. #33
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non je veux dire les contrôles que tu as fais toi même pour trouver d'ou peut venir le problème.
    Par exemple simplement afficher les données lues dans le fichier .ods pour contrôler si cette partie fonctionne bien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #34
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Oui l'affichage du tableau à partir du fichier ods à la racine du site fonctionne

    Par contre les données ne sont toujours pas importées dans la table mysql

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
    // importer le fichier ods dans une table mysql
    // --------------------------------------------
     
    //include the following 2 files
    require 'PHPExcel/Classes/PHPExcel.php';
    require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
     
    // Connexion MYSQL
    try
    {
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
    // mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $chaine_connexion='mysql:host=localhost;dbname=cemkay;charset=utf8';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', $pdo_options);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    // objPHPExcel
    $objPHPExcel = PHPExcel_IOFactory::load("liste_image.ods");
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
    {
    		$worksheetTitle     = $worksheet->getTitle();
    		$highestRow         = $worksheet->getHighestRow();
    		$highestColumn      = $worksheet->getHighestColumn();
    		$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    		$nrColumns = ord($highestColumn) - 64;
    }
     
    // requete prepare
    $stmt = $connexion_bdd->prepare('INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES (?,?,?,?,?)');
    // insertion de chaque ligne each row
    for ($row=2; $row<=$highestRow; $row++)
    	{
    		$val=array();
    		for ($col = 0; $col < $highestColumnIndex; ++ $col)
    		{
                        $cell = $worksheet->getCellByColumnAndRow($col, $row);
    					$val[$col] = $cell->getValue();		// remarque: $val[$col] <=> $val[]
     
    		}
              $stmt->execute($val);
    	}
     
    // afficher le tableau depuis le fichier ods
    // -----------------------------------------
    $sheet = $objPHPExcel->getSheet(0);
     
    echo '<table border="1">';
     
    // On boucle sur les lignes
    foreach($sheet->getRowIterator() as $row) {
     
       echo '<tr>';
     
       // On boucle sur les cellule de la ligne
       foreach ($row->getCellIterator() as $cell) {
          echo '<td>';
          print_r($cell->getValue());
          echo '</td>';
       }
     
       echo '</tr>';
    }
    echo '</table>';

  15. #35
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Je comprends pas pourtant sur GitHub ils mettent bien

    PHPExcel is a library written in pure PHP and providing a set of classes that allow you to write to and read from different spreadsheet file formats, like Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML, ... This project is built around Microsoft's OpenXML standard and PHP.
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    <?php
    // importer le fichier ods dans une table mysql
    // --------------------------------------------
     
    //include the following 2 files
    require 'PHPExcel/Classes/PHPExcel.php';
    require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
     
    // Connexion MYSQL
    try
    {
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
    // mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $chaine_connexion='mysql:host=localhost;dbname=cemkay;charset=utf8';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', $pdo_options);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    // objPHPExcel
    $objPHPExcel = PHPExcel_IOFactory::load("liste_image.ods");
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
    {
    		$worksheetTitle     = $worksheet->getTitle();
    		$highestRow         = $worksheet->getHighestRow();
    		$highestColumn      = $worksheet->getHighestColumn();
    		$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    		$nrColumns = ord($highestColumn) - 64;
    }
     
    // requete prepare
    $stmt = $connexion_bdd->prepare('INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES (?,?,?,?,?)');
    // insertion de chaque ligne each row
    for ($row=2; $row<=$highestRow; $row++)
    	{
    		$val=array();
    		for ($col = 0; $col < $highestColumnIndex; ++ $col)
    		{
                        $cell = $worksheet->getCellByColumnAndRow($col, $row);
    					$val[$col] = $cell->getValue();		// remarque: $val[$col] <=> $val[]
     
    		}
              $stmt->execute($val);
    	}
     
    // afficher le tableau depuis le fichier ods
    // -----------------------------------------
    $sheet = $objPHPExcel->getSheet(0);
     
    echo '<table border="1">';
     
    // On boucle sur les lignes
    foreach($sheet->getRowIterator() as $row) {
     
       echo '<tr>';
     
       // On boucle sur les cellule de la ligne
       foreach ($row->getCellIterator() as $cell) {
          echo '<td>';
          print_r($cell->getValue());
          echo '</td>';
       }
     
       echo '</tr>';
    }
    echo '</table>';
     
    // afficher les variables du script
    // --------------------------------
    echo '$worksheetTitle:' . $worksheetTitle . '<br>';
    echo '$highestRow:' . $highestRow . '<br>';
    echo '$highestColumn:' . $highestColumn . '<br>';
    echo '$highestColumnIndex:' . $highestColumnIndex . '<br>';
    echo '$nrColumns:' . $nrColumns . '<br>';
    Toujours pas d'implémentation de la table mysql

    Le tableau et les variables phpExcel s'affichent pourtant

    affichage écran:
    id_photo affichage disponibilite taille_type type
    1 oui oui granddessin dessin
    2 oui oui petitdessin dessin
    3 oui oui granddessin dessin
    4 oui oui petitdessin dessin
    5 oui non granddessin dessin
    6 oui non petitdessin dessin
    7 non oui granddessin dessin
    8 non oui petitdessin dessin
    9 oui oui granddessin dessin
    10 oui oui petitdessin dessin
    11 oui oui granddessin dessin
    12 oui oui petitdessin dessin
    13 oui non granddessin dessin
    14 oui non petitdessin dessin
    15 non oui granddessin dessin

    $worksheetTitle:Worksheet 1
    $highestRow:1
    $highestColumn:A
    $highestColumnIndex:1
    $nrColumns:1

  16. #36
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux contrôler precisement ce qui se passe dans l'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $insertion = $stmt->execute($val);
    echo 'insertion de <pre>';
    print_r($val);
    echo '</pre><br/>Résultat : ';
    var_dump($insertion);
    echo '<br/>';
    concernant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // remarque: $val[$col] <=> $val[]
    ce n'est pas vrai : si tu utilisais [], ton tableau augmenterai au fur et à mesure des boucles, il faudrait le réinitialiser à chaque tour de boucle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #37
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci Sabotage

    Même résultat: pas d'affichage supplémentaire

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <?php
    // importer le fichier ods dans une table mysql
    // --------------------------------------------
     
    //include the following 2 files
    require 'PHPExcel/Classes/PHPExcel.php';
    require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
     
    // Connexion MYSQL
    try
    {
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
    // mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $chaine_connexion='mysql:host=localhost;dbname=cemkay;charset=utf8';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', $pdo_options);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    // objPHPExcel
    $objPHPExcel = PHPExcel_IOFactory::load("liste_image.ods");
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
    {
    		$worksheetTitle     = $worksheet->getTitle();
    		$highestRow         = $worksheet->getHighestRow();
    		$highestColumn      = $worksheet->getHighestColumn();
    		$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    		$nrColumns = ord($highestColumn) - 64;
    }
     
    // requete prepare
    $stmt = $connexion_bdd->prepare('INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES (?,?,?,?,?)');
    // insertion de chaque ligne each row
    for ($row=2; $row<=$highestRow; $row++)
    	{
    		$val=array();
    		for ($col = 0; $col < $highestColumnIndex; ++ $col)
    		{
                        $cell = $worksheet->getCellByColumnAndRow($col, $row);
    					$val[$col] = $cell->getValue();
    		}
              $stmt->execute($val);
     
    		// contrôler precisement ce qui se passe dans l'insertion
    		$insertion = $stmt->execute($val);
    		echo 'insertion de <pre>';
    		print_r($val);
    		echo '</pre><br/>Résultat : ';
    		var_dump($insertion);
    		echo '<br/>';
    	}
     
     
     
    // afficher le tableau depuis le fichier ods
    // -----------------------------------------
    $sheet = $objPHPExcel->getSheet(0);
     
    echo '<table border="1">';
     
    // On boucle sur les lignes
    foreach($sheet->getRowIterator() as $row) {
     
       echo '<tr>';
     
       // On boucle sur les cellule de la ligne
       foreach ($row->getCellIterator() as $cell) {
          echo '<td>';
          print_r($cell->getValue());
          echo '</td>';
       }
     
       echo '</tr>';
    }
    echo '</table>';
     
    // afficher les variables du script
    // --------------------------------
    echo '$worksheetTitle:' . $worksheetTitle . '<br>';
    echo '$highestRow:' . $highestRow . '<br>';
    echo '$highestColumn:' . $highestColumn . '<br>';
    echo '$highestColumnIndex:' . $highestColumnIndex . '<br>';
    echo '$nrColumns:' . $nrColumns . '<br>';

  18. #38
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu devrais vérifier ce que valent $highestRow et $highestColumnIndex
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #39
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    effectivement ils sont à la valeur initiale .. c'est bizarre
    $highestRow=1 ... au lieu de 5 (5champs)
    $highestColumnIndex:1 ... au lieu de 15 (15 enregistrements)

    id_photo affichage disponibilite taille_type type
    1 oui oui granddessin dessin
    2 oui oui petitdessin dessin
    3 oui oui granddessin dessin
    4 oui oui petitdessin dessin
    5 oui non granddessin dessin
    6 oui non petitdessin dessin
    7 non oui granddessin dessin
    8 non oui petitdessin dessin
    9 oui oui granddessin dessin
    10 oui oui petitdessin dessin
    11 oui oui granddessin dessin
    12 oui oui petitdessin dessin
    13 oui non granddessin dessin
    14 oui non petitdessin dessin
    15 non oui granddessin dessin
    $worksheetTitle:Worksheet 1
    $highestRow:1
    $highestColumn:A
    $highestColumnIndex:1
    $nrColumns:1

  20. #40
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu n'as qu'une seule feuille de données il ne faut pas faire une boucle sur toutes les feuilles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $objPHPExcel = PHPExcel_IOFactory::load("liste_image.ods");
    $worksheet = $objPHPExcel->setActiveSheetIndex(0);
    $worksheetTitle     = $worksheet->getTitle();
    .....
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 13h58
  2. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 11h17
  3. Réponses: 1
    Dernier message: 19/10/2011, 13h13
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 15h29
  5. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 22h50

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