Exporter csv
Résolu
ymoussa
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
ymoussa Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
ymoussa Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Bonjour,j'ai un code qui me renvoi une notification d'erreur comme suit:
S'il vous plait quelqu'un peux m'aider.
voici mon code:
EDIT : Ajout des balises de code.
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\***********\csv.php on line 31
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0,50' at line 1.
S'il vous plait quelqu'un peux m'aider.
voici mon code:
$lot_courant = 0; $nombre_elements_lot = 50; $rsdata='SELECT Reference,Montant FROM tab'; $rsdata.="LIMIT ${lot_courant},${nombre_elements_lot}"; $resultats= mysql_query($rsdata); $nombre_resultats = count($resultats); while ($row = mysql_fetch_array($resultats) or die( mysql_error())) { }
EDIT : Ajout des balises de code.
A voir également:
- Exporter csv
- Exporter favoris chrome - Guide
- Exporter conversation sms android - Guide
- Exporter favoris firefox - Guide
- Exporter photos google photos - Guide
- Exporter une video youtube - Guide
3 réponses
Bonjour,
1 - Tu utilises l'ancienne extension mysql ... considérée comme obsolète. Merci de lire ceci : https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
2 - Fais un ECHO de ta variable $rsdata ... puis testes la requête ainsi obtenue DIRECTEMENT dans ta BDD ... tu devrais pouvoir voir l'erreur. (un espace manquant entre tab et Limit je pense... )
Au passage.. tu sais que tu peux, en php, écrire des lignes de code en plusieurs lignes ?
Comme ceci :
Cordialement,
Jordane
1 - Tu utilises l'ancienne extension mysql ... considérée comme obsolète. Merci de lire ceci : https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
2 - Fais un ECHO de ta variable $rsdata ... puis testes la requête ainsi obtenue DIRECTEMENT dans ta BDD ... tu devrais pouvoir voir l'erreur. (un espace manquant entre tab et Limit je pense... )
Au passage.. tu sais que tu peux, en php, écrire des lignes de code en plusieurs lignes ?
Comme ceci :
$rsdata="SELECT Reference ,Montant FROM tab LIMIT ${lot_courant},${nombre_elements_lot}"; //le temps des tests : echo "<u>La requête est : </u>".$rsdata;
Cordialement,
Jordane
MERCI Jordane, je fais un Echo de $rsdata et tester directement la requête dans la BDD ça marche bien, par contre quand j’exécute mon code pour exporter mon fichier par lot de 50, j’obtiens une page vide.
voici le code:
voici le code:
//Extraire les données du contenu $rsdata="SELECT Reference ,Montant FROM tab LIMIT ${lot_courant},${nombre_elements_lot}"; //le temps des tests : //echo "<u>La requête est : </u>".$rsdata; $resultats= mysql_query($rsdata); $nombre_resultats = count($resultats); $dataLine=""; $date= date("d/m/Y"); while ($row = mysql_fetch_array($resultats) or die( mysql_error())) { $dataLine.="NIGLC,,OM,,,$row[Reference],$date,31/12/2016,$row[Montant],N,,,,101\n"; } $dataLine.="\n"; //Envoyer le contenu au navigateur $file="101_NIGLC_".Date('dmY_His').".csv"; header("Content-type: text/x-csv"); header("Content-Disposition: attachment; filename=".$file); echo $columnLine.$dataLine; $lot_courant++; unset($resultats); } while($nombre_resultats == $nombre_elements_lot);
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
1 - Tu utilises TOUJOURS l'ancinne extention MYSQL ... passe donc à mysqli ou à la PDO !
2 - Ajoutes ceci au début de ta page pour afficher les éventuelles erreurs PHP :
3 - Désactive les header le temps de tes tests :
4 - Que vient faire le WHILE à la fin de ton code ? Sa syntaxe n'est pas bonne !
Retire le !!
2 - Ajoutes ceci au début de ta page pour afficher les éventuelles erreurs PHP :
error_reporting(E_ALL);
3 - Désactive les header le temps de tes tests :
//header("Content-type: text/x-csv"); //header("Content-Disposition: attachment; filename=".$file);
4 - Que vient faire le WHILE à la fin de ton code ? Sa syntaxe n'est pas bonne !
Retire le !!
je fais les modifications et je eu les erreurs suivantes:
mysqli_query() expects at least 2 parameters, 1 given
mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given.
le WHILE à la fin est une condition comme je utilisé la boucle do while.
je vous fait un petit résumé de ce que j'aimerais faire, mon code marche très bien il me génère un fichier csv propre comme je le désire mais le fichier est lourd doc j'aimerais le généré par lot de 50...
mysqli_query() expects at least 2 parameters, 1 given
mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given.
le WHILE à la fin est une condition comme je utilisé la boucle do while.
je vous fait un petit résumé de ce que j'aimerais faire, mon code marche très bien il me génère un fichier csv propre comme je le désire mais le fichier est lourd doc j'aimerais le généré par lot de 50...
je fais les modifications
Et si tu nous montres pas ton code modifié .... IMPOSSIBLE de t'aider !
Mais bon... je devine déjà que tu as du mal utiliser (écrire) la fonctions mysqli_query()
Y as tu mis la 'connexion' ?
Par exemple :
mysqli_query($con,$rsdatal);
$con ... étant la connexion à la BDD..
$con=mysqli_connect("localhost","user","password","database"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); }
ok voici mon code entier:
<?php error_reporting(E_ALL); //connexion au serveur localhost et à la base de données $serveur = "localhost"; $user = "root"; $pwd = ""; $bdd = "db"; mysql_connect($serveur, $user, $pwd) or die('Impossible de se connecter au serveur'); mysql_select_db($bdd) or die('Impossible de sélectionner la base de données'); //compter le nombre d'enregistrements de la table $lot_courant = 0; $nombre_elements_lot = 50; do { //l'entete du fichier $columnLine=""; $contenu='Total Records*=,,,,,,,,,,,,, Total New Records*=,,,,,,,,,,,,, Total Updated Records*=,,,,,,,,,,,,, Total Deleted Records*=,,,,,,,,,,,,, Reserved Header Value,,,,,,,,,,,,, Biller ID*,Billed Customer ID,Bill Account ID*,Reference 4,Reference 5,Bill Number*,Bill Date,Bill Due Date*,Bill Amount*,Requested Operation*,Reserved 1,Reserved 2,Reserved 3,ProviderID*'; $columnLine .= $contenu; $columnLine .="\n"; //Extraire les données du contenu $rsdata="SELECT Reference ,Montant FROM tab LIMIT ${lot_courant},${nombre_elements_lot}"; //le temps des tests : //echo "<u>La requête est : </u>".$rsdata; $resultats= mysql_query($rsdata); $nombre_resultats = count($resultats); $dataLine=""; $date= date("d/m/Y"); while ($row = mysql_fetch_array($resultats) or die( mysql_error())) { $dataLine.="NIGLC,,OM,,,$row[Reference],$date,31/12/2016,$row[Montant],N,,,,101\n"; } $dataLine.="\n"; //Envoyer le contenu au navigateur $file="101_NIGLC_".Date('dmY_His').".csv"; header("Content-type: text/x-csv"); header("Content-Disposition: attachment; filename=".$file); echo $columnLine.$dataLine; $lot_courant++; unset($resultats); } while($nombre_resultats == $nombre_elements_lot); ?>
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
1- Pour la dernière fois ..... merci d'utiliser les BALISES DE CODE lorsque tu postes du code sur le forum.Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
2 - Le code que tu nous montres .. n'est pas la version corrigée .... tu es toujours en mysql .... et donc ne correspond en rien aux messages d'erreurs que tu viens de nous poster !!
.
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
2 - Le code que tu nous montres .. n'est pas la version corrigée .... tu es toujours en mysql .... et donc ne correspond en rien aux messages d'erreurs que tu viens de nous poster !!
.
voici le code modifier et ça me renvoi une page vide:
<?php error_reporting(E_ALL); //connexion au serveur localhost et à la base de données $con=mysqli_connect("localhost","root","","IMPAYE"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } //compter le nombre d'enregistrements de la table $lot_courant = 0; $nombre_elements_lot = 50; do { //l'entete du fichier $columnLine=""; $contenu='Total Records*=,,,,,,,,,,,,, Total New Records*=,,,,,,,,,,,,, Total Updated Records*=,,,,,,,,,,,,, Total Deleted Records*=,,,,,,,,,,,,, Reserved Header Value,,,,,,,,,,,,, Biller ID*,Billed Customer ID,Bill Account ID*,Reference 4,Reference 5,Bill Number*,Bill Date,Bill Due Date*,Bill Amount*,Requested Operation*,Reserved 1,Reserved 2,Reserved 3,ProviderID*'; $columnLine .= $contenu; $columnLine .="\n"; //Extraire les données du contenu $rsdata="SELECT Reference ,Montant FROM nigelec LIMIT ${lot_courant},${nombre_elements_lot}"; //le temps des tests : //echo "<u>La requête est : </u>".$rsdata; $resultats= mysqli_query($con,$rsdata); $nombre_resultats = count($resultats); $dataLine=""; $date= date("d/m/Y"); while ($row = mysqli_fetch_array($resultats) or die( mysql_error())) { $dataLine.="NIGLC,,OM,,,$row[Reference],$date,31/12/2016,$row[Montant],N,,,,101\n"; } $dataLine.="\n"; //Envoyer le contenu au navigateur $file="101_NIGLC_".Date('dmY_His').".csv"; //header("Content-type: text/x-csv"); //header("Content-Disposition: attachment; filename=".$file); echo $columnLine.$dataLine; $lot_courant++; unset($resultats); } while($nombre_resultats == $nombre_elements_lot); ?>
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
J'ai encore corrigé tes balises de code.....
Pour que ça marche ... il faut ecrire le code ENTRE les balies
<code php>
//Ici tu mets le code ...
//...
</code>
Ce qui donne :
Cette ligne de code :
Ne peut pas fonctionner !
$resultats est un "jeu" de résultat ... pas un ARRAY.
Pour connaitre le nombre de résultats retournés par ta requête tu dois utiliser :
Celle la non plus :
Il faut concaténer les variables de type ARRAY de cette façon
sans oublier de ne pas mélanger du mysql .... et du mysqli !
Pour savoir si il y a une erreur dans ta requête... c'est comme ça qu'il faut l'écrire :
Commence par corriger tout ça ...
pour la suite on verra.
Pour que ça marche ... il faut ecrire le code ENTRE les balies
<code php>
//Ici tu mets le code ...
//...
</code>
Ce qui donne :
//Ici tu mets le code ... //...
Cette ligne de code :
$nombre_resultats = count($resultats);
Ne peut pas fonctionner !
$resultats est un "jeu" de résultat ... pas un ARRAY.
Pour connaitre le nombre de résultats retournés par ta requête tu dois utiliser :
$nombre_resultats = mysqli_num_rows($resultats);
Celle la non plus :
while ($row = mysqli_fetch_array($resultats) or die( mysql_error())) { $dataLine.="NIGLC,,OM,,,$row[Reference],$date,31/12/2016,$row[Montant],N,,,,101\n"; }
Il faut concaténer les variables de type ARRAY de cette façon
sans oublier de ne pas mélanger du mysql .... et du mysqli !
while ($row = mysqli_fetch_array($resultats)) { $dataLine.="NIGLC,,OM,,,".$row['Reference'].",$date,31/12/2016,".$row['Montant'].",N,,,,101\n"; }
Pour savoir si il y a une erreur dans ta requête... c'est comme ça qu'il faut l'écrire :
if (! $resultats= mysqli_query($con,$rsdata)){ echo("Error :". mysqli_error($con) ); }
Commence par corriger tout ça ...
pour la suite on verra.
Oui ça marche,il génère un fichier de lot de 50 Lignes mais plusieurs plus que ce qui est dans ma BDD et une notification d'erreur entre les lot comme suit:
Cannot modify header information - headers already sent by (output started at.
donc il faut que je revois ma boucle aussi.
voici le code:
Cannot modify header information - headers already sent by (output started at.
donc il faut que je revois ma boucle aussi.
voici le code:
error_reporting(E_ALL); //connexion au serveur localhost et à la base de données $con=mysqli_connect("localhost","root","","IMPAYE"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } //compter le nombre d'enregistrements de la table $lot_courant = 0; $nombre_elements_lot = 50; do { //l'entete du fichier $columnLine=""; $contenu='Total Records*=,,,,,,,,,,,,, Total New Records*=,,,,,,,,,,,,, Total Updated Records*=,,,,,,,,,,,,, Total Deleted Records*=,,,,,,,,,,,,, Reserved Header Value,,,,,,,,,,,,, Biller ID*,Billed Customer ID,Bill Account ID*,Reference 4,Reference 5,Bill Number*,Bill Date,Bill Due Date*,Bill Amount*,Requested Operation*,Reserved 1,Reserved 2,Reserved 3,ProviderID*'; $columnLine .= $contenu; $columnLine .="\n"; //Extraire les données du contenu $rsdata="SELECT Reference ,Montant FROM tab LIMIT ${lot_courant},${nombre_elements_lot}"; //le temps des tests : //echo "<u>La requête est : </u>".$rsdata; $resultats= mysqli_query($con,$rsdata); $nombre_resultats = mysqli_num_rows($resultats); $dataLine=""; $date= date("d/m/Y"); while ($row = mysqli_fetch_array($resultats)) { $dataLine.="NIGLC,,OM,,,".$row['Reference'].",$date,31/12/2016,".$row['Montant'].",N,,,,101\n"; } if (! $resultats= mysqli_query($con,$rsdata)){ echo("Error :". mysqli_error($con) ); } $dataLine.="\n"; //Envoyer le contenu au navigateur $file="101_NIGLC_".Date('dmY_His').".csv"; header("Content-type: text/x-csv"); header("Content-Disposition: attachment; filename=".$file); echo $columnLine.$dataLine; $lot_courant++; unset($resultats); } while($nombre_resultats == $nombre_elements_lot);
Bonjour,j'ai pu avancé un peu car je ne plus la notification d'erreur précédente, je vérifié les espaces et aussi remplacer error reporting(E_ALL) par error reporting(0) .
le problème maintenant il me génère le premier lot correctement mais le deuxième lot commence par la deuxième ligne du premier lot ainsi de suite.
Cordialement
le problème maintenant il me génère le premier lot correctement mais le deuxième lot commence par la deuxième ligne du premier lot ainsi de suite.
Cordialement
Bonsoir jordane45iens,
je reviens vers vous encore,mon code me génère bien mes fichiers de lot par 50 mais sur le même fichier en décalent d'une entre les lot.
comment procédé pour qu'il me les génère fichier par fichier en utilisant la fonction split?
voici mon code:
je reviens vers vous encore,mon code me génère bien mes fichiers de lot par 50 mais sur le même fichier en décalent d'une entre les lot.
comment procédé pour qu'il me les génère fichier par fichier en utilisant la fonction split?
voici mon code:
error_reporting(0); //connexion au serveur localhost et à la base de données $con=mysqli_connect("localhost","root","","IMPAYE"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } //compter le nombre d'enregistrements de la table $lot_courant = 0; $nombre_elements_lot = 50; do{ //l'entete du fichier $columnLine=""; $contenu='Total Records*=,,,,,,,,,,,,, Total New Records*=,,,,,,,,,,,,, Total Updated Records*=,,,,,,,,,,,,, Total Deleted Records*=,,,,,,,,,,,,, Reserved Header Value,,,,,,,,,,,,, Biller ID*,Billed Customer ID,Bill Account ID*,Reference 4,Reference 5,Bill Number*,Bill Date,Bill Due Date*,Bill Amount*,Requested Operation*,Reserved 1,Reserved 2,Reserved 3,ProviderID*'; $columnLine .= $contenu; $columnLine .="\n"; //Extraire les données du contenu $rsdata="SELECT Reference ,Montant FROM tab LIMIT ${lot_courant},${nombre_elements_lot}"; //le temps des tests : //echo "<u>La requête est : </u>".$rsdata; $resultats= mysqli_query($con,$rsdata); $nombre_resultats = mysqli_num_rows($resultats); $dataLine=""; $date= date("d/m/Y"); while ($row = mysqli_fetch_array($resultats)) { $dataLine.="NIGLC,,OM,,,".$row['Reference'].",$date,31/12/2016,".$row['Montant'].",N,,,,101\n"; } if (! $resultats= mysqli_query($con,$rsdata)){ echo("Error :". mysqli_error($con) ); } $dataLine.="\n"; //Envoyer le contenu au navigateur $file="101_NIGLC_".Date('dmY_His').".csv"; header("Content-type: text/x-csv"); header("Content-Disposition: attachment; filename=".$file); echo $columnLine.$dataLine; $lot_courant = $lot_courant + 50 ; unset($resultats); } while($nombre_resultats == $nombre_elements_lot);