begin process at 2012 05 31 12:38:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

lundi 5 décembre 2011 à 19:04:42 | Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

Vedo67

Bonjour à tous,
j'aurais besoin d'un petit coup de main sur un problème
j'essaie de créer un fichier csv à partir d'un tableau que j'affiche sur une page php (tableau créé à partir d'une base de données)

lorsque je fais mon affichage je n'arrive pas à avoir lé résultat voulu mais je ne sais pas comment régler le problème

je vous met le code que j'ai déja codé, merci de votre aide et les résultats souhaités et obtenus à la fin

Pour chaque ID je voudrais afficher sur une même ligne toutes les infos pour cet ID, mais en fait ça m'affiche sur plusieurs lignes

je ne sais pas si il faut faire juste une ligne $csv ou bien deux et les concaténer
vous verrez dans mon code que j'ai plusieurs ébauches de mon code

en vous remerciant d'avance de votre aide

************************************************************************************

<?php
//On recupère le fichier langage
$translate = Zend_Registry::get('Zend_Translate');

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=\"exportglobal.csv\"");
echo $this->htmlMessages;
echo $this->form;

//Construction de l'entête
$csv = "Id;Age;AgeDev;Sexe;V_chiffre;V_mot;V_couleur;VV_chiffre;VV_mot;VV_couleur;A_chiffre;A_mot;A_couleur;AV_chiffre;AV_mot;AV_couleur;VS_chiffre;VS_mot;VS_couleur;Moy_V;Moy_VV;Moy_A;Moy_AV;Moy_VS;Moy_chiffre;Moy_mot;Moy_couleur;Moy_totale\n";
print($csv);

// construction de chaque ligne
//boucle pour chaque ID
foreach ($this->res as $val){

//on cherche toutes les valeurs
for ($empan=1; $empan<=count($this->entete['empan']); $empan++)
{
//on cherche toutes les valeurs
for ($categorie = 1; $categorie <= count($this->entete['categorie']); $categorie++)
{
// $csv2 .= $val['evaluation_id'].';'.(isset($val['resultat'][$empan][$categorie]) ? $val['resultat'][$empan][$categorie] : '' )."\n";

//on concatene
$csv1 .= $val['evaluation_id'].';'.$val['age'].';'.($val['age_devel'] != null ? $val['age_devel'] : 'N/A').';'.$translate->_(($val['sexe'] == 0 ? 'all_homme' : 'all_femme')).';'.(isset($val['resultat'][$empan][$categorie]) ? $val['resultat'][$empan][$categorie] : '' )."\n";
}

}
// $csv3 .= "$csv1".';'."$csv2";
}
//on affiche
print($csv1);

//print($csv2);
exit;

?>


******************************************************************************
Résultat que je souhaiterais obtenir dans mon fichier csv


Informations Empan visuel Empan visio-verbal Empan auditif Empan auditivo-verbal Empan visio-spatial Moyenne par cat.
ID Age Sexe Age de dév. Chif Mot Coul Moy Chif Mot Coul Moy Chif Mot Coul Moy Chif Mot Coul Moy Chif Mot Coul Moy Chif Mot Coul
1 33 Homme 15 6 4 5 5.00 6 3 3 4.00 4 2 2 2.67 3 2 3 2.67 3 3 1 2.33 4.40 2.80 2.80
2 19 Femme N/A 4 5 1 3.33 1 1 1 1.00 6 2 3 3.67 1 1 1 1.00 7 2 1 3.33 3.80 2.20 1.40
12 54 Homme 5 2 0 0 0.67 0 4 1 1.67 3 0 2 1.67 0 0 2 0.67 0 2 1 1.00 1.00 1.20 1.20





******************************************************************************
Résultat que j'obtiens dans mon fichier csv


Id Age AgeDev Sexe V_chiffre V_mot V_couleur VV_chiffre VV_mot VV_couleur A_chiffre A_mot A_couleur AV_chiffre AV_mot AV_couleur VS_chiffre VS_mot VS_couleur Moy_V Moy_VV Moy_A Moy_AV Moy_VS Moy_chiffre Moy_mot Moy_couleur Moy_totale
1 33 15 Homme 6
1 33 15 Homme 4
1 33 15 Homme 5
1 33 15 Homme 6
1 33 15 Homme 3
1 33 15 Homme 3
1 33 15 Homme 4
1 33 15 Homme 2
1 33 15 Homme 2
1 33 15 Homme 3
1 33 15 Homme 2
1 33 15 Homme 3
1 33 15 Homme 3
1 33 15 Homme 3
1 33 15 Homme 1
2 19 N/A Femme 4
2 19 N/A Femme 5
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 6
2 19 N/A Femme 2
2 19 N/A Femme 3
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 7
2 19 N/A Femme 2
2 19 N/A Femme 1
12 54 5 Homme 2
12 54 5 Homme 0
12 54 5 Homme 0
12 54 5 Homme 0
12 54 5 Homme 4
12 54 5 Homme 1
12 54 5 Homme 3
12 54 5 Homme 0
12 54 5 Homme 2
mardi 6 décembre 2011 à 09:33:47 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

TychoBrahe

Salut,

Regarde donc la documentation de fputcsv().
mardi 6 décembre 2011 à 10:03:53 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

Vedo67

Merci pour cette solution
mais j'aimerais continuer à utiliser la méthode que j'ai commencé à utiliser sans le fputcsv

A moins que vous me disiez comment adapter le fputcsv à mon code (car en essayant ça me donne le même résultat que précédemment

Merci de votre aide
mardi 6 décembre 2011 à 10:35:41 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

TychoBrahe

mais j'aimerais continuer à utiliser la méthode que j'ai commencé à utiliser sans le fputcsv


Ceci est une très mauvaise idée. Qu'on soit bien clair là dessus : il y a pas mal de cas foireux que tu n'as pas prévu que fputcsv() gère correctement, si tu ne l'utilises pas tu vas à l'encontre de pas mal de bugs. Si tu n'es pas convaincu je peux t'en passer quelques uns.

A moins que vous me disiez comment adapter le fputcsv à mon code (car en essayant ça me donne le même résultat que précédemment


Je vais te passer un exemple, après à toi d'adapter à ton code :
Code PHP :
<?php

define('DELIMITER', ';');

$head = array('Id', 'Age', 'Sexe');
fputcsv(STDOUT, $head, DELIMITER);

$res = array();
$res[] = array('evaluation_id' => 1, 'age' => 42, 'sexe' => 0);
$res[] = array('evaluation_id' => 2, 'age' => 69, 'sexe' => 0);
$res[] = array('evaluation_id' => 3, 'age' => 21, 'sexe' => 1);

foreach ($res as $val)
{
  $line = array($val['evaluation_id'],
		$val['age'],
		$val['sexe'] == 0 ? 'all_homme' : 'all_femme'
		);
  fputcsv(STDOUT, $line, DELIMITER);
}

?>

Si tu n'y arrive pas, n'hésites pas à donner plus de détails sur ce qu'il t'arrive. Vu que tu utilises $this, j'en déduit que ton code est situé à l'intérieur d'une méthode, tu devrais passer toute la classe afin qu'on comprenne un peu mieux.
mardi 6 décembre 2011 à 11:13:50 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

Vedo67

Voila ce que j'ai fait avec la fonction fputcsv


***********************************************************
<?php
//On recupère le fichier langage
$translate = Zend_Registry::get('Zend_Translate');

echo $this->htmlMessages;
echo $this->form;


$fp = fopen('C:\exportglobal.csv','w');
define('DELIMITER',';');

//Construction de l'entête
$csv = Array('Id','Age','AgeDev','Sexe','V_chiffre','V_mot','V_couleur','VV_chiffre','VV_mot','VV_couleur','A_chiffre','A_mot','A_couleur','AV_chiffre','AV_mot','AV_couleur','VS_chiffre','VS_mot','VS_couleur','Moy_V','Moy_VV','Moy_A','Moy_AV','Moy_VS','Moy_chiffre','Moy_mot','Moy_couleur','Moy_totale');
fputcsv($fp,$csv,DELIMITER);

//boucle pour chaque ID
foreach ($this->res as $val){

//on cherche toutes les valeurs
for ($empan=1; $empan<=count($this->entete['empan']); $empan++)
{
//on cherche toutes les valeurs
for ($categorie = 1; $categorie <= count($this->entete['categorie']); $categorie++)
{
//on concatene
$csv1 = array($val['evaluation_id'],$val['age'],($val['age_devel'] != null ? $val['age_devel'] : 'N/A'),$translate->_(($val['sexe'] == 0 ? 'all_homme' : 'all_femme')),(isset($val['resultat'][$empan][$categorie]) ? $val['resultat'][$empan][$categorie] : '' ));
fputcsv($fp,$csv1,DELIMITER);
}

}
}

fclose($fp);

?>


*************************************************************


et voila mon résultat:

Id Age AgeDev Sexe V_chiffre
1 33 15 Homme 6
1 33 15 Homme 4
1 33 15 Homme 5
1 33 15 Homme 6
1 33 15 Homme 3
1 33 15 Homme 3
1 33 15 Homme 4
1 33 15 Homme 2
1 33 15 Homme 2
1 33 15 Homme 3
1 33 15 Homme 2
1 33 15 Homme 3
1 33 15 Homme 3
1 33 15 Homme 3
1 33 15 Homme 1
2 19 N/A Femme 4
2 19 N/A Femme 5
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 6
2 19 N/A Femme 2
2 19 N/A Femme 3
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 1
2 19 N/A Femme 7
2 19 N/A Femme 2
2 19 N/A Femme 1
12 54 5 Homme 2
12 54 5 Homme 0
12 54 5 Homme 0
12 54 5 Homme 0




j'ai toujours le même soucis qu'auparavant, il y a un retour à la ligne après chaque occurence et non à la fin de chaque ligne pour un ID donné

Aurais tu une idée?
et oui je passe par une classe


<?php

class ResultatController extends Zend_Controller_Action
{
public function exportglobalAction()
{
//On regarde quels sont les droits de l'utilisateur
$identity = Zend_Auth::getInstance()->getIdentity();
if (($identity['groupe'] == null) or ($identity['langue_id'] == null))
throw new Zend_Exception('Identité incorrecte');
//$evalId = $this->_getParam('id');
//On recupere les infos Empan + Categorie
// TODO: Comme MySQL ne gère pas nativement les pivots, on doit faire plusieurs requetes pour transformer les lignes en colonnes
// Envisager un jour d'utiliser une véritable base de données.
$val = Application_Model_StatModel::getInfoEmpanCategorie($identity['langue_id']);
$resTest = Application_Model_StatModel::getInfoTest($identity['login']);
$moyCateg = Application_Model_StatModel::getMoyenneCategorie($identity['login']);
$info = Application_Model_EvalModel::getInfos($identity['login']);
// $infosDetail = Application_Model_EvalModel::getNiveauTest($identity['langue_id']);

//On affiche les liens
$this->view->Assign(array( 'entete' => $val,
'res' => $resTest,
'moyCateg' => $moyCateg,
'infos' => $info));
// 'infosDetail' => $infosDetail ));
}

?>
mardi 6 décembre 2011 à 11:38:10 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

TychoBrahe

Je comprend mal comment tu t'y prend pour récupérer tes données, avec 2 for dans un foreach ça sent l'échec. Il y a quoi exactement dans $this->res ? Que représentent $this->entete['categorie'] et $this->entete['empan'] ?
mardi 6 décembre 2011 à 12:12:01 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

Vedo67

Alors dans mon $this->res se trouve toutes les infos de base (ID, age; age_dev, sexe...) qui proviennent d'une table

dans $this->entete['categorie'] et $this->entete['empan'] les données de d'une autre table rattachée à la première par l'ID

Exemple de ma table ci-dessous:

evaluation_id empan_type_id categorie_type_id niveau
1 1 1 6
1 1 2 4
1 1 3 5
1 2 1 6
1 2 2 3
1 2 3 3





je fais la mêma manip que j'utilise pour créer mon csv pour créer un tableau dans une page php et ça fonctionne correctement


<div id="resultat">
<table class="res" >
<tbody>
<?php foreach ($this->res as $val) : ?>
<tr>
<td><a href="<?php echo $this->url(array('controller' => 'resultat', 'action' => 'detail', 'id' => $val['evaluation_id'])); ?>"><?php echo $val['evaluation_id'] ?></a></td>
<td><?php echo $val['age'] ?></td>
<td><?php echo $translate->_(($val['sexe'] == 0 ? 'all_homme' : 'all_femme')); ?></td>
<td><?php echo ($val['age_devel'] != null ? $val['age_devel'] : 'N/A') ?></td>
<?php //Pas de foreach ici car on peu ne pas avoir certains tests
for ($empan=1; $empan<=count($this->entete['empan']); $empan++) {
for ($categorie = 1; $categorie <= count($this->entete['categorie']); $categorie++) {
echo '<td>' .
(isset($val['resultat'][$empan][$categorie]) ? $val['resultat'][$empan][$categorie] : '' ).
'</td>';
}
echo '<td>'.
(isset($val['resultat'][$empan]['moyenne']) ? $val['resultat'][$empan]['moyenne'] : '') .
'</td>';
}
?></tr>
<?php endforeach;?>
</tbody>
</table>
</div>
mardi 6 décembre 2011 à 16:53:03 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

TychoBrahe

Pourquoi n'as-tu pas fait une jointure afin de ne pas avoir à t'embêter ? D'autant plus que si c'est bien ce que je penses, à cause de tes deux for tu multiplie le nombre de résultats (incohérents qui plus est), un truc de malade.
mardi 6 décembre 2011 à 17:51:50 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

Vedo67

en fait j'ai une jointure qui existe entre mes tables

mais ce que je ne comprends pas c'est que mes deux for imbriqués ne me posent pas de soucis quznd je l'affiche sous forme de tableau dans ma page php

le seul soucis est l'affichage dans mon fichier csv
et en plus je n'ai pas de soucis de multiplication des résultats car comme tu peux le voir dans mes précédents posts j'ai les bons résultats mais qui ne s'affichent pas sous forme de lignes mais en colonnes

en te remerciant de ton aide par avance
mercredi 7 décembre 2011 à 00:02:22 | Re : Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données

TychoBrahe

Étrange, tu peux montrer le contenu exact du fichier csv stp ?

1 2 3 4

Cette discussion est classée dans : chiffre, mot, homme, moy, femme


Répondre à ce message

Sujets en rapport avec ce message

Affichage d'une requete en nombre [ par deatmead ] Hello, voilà j'ai fais un site avec une base de donnée.Les membres peuvent choisir entre "homme" ou "femme".J'aimerais créer un mini script qui me per [ALERTE SÉCURITÉ] Acer Aspire One et mot de passe BIOS [ par Flachy Joe ] ALERTE destinée aux UTILISATEURS de Mini PC ACER ASPIRE ONE Ne faites pas confiance au mot de passe du BIOS pour sécurisé l'accès à vos données, ce mo Compter en mysql [ par whouu ] Salut a tous, pour rechercher un mot contenu sur une page stockée dans mysql je fais en gros :SELECT page FROM mypages WHERE page like '$mot';Je voudr Isset ne fonctionne pas =( [ par alex_sex ] Bon je viens ici car je suis vraiment a bout de nerf, pas moyen de faire marcher ce code, si vous m'aidiez, vous me soulagerez a un point inimaginable Mot clé static [ par slurp ] qui pourrais m'expliquer le mot clé static, pasque moi je serais tenter de l'utiliser partout vu que pas besoin d'instancié la class.S'il vous plait u comparaison [ par tesnim1 ] tesnim Bonjour, j'ai une trés trés trés petite problème:je doit comparer deux mots,en réalité c'est le mème mot mais le premiers est en singulier et l rechercher [ par yosrounaw ] bonjour je suis entrain de creer un site web et je ne sais pas comment faire la recherche d'un mot clé,j'ai deux table table categorie et  table sous Surligner mot moteur recherche [ par flopad ] Bonjour,j'utilise un moteur de recherche en php.Lorsque l'utilisateur effectue une recherche, il arrive sur une page avec un résumé des pages qui corr comparaison 2 chaine de caractéres [ par cobra176 ] bonjour a tous.je me demander si il existe un moyen de comparer deux chaines de caractéres.exemple 1chaine1 = programme PHPchaine2 = PHPil y a un mot creation d'un espace perso avec login mot de pass +depose de doc privé [ par steph60c ] Bonjour,je cherche a creer un espace perso avec login et mot de passe pour des utilisateurs qui souhaite creer et deposé leurs cv ou autres documents.


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,026 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales