Un de mes scripts utilise fputcsv(). Mais cette fonction est du PHP 5
Je dois assurer la compatibilité avec des serveurs offrant du PHP 4
Existe-t-il un équivalent "approchant" à fputcsv() en PHP 4 ?
Merci à tous
Un de mes scripts utilise fputcsv(). Mais cette fonction est du PHP 5
Je dois assurer la compatibilité avec des serveurs offrant du PHP 4
Existe-t-il un équivalent "approchant" à fputcsv() en PHP 4 ?
Merci à tous
voila le code de la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if (!function_exists('fputcsv')) include_once("php4.inc.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 function fputcsv($fh, $arr) { $csv = ""; while (list($key, $val) = each($arr)) { $val = str_replace('"', '""', $val); $csv .= '"'.$val.'",'; } $csv = substr($csv, 0, -1); $csv .= "\n"; if (!@fwrite($fh, $csv)) return FALSE; }
Bonjour,
J'ai trouvé ce post car j'ai le même problème, mais lorsque je lutilise j'ai des doublons.
Par exemple voici ma table :
id nom prenom adresse
xx xxx xxxxxxx xxxxxxx
yy yyy yyyyyy yyyyyy
voici mon fichier CSV crée :
"xx","xx","xxx","xxx","xxxxxxx","xxxxxxx","xxxxxxx","xxxxxxx",\n"yy","yy","yyy","yyy","yyyyyy","yyyyyy","yyyyyyy","yyyyyyy"\n
voici mon code :
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 // Connexion au serveur mysql $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('Impossible de se connecter : ' . mysql_error()); // sélection de la base de données mysql_select_db(DB_DATABASE, $connect); function fputcsv($fh, $arr) { $csv = ""; while (list($key, $val) = each($arr)) { $val = str_replace('"', '""', $val); $csv .= '"'.$val.'";'; } $csv = substr($csv, 0, -1); $csv .= "\n"; if (!@fwrite($fh, $csv)) return FALSE; } $fichier_export = fopen('file.csv', 'w'); $sql = "SELECT * FROM ".DB_TABLE_DL." "; $result = mysql_query($sql); while ($row = mysql_fetch_array($result)) { fputcsv($fichier_export, $row,";"); }
Salut,
mysql_fetch_array() te retourne un tableau à double entrée inutile dans la plupart des cas dont celui-ci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part while ($row = mysql_fetch_row($result)) {
(c'est plus propre de fermer ton fichier à la fin fclose())
Ok merci.
Mais que dois-je mettre alors dans la boucle pour connaitre le nombre de lignes?
Tu peux utiliser directement mysql_num_rows($result) avant ou après ta boucle.
Et après réflexion il me semble qu'il y a un souci avec cette fonction putcsv(), si tu as par exemple cette chaîne dans un champ :
zaeaz","zerezr
tu auras au final :
"zaeaz"",""zerezr"
si je me trompe pas ça te fait 2 champs au lieu d'un dans le csv, à vérifier. Je pense qu'il vaudrait mieux utiliser addslashes ce qui donne un truc du style (non testé) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function fputcsv($fh, $arr) { $arr = array_walk($arr, 'addslashes'); $csv = '"'.implode('","', $arr).'"\n'; if (!@fwrite($fh, $csv)) return FALSE; }
Merci,
Mais dans la boucle :
Si je supprime le while je n'ai plus rien dans ma variable $row.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 while ($row = mysql_fetch_array($result)) { fputcsv($fichier_export, $row,";"); }
Qu'est ce que je dois faire pour obtenir le fichier csv sans les doublons?
$row doit retourner un tableau à simple entrée, si j'ai bien compris.
En fait tu laisses ta boucle tu remplaces juste :
par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $row = mysql_fetch_array($result)
Tu peux faire un var_dump de $row, tu pourras voir ce que je voulais dire par double entrée pour le fetch_array.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $row = mysql_fetch_row($result)
Super ça marche!!
sinon j'avais trouvé l'astuce mais c'était du vrai bricolage maison!! :
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 function fputcsv($fh, $arr) { $csv = ""; $i=0; //while (list($key, $val) = each($arr)) while (list($key, $val) = each($arr)) { if ($i==0){ $val = str_replace('"', '""', $val); $csv .= '"'.$val.'";'; $i=1; }else{ $i=0; } } $csv = substr($csv, 0, -1); $csv .= "\n"; if (!@fwrite($fh, $csv)) return FALSE; }
Partager