Corrélation de données dans une requête SQL

Petit nouveau ! | 3 Messages

15 févr. 2017, 18:39

Bonjour à tous,

J'utilise et ça fonctionne bien, la fonction ci-dessous pour générer un fichier CSV.

Mon problème est qu'il y a des champs avec des chiffres qui correspondent à des catégories et je veux exporter un cdv avec la catégorie et pas avec le code de la catégorie.

Par exemple la deuxième colonne j'ai des "1", des "2", des "3" etc etc et je voudrais des "Accessoires", "Hauts", "Pantalons" etc etc

Quelqu'un peut me dire comment modifier le "foreach" de la fonction "echocsv" pour insérer les noms de catégories dans le CSV ?

Merci les amis,

Michel
$query = sprintf($query);
$result = mysql_query($query, $conn) or die(mysql_error($conn));

/*
* send response headers to the browser
* following headers instruct the browser to treat the data as a csv file called export.csv
*/

header('Content-Type: text/csv charset=utf-8');
header('Content-Disposition: attachment;filename=out.csv');

/*
* output header row (if atleast one row exists)
*/

$row = mysql_fetch_assoc($result);
if ($row) {
    echocsv(array_keys($row));
}

/*
* output data rows (if atleast one row exists)
*/

while ($row) {
    echocsv($row);
    $row = mysql_fetch_assoc($result);
}

/*
* echo the input array as csv data maintaining consistency with most CSV implementations
* - uses double-quotes as enclosure when necessary
* - uses double double-quotes to escape double-quotes
* - uses CRLF as a line separator
*/

function echocsv($fields)
{
    $separator = '';
    foreach ($fields as $field) {
    
            if (preg_match('/\\r|\\n|,|"/', $field)) {
            $field = '"' . str_replace('"', '""', $field) . '"';

        }
        echo $separator . utf8_encode($field);
        $separator = ',';
    }
    echo "\r\n";
}
?>
Dernière édition par moogli le 16 févr. 2017, 11:54, édité 1 fois.
Raison : BBCode plus titre un peu plus correct

Mammouth du PHP | 1235 Messages

16 févr. 2017, 10:37

Tout dépend d'ou vient la correspondance 0 > Accessoire ...
Si ca vient de ta base de donnée, ce qui serait le plus logique, c'est ta requète qu'il faut modifier afin d'afficher le nom plutot que l'identifiant.

Si ca vient d'ailleurs, envisage d'abords de rapatrier cela vers ta BDD ce sera le plus facile à maintenir par la suite.
Si vraiment ce n'est pas possible de passer par la BDD, il te faut modifier ton foreach pour pouvoir utiliser l'index du tableau, et faire une exception de remplacement pour chaque champs concerné.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Petit nouveau ! | 3 Messages

16 févr. 2017, 10:57

Hi Spols ! Thank you !

Dans le base de données je ne peux pas, je devrais faire des modifications lourdes partout. D'où ma question peut-être trop difficile : comment modifier le foreach ?

Michel

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

16 févr. 2017, 12:01

salut,

comment sais tu a quoi correspondent les index ?

Généralement il s'agit d'une table jointe et donc une jointure suffit à régler le problème.

sans connaitre les sources de données on ne peu pas t'aider.
La seule chose certaine c'est que ce n'est pas la fonction echocsv qui faut modifier mais la récupération des données, donc dans le while au pire.

Merci de faire un effort sur le titre et le bbcode

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

16 févr. 2017, 12:33

Merci Moogli.
C'est pas terrible pour un pro : les index sont gérés avec des : if (categorie==1) $affichage="machin";
Je peux créer une table avec 2 colonnes id et nom :
id = 1 et nom = machin
id = 2 et nom = truc
Avec ceci comment je fait pour inclure dans ma requête que si le champs est égal à 1 ça remplace le 1 par la correspondance ?
Merci pour la réponse ou me dire comment s'appelle ce tour de passe/passe

Mammouth du PHP | 1235 Messages

16 févr. 2017, 12:39

Il s'agit de jointure, c'est trés éfficace.

Montre nous ta requète, ce sera plus simple de t'aider.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

16 févr. 2017, 15:29

et un p'tit tuto pour aller avec : http://sqlpro.developpez.com/cours/sqlaz/jointures/

effectivement il est préférable d'avoir une table pour cela. ce peut permettre d'ajouter des informations et surtout d'ajouter, modifier ou supprimer des catégrories sans devoir toucher au code (et donc pas de risque de casser l'appli ;) )


@+
Il en faut peu pour être heureux ......