PhP vers .Csv

PhP vers .Csv - PHP - Programmation

Marsh Posté le 14-06-2007 à 14:23:55    

Bonjour,
 
Alors voila j'aimerais transporter les données de ma base oracle vers un fichier .csv !
Etant plus habitué au base de données MySQl je me demande si le code est le mem pour se genre de chose.
Neanmoins j'ai tester le code :
 
 

Code :
  1. <HTML>
  2. <HEAD>
  3. <TITLE>ora_exec</TITLE>
  4. </HEAD>
  5. <BODY>
  6. <fieldset style="width: 600px">
  7. <legend>Date de début et date de fin</legend>
  8. <form method="post" action=''>
  9. <table width="70%" border="0" cellspacing="1" cellpadding="6">
  10.    <tr>
  11. <td>Date de début :</td>
  12. <td><input type="text" name="DD" size="25" value=<? if
  13. (isset($_POST['DD'])) echo $_POST['DD']; ?>><br></td>
  14.    </tr>
  15.    <tr>
  16. <td>Date de fin : </td>
  17. <td><input type="text" name="DF" size="25" value=<? if
  18. (isset($_POST['DF'])) echo $_POST['DF']; ?>><br></td>
  19.    </tr>
  20. </table>
  21. <center>
  22. <input type="hidden" name="far" value="1">
  23. <input type="submit" name="Submit" value="Valider">
  24. <input type="Reset" name="Reset" value="Effacer">
  25. </center>
  26. </form>
  27. </fieldset>
  28. <?
  29. if (isset($_POST['far']) && ($_POST['far']==1))
  30. {
  31. print("<h3> LISTE DES FACTURES A RECEVOIR</h3>" );
  32. //connexion  
  33. if($connection = Ora_Logon("","" )){
  34. if($cursor = ora_open($connection))
  35.     {
  36. //-------------------- REQUETE --------------------------------------------------------------------------------------------
  37. $query="select LCFO_CDCL_NUMERO,LCFO_CDFO_NUMERO,LCFO_LIGNE,FOUR_NOM,LCFO_ARTI_CODE,LCFO_DESIGNATION,LCFO_QTE_COMMANDEE_UA,to_char(LCFO_DT_DERNIERE_RECEPTION,'DD/MM/YYYY'),";
  38. $query.="LCFO_QTE_RECUE_UA,LCFO_QTE_FACTUREE_UA,LCFO_UNIT_CODE_UA,(NVL(LCFO_QTE_RECUE_UA,0)-NVL(LCFO_QTE_FACTUREE_UA,0)),";
  39. $query.="(NVL(LCFO_PRIX_UA,0)-(NVL(LCFO_PRIX_UA,0)*NVL(LCFO_TAUX_REMISE,0)/100))*(NVL(LCFO_QTE_RECUE_UA,0)-NVL(LCFO_QTE_FACTUREE_UA,0))";
  40. $query.=" from LIGNE_CDE_FOURNISSEUR,fournisseur where FOUR_CODE=LCFO_FOUR_CODE and LCFO_DT_DERNIERE_RECEPTION between to_date('".$_POST['DD']."','DD/MM/YYYY') and to_date('".$_POST['DF']."','DD/MM/YYYY')";
  41. $query.=" and lcfo_cent_code='AFF_ADC'and nvl(LCFO_QTE_commandee_UA,0) >0 and nvl(lcfo_QTE_RECUE_UA,0)>0 AND nvl(lcfo_QTE_RECUE_UA,0)<=nvl(LCFO_QTE_commandee_UA,0)";
  42. $query.= " and nvl(LCFO_QTE_facturee_UA,0)<(lcfo_QTE_RECUE_UA)*0.95";
  43. $query.="and LCFO_CDFO_NUMERO not in (select 1 from LIGNE_FACTURE_FOURNISSEUR,facture_fournisseur where  LFFO_FAFO_NUMERO=FAFO_NUMERO and FAFO_STATUT='REF'";
  44. $query.=" and FAFO_DT_RECEPTION between to_date('".$_POST['DD']."','DD/MM/YYYY') and to_date('".$_POST['DF']."','DD/MM/YYYY'))";
  45. print("<br> <br> <a style=\"font-weight: bold;\" href=\"../../index.html\">Accueil</a>" );
  46. $fichier=fopen('toto.csv','w+');
  47. fputs($fichier, $data['LCFO_CDCL_NUMERO']);
  48. fputs($fichier,'textedeuxiemeligne');
  49. fclose($fichier);
  50. ?>   
  51. <a href="toto.csv">Fichier</a>
  52. <?
  53. //------------------- PARSE ----------------------------------------------------------------------------------------------
  54.          if((Ora_Parse($cursor, $query)) >= 0)
  55.  {
  56.                    if(ora_exec($cursor))
  57.                    {
  58.                            print("<TABLE" );
  59.                              print(" BORDER=\"1\">\n" );
  60.                             while(ora_fetch($cursor))
  61.        {
  62.                                 print("<TR>\n" );
  63.                                   for($index = 0;
  64.                                          $index < ora_numcols($cursor);
  65.                                          $index++)
  66.                                          {
  67.                                              print("<TD>" );
  68.                                                        print(ora_getcolumn($cursor,$index));
  69.                                              print("</TD>\n" );
  70.                                       }
  71.                                 print("</TR>\n" );
  72.                   }
  73.                          print("</TABLE>\n" );
  74.                          print("<BR>\n" );
  75.                                  print("Rows: " );
  76.                                  print(ora_numrows($cursor));
  77.                                  print("<BR>\n" );
  78.                   }
  79.                
  80.         }  /* fin du if not ora parse */
  81.            
  82.               // Ferme le curseur Oracle  
  83.               Ora_Close($cursor);
  84.               print("Fermeture du curseur effectuee<BR>\n" );
  85.     } /* fin du if $cursor etc  */
  86.       else{
  87.         print("Le curseur n a pas pu etre ouvert!<BR>\n" );
  88.       }
  89.        // Deconnecte du serveur  
  90.       Ora_Logoff($connection);
  91.       print("Deconnexion effectuee<BR>\n" );
  92.  
  93. /* fin du if($connection   */
  94. }
  95. ?>
  96. </BODY>
  97. </HTML>


 
 

Code :
  1. $fichier=fopen('toto.csv','w+');
  2. fputs($fichier, $data['LCFO_CDCL_NUMERO']);
  3. fputs($fichier,'textedeuxiemeligne');
  4. fclose($fichier);
  5. ?>   
  6. <a href="toto.csv">Fichier</a>
  7. <?


 
j'aimerais que les données de mon select s'affiche dans mon .csv ! Comme dans un tableau en HTML...
Si certaine personne connaissent oracle...

Reply

Marsh Posté le 14-06-2007 à 14:23:55   

Reply

Marsh Posté le 14-06-2007 à 15:29:08    

1) $data, il vient d'où?
2) le csv, c'est un format text où 1 ligne avec \n à la fin = 1 enregistrement (ex : 1 ligne provenant du résultat d'une requête SELECT) et où chaque champ (ie 1 des champs du résultat d'une requête SELECT) est séparé par un délimiteur (un caractère genre , ou ; voire tabulation)...
 
Donc tout ce que tu as à faire, c'est exécuter une requête SELECT, récupérer le résultat, faire une boucle sur le résultat et écrire dans un fichier chaque champ du résultat, séparé par ; et mettre \n à la fin du dernier champ. A la fin de boucle, penser à fermer le fichier puis proposer un lien permettant de la télécharger...

Reply

Marsh Posté le 14-06-2007 à 16:17:19    

le truc c'est que dans mon ficheir excel j'obtient REssource ID#3
 

Code :
  1. if((Ora_Parse($cursor, $query)) >= 0)
  2.  {
  3.                    if(ora_exec($cursor))
  4.                    {
  5.                            print("<TABLE" );
  6.                              print(" BORDER=\"1\">\n" );
  7.                             while(ora_fetch($cursor))
  8.        {
  9.                                 print("<TR>\n" );
  10.                                   for($index = 0;
  11.                                          $index < ora_numcols($cursor);
  12.                                          $index++)
  13.                                          {
  14.                                              print("<TD>" );
  15.                                                        print(ora_getcolumn($cursor,$index));
  16.                                              print("</TD>\n" );
  17.                                       }
  18.                                 print("</TR>\n" );
  19.                   }
  20.                          print("</TABLE>\n" );
  21.                          print("<BR>\n" );
  22.                                  print("Rows: " );
  23.                                  print(ora_numrows($cursor));
  24.                                  print("<BR>\n" );
  25. $fichier=fopen('far.csv','w+');
  26. fputs($fichier, $query );
  27. fclose($fichier);
  28. ?>   
  29. <a href="far.csv">Fichier</a>
  30. <?
  31.                   }
  32.                
  33.         }  /* fin du if not ora parse */

Reply

Marsh Posté le 14-06-2007 à 16:27:36    

mais qu'est-ce que tu fais à mettre du html dans un fichier csv??? T'as compris ce que je t'ai dit précédemment?
Ex de fichier csv :

Code :
  1. ID;Nom;Prenom
  2. 1;Dupont;Henry
  3. 2;Toto;Pierre


Reply

Marsh Posté le 14-06-2007 à 16:31:22    

Oui j'ai comprit il faut j'affiche les resultat et pour qu'il puisse etre lut il faut qu'il soit separer par ";"
 
mais a la place de $query il faut bien que je mette une variable...

Reply

Marsh Posté le 14-06-2007 à 16:39:29    

ben $query, ça contient la requête SQL à exécuter. c'est le résultat de cette requête qu'il faut "convertir" en csv via une boucle php.

Reply

Marsh Posté le 15-06-2007 à 09:00:54    

Code :
  1. $data = array(
  2.   array(),
  3.   );
  4.  
  5. if ($f = @fopen('far.csv', 'w+')) {
  6.   foreach ($data as $ligne) {
  7.     fputs($f, $ligne);
  8.     }
  9.   fclose($f);
  10.   }
  11. else {
  12.   echo "Impossible d'acc&eacute;der au fichier.";
  13.   }
  14. ?>   
  15. <a href="far.csv">Fichier</a>
  16. <?


 
voila j'ai fait une boucle...Mais je n'arrive pas a avoir le resultat de ma requete.:s

Reply

Marsh Posté le 15-06-2007 à 09:36:31    

franchement, t'as déjà fait du php?
le résultat de ta requête, tu l'as en utilisant ta boucle
while(ora_fetch($cursor))
{
 
}
 
et je t'ai dit de rajouter ; (ou tab ou ,) entre chaque champ et un \nà la fin de chaque tour de boucle.
 
Dans le code de ton premier message, tu fais un peu n'importe quoi : tu commence à remplir ton fichier csv avant même d'avoir exécuté ta requête :/
Rappel de l'algo donc :
1) préparation de la requête à exécuter
2) exécution de la requête
3) si elle a pas planté et qu'elle ramène des résultats alors
4) création du fichier csv (vide donc)
5) récupérer les résultats de la requête via une boucle
6) écrire chaque champ d'un enregristrement dans le fichier et en concaténant ';' (sauf pour le dernier champ où faut mettre \n)
7) une fois tous les entregistrement récupérés et mis dans le ficheir csv, fermer le fichier
8) afficher un lien permettant de télécharger le fichier.

Reply

Marsh Posté le 15-06-2007 à 09:41:44    

Code :
  1. $data = array(
  2.      array(),
  3.      );
  4.      ...
  5.      foreach ($data as $ligne) {
  6.        fputs($f, $ligne);
  7.        }


Il manque des bouts dans ton code non? Ou est l'execution de la requete et la récupération des résultats?
Ou alors après l'instruction if, il est temps d'apprendre le fonctionnement d'un foreach.

Spoiler :

vivement la fin du stage non?

 

edit: over burned de 5 minutes mais du coup je peux répondre à rufo:

emploze a écrit :

Je suis en 1ere année de BTS informatique, le PHP je l'est apprit c'est jsute que c'est pas trop mon kiff le developpement...


et je te conseille ses précédents topics qui valent souvent leur pesant de cacahuetes ;)


Message édité par anapajari le 15-06-2007 à 09:43:52
Reply

Marsh Posté le 15-06-2007 à 10:24:16    

il me semblait bien que son pseudo me disait qq chose...

Reply

Marsh Posté le 15-06-2007 à 10:24:16   

Reply

Marsh Posté le 15-06-2007 à 10:29:18    

Ben si tu veux mon code complet il est plus haut...
 
Ben ecoute anapajari si ca te fait chier de repondre a mes post, lit les pas c'est tout...
Moi je pose mes questions, mieu vaux les poser que de rester blocker!!!

Reply

Marsh Posté le 15-06-2007 à 10:40:09    

emploze a écrit :

Ben si tu veux mon code complet il est plus haut...
 
Ben ecoute anapajari si ca te fait chier de repondre a mes post, lit les pas c'est tout...
Moi je pose mes questions, mieu vaux les poser que de rester blocker!!!


 
si tu veux, ce qui me dérange, c'est le manque de logique dans l'ordonnancement de tes actions que tu fais dans le code de ton premier post. Je veux dire par là que c'est même pas un pb de manque de connaissance du langage, c'est vraiment un manque total de logique de l'algo. Je te l'ai donné, y'a plus qu'à, donc...

Reply

Marsh Posté le 15-06-2007 à 10:42:53    

Tinkiete pas je sait que j'ai un probleme de logique en algo...tu ne me l'apprend pas ^^
 
Mais je vais arrivé a le faire marcher comme tout se que j'ai demander sur les autre post...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed