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 :

Faire un tableau dynamique


Sujet :

Langage PHP

  1. #21
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    ouvrir le fichier csv
    lire la premiere ligne
    mettre le contenu de chaque colonne(les titres) dans un tableau
    comparer les contenus des titres avec les champs des tables (par concaténation ou autre)
    si table est trouvé on continue
    lire une ligne du csv
    extraire les données de chaque colonnes et les mettres dans un tableau
    si les données sont correctes
    créer une requete en parcourant le tableau des titres(nom de champs) et le tableau des données
    executer la requête

    ligne suivante jusqu'a la fin du fichier
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  2. #22
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    un exemple de code (à la va vite), il génére un insert mais le principe est le même :
    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
    <?php
    $tab_titre=null;
    $str_champs="";
    $row = 1;
    $fichierCsv="test_import_csv.csv";
    //$fichierCsv="test_import2_csv.csv"; /*decommenter pour le second fichier*/
    if (($handle = fopen($fichierCsv, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $tab_data=null;
            $num = count($data);
            if( $row==1)
            {
                $numColonne=$num;
            }
            if($num==$numColonne)
            {
                for ($c=0; $c < $num; $c++) {
                    if( $row==1)
                    {
                        $tab_titre[]=$data[$c];
                    }else{
                        $tab_data[]=$data[$c];
                    }
                }
    //            echo "<pre>";
    //            print_r($tab_titre);
    //            print_r($tab_data);
    //            echo "<hr>";
                if($tab_data!=null)
                {
                    $sql="insert into ma_table (%s) VALUES (%s);";
                    $sql_champs="";
                    $sql_values="";
                    for ($c=0; $c < $numColonne; $c++) {
                        $sql_champs.="`".$tab_titre[$c]."`,";
                        $sql_values.="'".$tab_data[$c]."',";
                    }
                        $sql_champs.="|";
                        $sql_values.="|";
     
                        $sql_champs=str_replace(",|","",$sql_champs);
                        $sql_values=str_replace(",|","",$sql_values);
     
    //                echo $sql_champs."\n";
    //                echo $sql_values."\n";
                    echo sprintf($sql,$sql_champs,$sql_values)."<br/>";
    //                echo "<hr>";
    //                echo "</pre>";
                }
            }else{
                echo "nombre de data incorrect dans la ligne [".$row."]<br/>";
            }
            $row++;
        }
        fclose($handle);
    }
    ?>
    contenu de test_import_csv.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "champ_id","champ_texte","champ_int","champ_datetime"
    "1","texte_record_1","100","2012-08-07 17:48:10"
    "2","texte_record_2","200","2012-08-07 17:48:27"
    "3","texte_record_3","300"
    "4","texte_record_4","400","2012-08-07 17:58:27"
    resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into ma_table (`champ_id`,`champ_texte`,`champ_int`,`champ_datetime`) VALUES ('1','texte_record_1','100','2012-08-07 17:48:10');
    insert into ma_table (`champ_id`,`champ_texte`,`champ_int`,`champ_datetime`) VALUES ('2','texte_record_2','200','2012-08-07 17:48:27');
    nombre de data incorrect dans la ligne [4]
    insert into ma_table (`champ_id`,`champ_texte`,`champ_int`,`champ_datetime`) VALUES ('4','texte_record_4','400','2012-08-07 17:58:27');
    contenu de test_import2_csv.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "champ_id","champ_texte","champ_int","champ_datetime","champ_supplementaire"
    "1","texte_record_1","100","2012-08-07 17:48:10","blabla1"
    "2","texte_record_2","200","2012-08-07 17:48:27","blabla2"
    "3","texte_record_3","300","2012-08-07 17:49:27","blabla3"
    "4","texte_record_4","400","2012-08-07 17:58:27","blabla4"
    resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into ma_table (`champ_id`,`champ_texte`,`champ_int`,`champ_datetime`,`champ_supplementaire`) VALUES ('1','texte_record_1','100','2012-08-07 17:48:10','blabla1');
    insert into ma_table (`champ_id`,`champ_texte`,`champ_int`,`champ_datetime`,`champ_supplementaire`) VALUES ('2','texte_record_2','200','2012-08-07 17:48:27','blabla2');
    insert into ma_table (`champ_id`,`champ_texte`,`champ_int`,`champ_datetime`,`champ_supplementaire`) VALUES ('3','texte_record_3','300','2012-08-07 17:49:27','blabla3');
    insert into ma_table (`champ_id`,`champ_texte`,`champ_int`,`champ_datetime`,`champ_supplementaire`) VALUES ('4','texte_record_4','400','2012-08-07 17:58:27','blabla4');
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  3. #23
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    désolée de ne pas avoir répondu plutôt, mais je n'étais pas au boulot!!
    merci beaucoup pour ce code qui marche presque!!
    j'ai pris exactement ton code j'ai changé le fichier et le nom de la table, l'affichage me donne bien pour tous les enregistrements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into TICKET3 (NUMTICKET,DATEHEURETIC,MONTANT,TYPEACHAT) VALUES ('6','19/08/2012 15:38','98','Diner avec les orques pour 1 pers');
    mais c'est bien beau d'afficher la requête, encore faut-il l'executer, ce que j'ai fais comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    echo sprintf($sql,$sql_champs,$sql_values)."<br/>";
    	$resultat = sprintf($sql,$sql_champs,$sql_values);
    	$resultat2 = $db->exec($resultat);
    	if (MDB2::isError($resultat2)) 
    	{  	 echo $resultat2->getDebugInfo().'<BR/>';
    		 echo $resultat2->getMessage();
    	}
    	else
    	{	echo"requete ok!!!"; }
    a ce moment là, il m'affiche toujours correctement la requête mais il me met un message d'erreur pour l’exécution de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _doQuery: [Error message: Could not execute statement] [Last executed query: insert into TICKET3 (NUMTICKET,DATEHEURETIC,MONTANT,TYPEACHAT) VALUES ('6','19/08/2012 15:38','98','Diner avec les orques pour 1 pers');] [Native code: 911] [Native message: ORA-00911: invalid character]
    du coup, je ne sais pas où est le problème...

  4. #24
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    tu travaille sur qu'elle DB , peut être que tu doit mettre des " à la place des '
    vérifie aussi si la date peut etre introduite sous le format "JJ/MM/AAAA HH:MM"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... VALUES ("6","19/08/2012 15:38","98","Diner avec les orques pour 1 pers");
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  5. #25
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    finalement j'ai trouvé, il fallait enlever le ; à la fin de la requête!!! pff!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="insert into ".$NOMTABLE." (%s) VALUES (%s)";
    et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="insert into ".$NOMTABLE." (%s) VALUES (%s);";
    et voilà mon insert fonction,maintenant il ne me reste plus qu'à le remplacer par un merge...

  6. #26
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    j'en suis heureux pour toi, n'oublie pas de mettre "résolu"
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  7. #27
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Points : 248
    Points
    248
    Par défaut
    insert into TICKET3 (NUMTICKET,DATEHEURETIC,MONTANT,TYPEACHAT) VALUES ('6','19/08/2012 15:38','98','Diner avec les orques pour 1 pers');
    Tu travaille chez Marineland ?

  8. #28
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par patrickbaras Voir le message
    j'en suis heureux pour toi, n'oublie pas de mettre "résolu"
    moi aussi!!!
    mais en fait c'est pas totalement résolu!! j'ai un insert qui fonctionne mais il me faut un merge...des que j'ai réussi a le faire, je mettrais le code et je marquerait ce poste comme étant résolu ... ou je ferais encore une fois appel à vos services en cas de souci!!!

  9. #29
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    est ce que tu pourrais m'expliquer cette partie la du code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if($row == 1) //si c'est la 1ere ligne
    	{
    		$numColonne=$num;
    	}
    	if($num==$numColonne)
    	{  suite du code....

  10. #30
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    en fait "num...." n'est pas un bon choix pour le nom de la variable "nombre" ou "Nbr" serait plus judicieux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            $num = count($data); //on compte le nombre de colonnes de la ligne
            if( $row==1) // si c'est la première ligne
            {
                $numColonne=$num; //on enregistre ce nombre de manière "général" dans une autre variable
            }
            if($num==$numColonne) // le nombre de colonnes de la ligne (en cours est égale au nombre de colonne général (on poursuit le traitement)
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  11. #31
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par djibxav Voir le message
    Tu travaille chez Marineland ?
    mdr!!!
    merci pour ce fou rire!! je n'avais pas réalisé que ça pouvait porté à confusion!!!! en fait TICKET est une table fictive de gestion de ticket où j'y ais mit ce que je voulais faire ou acheter... du coup,j'ai aussi des trucs comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into TICKET3 (NUMTICKET,DATEHEURETIC,MONTANT,TYPEACHAT) VALUES ('26','19/08/2012 15:38','35','Mario bross Wii')
    mais merci pour ce bon fou rire!!!

  12. #32
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    je savais bien qu'il fallait pas tout de suite mettre que c'était résolu!! un petit souci!! j'ai essayé de faire un merge avec ce code là:
    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
    $sql="MERGE INTO ".$NOMTABLE."  USING dual ON (".$CLEPRIMAIRE." = '".$tab_data[0]."')WHEN MATCHED THEN UPDATE SET %s WHEN NOT MATCHED THEN INSERT (%s) VALUES (%s) ";
     
    	$sql_champsInsert="";
    	$sql_valuesInsert="";
     
    	for ($c=0; $c < $numColonne; $c++) 
    	{
    		$sql_champsInsert.="".$tab_titre[$c].","; 
    		$sql_valuesInsert.="'".$tab_data[$c]."',";
    	       $sql_champsUpdate.="".$tab_titre[$c]."='".$tab_data[$c]."',"; 	
    	}
     
            $sql_champsInsert.="|";
    	$sql_valuesInsert.="|";
    	$sql_champsUpdate.="|";
     
    	$sql_champsInsert=str_replace(",|","",$sql_champsInsert);
    	$sql_valuesInsert=str_replace(",|","",$sql_valuesInsert);
    	$sql_champsUpdate=str_replace(",|","",$sql_champsUpdate);
     
    	echo sprintf($sql,$sql_champsUpdate,$sql_champsInsert,$sql_valuesInsert)."<br/>";
    pour le insert ça marche super bien, mais pour le update, il me garde en fil des enregistrements les lignes déjà traitées... ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MERGE INTO TICKET3 USING dual ON (NUMTICKET = '12')WHEN MATCHED THEN UPDATE SET NUMTICKET='6',DATEHEURETIC='19/08/2012 15:38',MONTANT='98',TYPEACHAT='Diner avec les orques pour 1 pers'NUMTICKET='20',DATEHEURETIC='19/08/2012 15:38',MONTANT='320',TYPEACHAT='week st gilles pour 2 pers'NUMTICKET='12',DATEHEURETIC='19/08/2012 15:38',MONTANT='18',TYPEACHAT='place cinema Spiderman pour 2' WHEN NOT MATCHED THEN INSERT (NUMTICKET,DATEHEURETIC,MONTANT,TYPEACHAT) VALUES ('12','19/08/2012 15:38','18','place cinema Spiderman pour 2')

  13. #33
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    j'ai trouvé d'où venait l'erreur de répétition: j'ai oublié de mettre
    et cette erreur corrigé m'a amené sur une autre erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "NUMTICKET": invalid identifier
    et je me suis rendue compte qu'il fallait faire une autre boucle for qui commencerait a 1 du coup, voilà le code qui fonctionne:
    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
    $sql="MERGE INTO ".$NOMTABLE."  USING dual ON (".$CLEPRIMAIRE." = '".$tab_data[0]."')WHEN MATCHED THEN UPDATE SET %s WHEN NOT MATCHED THEN INSERT (%s) VALUES (%s) ";
     
    	$sql_champsInsert="";
    	$sql_valuesInsert="";
    	$sql_champsUpdate="";
     
    	for ($a=1; $a < $numColonne; $a++) 
    	{$sql_champsUpdate.="".$tab_titre[$a]."='".$tab_data[$a]."',"; }	
     
    	for ($c=0; $c < $numColonne; $c++) 
    	{
    		$sql_champsInsert.="".$tab_titre[$c].","; 
    		$sql_valuesInsert.="'".$tab_data[$c]."',";		
    	}
     
    	$sql_champsUpdate.="|";
    	$sql_champsInsert.="|";
    	$sql_valuesInsert.="|";
     
    	$sql_champsUpdate=str_replace(",|","",$sql_champsUpdate);
    	$sql_champsInsert=str_replace(",|","",$sql_champsInsert);
    	$sql_valuesInsert=str_replace(",|","",$sql_valuesInsert);
     
    	$resultat = sprintf($sql,$sql_champsUpdate,$sql_champsInsert,$sql_valuesInsert);
    	$resultat2 = $db->exec($resultat);//exécute la nouvelle requête
    Voilà,à priori j'en ai fini avec ce merge!!! je remercie tous ceux qui m'ont aidé et j'éspère que ce code servira aux gens qui se trouvent dans la même galère!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Mongoose Faire un tableau dynamique
    Par sabrinouch dans le forum NodeJS
    Réponses: 5
    Dernier message: 01/12/2014, 17h17
  2. [XL-2010] Faire un tableau dynamique croisé avec du texte
    Par PaulG2B dans le forum Excel
    Réponses: 5
    Dernier message: 17/04/2014, 16h32
  3. [E-03][Vba]faire une case totaux dans un tableau dynamique
    Par Overcrash dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/06/2008, 11h39
  4. Comment faire un tableau dynamique ?
    Par Nico128 dans le forum WinDev
    Réponses: 3
    Dernier message: 18/03/2008, 11h13

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