recuperer sous forme .csv ou pdf des informations de ma base

Petit nouveau ! | 4 Messages

18 juin 2014, 16:13

bonjour j'ai crée un applicatif ou les intervenants se connectent, ils accèdent à une page ou ils selectionnent une date de début et une date de fin avec un calcul du nombre de jour, il selectionne le projet et le client. j'ai crée un bouton exporter et je souhaiterais qu'il me permette de récuperer pour l'utilisateur qui est connecté toutes les heures qu'il a déclaré avec le nom projet et le nom du client

merci

Mammouth du PHP | 1339 Messages

18 juin 2014, 16:17

Et donc tu veux quoi un devis ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 4 Messages

18 juin 2014, 16:29

j'ai ce bout je commence en php
<?php
//include "page_membre.php";
//include "tableau.php";
//require_once "login.php";
require "connexion.php";
// Connexion à la base de données.
    $connectToDb = mysql_connect("$host", "$user", "$pass");
    // Selection de la base de données concernées.
    mysql_select_db($db);

//export
//fabrication du fichier


/* 
if (!$ID_user)
{

}*/

$user_login = $_POST['user_login'];
var_dump($user_login);
$ID_user = mysql_query("SELECT id_user FROM user WHERE nom_utilisateur = $user_login");
var_dump($ID_user);
//$queryString = "SELECT * FROM temps WHERE user_id_user = '$ID_user'";
/*$queryString = mysql_real_escape_string($queryString);
$reponse = mysql_query($queryString);
//$reponse = mysql_query('SELECT * FROM temps WHERE user_id_user= ' . $ID_user);
//$reponse = $bdd->query("SELECT * FROM temps WHERE id_user_id= $ID_user");
if (!$reponse) {
die('Requête invalide : ' . mysql_error());
}

//Afficher le résultat d'une requête*/
$f= fopen('planning.csv' ,'w');


// Liste les données de la table
// -------------------------------------------
$resQuery = mysql_query("SELECT * FROM table");

header("Content-Type: application/csv-tab-delimited-table");
header("Content-disposition: filename=table.csv");

if (mysql_num_rows($reponse) != 0) {
	// titre des colonnes
	$fields = mysql_num_fields($reponse);
	$i = 0;
	while ($i < $fields) {
		echo mysql_field_name($reponse, $i).";";
		$i++;
	}
	echo "\n";

	// données de la table
	while ($arrSelect = mysql_fetch_array($reponse, MYSQL_ASSOC)) {
		foreach($arrSelect as $elem) {
			echo "$elem;";
		}
	echo "\n";
	}
}






//$fields = array('user', 'projet', 'client', 'temps' );

/*fputcsv($f, $fields);*/

//fermeture;
fclose($f);


//recuperer le contenu
$content = file_get_contents('planning.csv');

//modifier header http
//format csv
header('Content-type: text/csv');
//force download
header('Content-Disposition: attachment; filename="planning_'.date('mY').'.csv"');

print $content;
?>
je voudrais que mon bouton export qui est dans une autre page me crée un fichier qui reprend l'utilisateur connecté les heures effectués et les projets sur lesquels il a travaillé voici ce que j'ai au final
string(7) "antoine"
bool(false)
<br />
<b>Notice</b>: Undefined variable: reponse in <b>C:\xampp\htdocs\planning\export_csv.php</b> on line <b>45</b><br />
<br />
<b>Warning</b>: mysql_num_rows() expects parameter 1 to be resource, null given in <b>C:\xampp\htdocs\planning\export_csv.php</b> on line <b>45</b><br />
Modifié en dernier par moogli le 18 juin 2014, 16:34, modifié 1 fois.
Raison : bbcode php

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juin 2014, 16:51

salut,

il faut vraiment que tu ai plus de soin quand tu code, c'est un sacré foutoirs la dedans (par exemple tu double les header ...).

Ce que tu veux faire est relativement simple.

le bouton (seule chose que contient le formulaire a priori) mène vers une page.
cette page effectue le select des information dans la base (à partir de l'id de l'utilisateur que tu stock en session).

a partir de la (il semble que tu ai déjà la requête sql) il te reste a créer le document final.

pour tu csv une simple chaîne de caractère suffit (pas besoin de mettre sa dan un fichier).
pour du PDF je t'oriente vers FPDF, TCPDF ou autre lib php à ta convenance (il y a un poste récent de albat sur le sujet).

le principe est le même dans les deux cas (csv / pdf) seule change le header et la façon de construire le document.
Ton code de façon plus réaliste
<?php

require "connexion.php";
// Connexion à la base de données.
$connectToDb = mysqli_connect($host, $user, $pass, $db);

$queryString = 'SELECT projet, client, temps FROM temps WHERE user_id_user =' . $_SESSION['id utilisateur'];
$reponse = mysqli_query($connectToDb, $queryString);

if (!$reponse) {
    die('Requête invalide : ' . mysqli_error($connectToDb)); // c'est moche ^^
}
$csv = 'user,projet,client,temps'.PHP_EOL;
while ($data = mysqli_fetch_assoc($reponse)){
    $csv = $data['projet'].','.$data['client'].','.$data['temps'].PHP_EOL;
}

//modifier header http
//format csv
header('Content-type: text/csv');
//force download
header('Content-Disposition: attachment; filename="planning_' . date('mY') . '.csv"');
header("Content-Description: File Transfer");
header('Content-Length: '.strlen($csv));

echo $csv;
flush();
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

18 juin 2014, 17:01

merci néanmoins je tombe sur ce message d'erreur :
Notice: Undefined variable: _SESSION in C:\xampp\htdocs\planning\export_csv.php on line 7
Requête invalide : 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 '' at line 1

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juin 2014, 17:27

mwé j'en doute pas, la iil te faut connaitre :
- le fonctionnement des session php
- ton appli pour récupérer correctement cette info (qui doit être en session si ce n'est pas le cas il faut l'ajouter à la connexion)


Pour info le copie coller a ces limites et tu en fait les frais :roll:

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

Petit nouveau ! | 4 Messages

19 juin 2014, 12:26

bonjour voici quelques modifications



<?php

require 'connexion.php';
// Connexion à la base de données.
$connectToDb = mysql_connect("$host", "$user", "$pass");
// Selection de la base de données concernées.
mysql_select_db($db);
//requete de selection de l'idate

$nom_user = $_POST['user_login'];

$queryUser = "SELECT id_user FROM user WHERE nom_utilisateur = '".$nom_user."'";
$id_user = mysql_query($queryUser);

$f= fopen('planning.csv' ,'w');

$queryString = "SELECT projet_id_projet, nb_jours FROM temps WHERE user_id_user = '".$id_user."'";
$reponse = mysql_query($queryString);

if (!$reponse) {
die('Requête invalide : ' . mysql_error($connectToDb));
}
/*$csv = 'user,projet,client,temps'.PHP_EOL;
while ($data = mysqli_fetch_assoc($reponse)){
$csv = $data['projet'].','.$data['client'].','.$data['temps'].PHP_EOL;
}*/
$queryString2 = "SELECT * FROM temps WHERE id_user_id = '".$id_user."'";
$reponse2 = mysql_query($queryString2);


//modifier header http



if (mysql_num_rows($reponse2) != 0) {
// titre des colonnes
$fields = mysql_num_fields($reponse2);
$i = 0;
while ($i < $fields) {
echo mysql_field_name($reponse2, $i).";";
$i++;
}
echo "\n";

// données de la table
while ($arrSelect = mysql_fetch_array($reponse2, MYSQL_ASSOC)) {
foreach($arrSelect as $elem) {
echo "$elem;";
}
echo "\n";
}
}

//fermeture;
fclose($f);


//recuperer le contenu
$content = file_get_contents('planning.csv');

//modifier header http
//format csv
header('Content-type: text/csv');
//force download
header('Content-Disposition: attachment; filename="planning_'.date('mY').'.csv"');

print $content;
/*echo $csv;*/
flush();

?>


voici mon message du fichier .csv


<br />
<b>Warning</b>: mysql_num_rows() expects parameter 1 to be resource, boolean given in <b>C:\xampp\htdocs\planning\export_csv.php</b> on line <b>36</b><br />

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juin 2014, 13:35

Requête SQL "2" foireuse.
Il fait toujors vérifier le retour mysql_query.
L'extension mysql est déprécié et sera supprimée dans une prochaine version de php il est préférable d'utiliser l'extension mysqli (comme dans mon exemple).

D'ailleurs il semble que j'ai oublié un point dans mon exemple (dans le while).

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