Stockage des données d'un formulaire php dans un fichier csv - PHP - Programmation
Marsh Posté le 17-04-2012 à 09:12:34
Utilises la balise [code] pour mettre ton code
Si j'ai bien compris, tu veux que chaque nouveau dysfonctionnement donne lieu à un fichier csv. Donc, y'aura pas de lecture dans ton IHM PHP du contenu de ces fichiers csv. Je veux dire par là que tu comptes pas te servir de ces fichiers CSV comme une pseudo BD et que tu ferais des recherche dedans. Si c'est le cas, laisse tomber, les perfs vont être désastreuses.
Par contre, si c'est juste "exporter" le contenu du formulaire en csv, ben oui, c'est bon et c'est facile à faire. par contre, ton implémentation du CSV n'est pas bonne. Déjà, y'a pas que le ; comme séparateur (mais c'est souvent celui utilisé). mais surtout, vu que ton contenu va venir d'un textarea, tu ne gère pas les \n ni l'échappement du séparateur (ben oui, il se passe quoi si l'utilisateur saisit dans son texte un .
Tu ferais mieux d'utiliser fputcsv() ( http://www.php.net/manual/fr/function.fputcsv.php ) pour générer ton csv (et fgetcsv() pour la lecture)
Marsh Posté le 17-04-2012 à 09:26:59
D'abord merci de ta réponse, (et de l'astuce pour la balise code je ne l'avais pas vu )
Alors en fait il faudrait que chaque fois qu'un formulaire est validé il aille s'enregistrer colonne par colonne (pré-définie) dans le fichier .csv mais un seul fichier, il ne faut pas en créer un a chaque fois
Et oui j'aurai voulu m'en servir comme une pseudo-base de données en récupérant les données à l'intérieur pour les réafficher (mais en non modifiable) dans un formulaire pour la réponse au dysfonctionnement. Et je précise que le .csv sera non modifiable (sauf administrateur) c'est pour ça que j'ai pensé que c'était possible.
Au pire je peux aussi juste vérifié si la colonne de description est bloquée ou pas (pour savoir si elle a déjà été utilisée et si le formulaire doit afficher la suite), mais est-ce possible ?
Si non as-tu une autre idée ? (à tout hasard )
Marsh Posté le 17-04-2012 à 09:55:59
Pourquoi tu mets pas un sgbd (qui a souvent une fonction d'export en CSV) un Mysql ou un sqlite, irait très bien...
Marsh Posté le 17-04-2012 à 10:01:33
Ben j'aimerais bien mettre un SGBD Mysql mais la c'est dans le cadre d'un stage en entreprise et je n'ai pas accès a la base de donnée parce qu'en fait l'informatique est géré par un sous-traitant de l'entreprise et mon tuteur voudrait que mon logiciel soit autonome du sous-traitant.
Mais je suis vraiment ouvert à toutes les idées ...
Si tu pense qu'il y à faire une SGBD Mysql sur un poste en serveur local je suis preneur mais il me faudra deux-trois explications (théoriquement je devrais comprendre assez vite)
Marsh Posté le 17-04-2012 à 10:09:55
Ben ton sgbd, tu le mets au tu veux. De toute manière, il te faut bien un serveur pour faire tourner ton appli php Tu peux donc mettre Mysql ou sqlite (qui a l'intérêt d'être un sgbd très léger et ou la BD est un seul fichier) dessus...
Marsh Posté le 17-04-2012 à 10:14:30
Ben j'ai jamais fait de la sgbd autre qu'à l'IUT et c'était du via psql
Donc je suppose que Mysql est peut être plus simple pour moi ?
Sinon peux-tu me donner quelques explications de comment procéder pour établir ma sgbd et l'utiliser stp ?
Marsh Posté le 17-04-2012 à 10:22:18
Ben ça dépend de quel sgbd tu vas prendre. J'ai jamais bossé avec sqlite, moi, c'est surtout avec Mysql. Mais rien de bien compliqué, surtout si t'es sous Windows. Tu télécharges l'installeur, tu l'exécutes, et hop, c'est fini. Tu peux même télécharger un WampServer qui contient apache, php et Mysql et qui te fournit un environnement prêt à être utilisé. Pour créer la BD et ses tables, ben Mysql Workbench ou phpmyadmin (fourni avec WamServer).
Pour les requêtes, Mysql support le sql standard. Pour les fonctions spécifiques, ben RTFM
Pour la connexion depuis php, y'a pleins de tutos sur le ben.
Donc rien de bien compliqué...
Marsh Posté le 17-04-2012 à 10:34:07
Ok ben je vais essayer de faire tout ça ! =)
Merci beaucoup pour tes réponses !
Si j'ai un soucis j'irais RTFM et si j'ai toujours un problème après ça je te redemanderai si tu es d'accord (en pv).
Bonne journée !
Marsh Posté le 17-04-2012 à 10:36:14
pas besoin de me contacter en pv, fait-le ici, t'auras plus de réponses (je suis au boulot, j'ai pas forcément tout le temps du temps à consacrer à ce forum)...
Marsh Posté le 17-04-2012 à 08:34:56
Bonjour à tous,
Alors comme indiqué dans le titre j'aimerai stocker les données d'un formulaire php dans un fichier .csv (.xls serait le top mais j'ai pu voir après de nombreuses recherches qu'il était visiblement plus simple de le faire dans un .csv)
Je m'explique, j'ai un projet à réaliser qui est de permettre le suivis d'éléments d'amélioration suite à des dysfonctionnements sur des chantiers.
Bref, j'ai créé des pages en PHP qui permettent l'accès à un formulaire composé de listes déroulantes, suite à la validation de ce formulaire via un bouton "submit" l'utilisateur est redirigé vers un nouveau formulaire composé lui de "textarea" afin de saisir la description du dysfonctionnement rencontré.
J'aurai besoin que les données de ces deux formulaires soient enregistrées dans un fichier.csv ou .xls qui serait déjà existant et qui s'implémenterai à chaque nouvelle saisie. Cependant le problème majeur et que je ne peux pas passer par une SGBD traditionnelle, je n'ai pas accès a la base de données de l'entreprise.
J'espère que mon problème est clair et surtout qu'il est résolvable.
PS: Il est possible qu'un topic répondre à mon problème existe mais j'ai fait de nombreuses recherches et je n'ai rien trouvé ...
Voici quelques petits bout de code:
Un code qui me permet de mettre des données dans un fichier.csv:
<?php
class FichierExcel {
private
$csv = Null;
// Cette fontion est exactement la même que la fonction insertion, mais pour un soucis de clarté je préfère la garder
// pour implanter les en-têtes de colonne
function Colonne($file) {
$this->csv.=$file."\n";
return $this->csv;
}
// Insertion des lignes dans le fichiers Excel, il faut introduire les données sous formes de chaines
// de caractères.
// Attention a séparer avec une virgule.
function Insertion($file){
$this->csv.=$file."\n";
return $this->csv;
}
// fonction de sortie du fichier avec un nom spécifique.
function output($NomFichier){
header("Content-type: application/vnd.ms-excel" );
header("Content-disposition: attachment; filename=$NomFichier.csv" );
print $this->csv;
exit;
}
}
?>
<?php
include('FichierExcel.php');
$description = $_GET['description'];
$fichier = new FichierExcel();
$fichier->Colonne("Col1;Col2;Col3" );
$fichier->Insertion("$description ;SALUT;BONJOUR" );//ici on peut faire une boucle si nécessaire.
$fichier->output('DysfonctionnementNord');
?>
Lors de l'execution de ce script le fichier.csv s'ouvre mais ne prend pas la valeur 'description' il me dit qu'elle n'est pas déclarée. ('description' est le nom de la textarea présente dans le formulaire qui exécute ce code.)
Ce code n'est là qu'à titre d'information, et les autres codes ne sont que des formulaires "basiques"
Voilà le premier formulaire composé uniquement de listes déroulantes (il n'est pas complet mais inutile de surcharger encore plus ce message) :
echo"<table>
<tr>
<td>Rédacteur : </td>
<td>
<select style=\"BACKGROUND-POSITION: left 50%; WIDTH: 200px\" name=\"redacteur\">
<option name=\"redacteur1\"> Dupont Julien </option>
<option name=\"redacteur2\"> Martin Pierre </option>
<option name=\"redacteur3\"> Hebert Dimitri </option>
</select>
</td>
<td></td>
<td>Responsable Curatif : </td>
<td>
<select style=\"BACKGROUND-POSITION: left 50%; WIDTH: 200px\" name=\"responsableCur\">
<option name=\"respCur1\"> Dupont Julien </option>
<option name=\"respCur2\"> Martin Pierre </option>
<option name=\"respCur3\"> Hebert Dimitri </option>
</select>
</td>
</tr>
<tr>
<td>Service Concerné : </td>
<td>
<select style=\"BACKGROUND-POSITION: left 50%; WIDTH: 200px\" name =\"Service\">
<option name =\"service1\"> Service1 </option>
<option name =\"service2\"> Service2 </option>
<option name =\"service3\"> Service3 </option>
</td>
<td></td>
<td>Responsable du Service : </td>
<td>
<select style=\"BACKGROUND-POSITION: left 50%; WIDTH: 200px\" name=\"responsableSer\">
<option name=\"respSer1\"> RespService1 </option>
<option name=\"respSer2\"> RespSerice2 </option>
<option name=\"respSer3\"> RespSerice3 </option>
</select>
</td>
</tr>
De plus voilà le formulaire de saisie de description :
echo"<form action =\"test.php\" method = \"get\"><table>
<tr><td>Description : </td></tr>
<div class=\"texte\">
<tr><td><textarea class=\"texte\" name\"description\" id=\"description\">Tapez votre description</textarea></td></tr>
<div>
<tr><td><input type=\"submit\" value=\"Valider\">
<input type=\"reset\" value=\"Annuler\">
</td></tr>
</table></form>";
J'espère que mon message est clair et pas trop chargé, j'ai essayé de faire au mieux afin de faciliter la lecture.
Merci d'avance à ceux qui prendront le temps de me répondre.
Scribou