Page 1 sur 1

load data en indiquant le nom du fichier

Posté : 16 mai 2008, 11:00
par lydie2001
Bonjour,

Je voudrais inserer mes données dans ma base via un load data en donnant le nom du fichier dans un formulaire, c'est à dire au lieu d'écrire ma requette de la sorte:
LOAD DATA LOCAL INFILE '/tahiti/gran/Desktop/fichier txt"' REPLACE INTO TABLE `client`

Je voudrais que lr nom du fichier soit entré au clavier via un formulaire et j'aurais:
LOAD DATA LOCAL INFILE '/tahiti/gran/Desktop/". $fichier ."' REPLACE INTO TABLE `client`

Mais j'avoue je ne sias pas si c'est faisable, ou existe il une autre maniére de faire?

Merci

Posté : 16 mai 2008, 11:38
par zeus
Pour répondre à ta question, je vais essayer de te faire comprendre le fonctionnement de ton script.

Tu as un script PHP qui doit exécuter une requête SQL.
En premier, ton script PHP va générer une chaine de caractère en remplaçant les variables par leur contenu.
Ensuite, cette chaine générée va être envoyée au SGBD qui va l'exécuter.

A ton avis, quelle est la chaine que va voir le SGBD, ton 1er exemple ou ton second ?

Sinon, un peu hors sujet, mais est-ce que tu sais que l'utilisateur qui va tenter de créer le fichier "/tahiti/gran/Desktop/fichier txt" est l'utilisateur mysql ... et donc qu'il va falloir faire attention à tes droits sur le répertoire "/tahiti/gran/Desktop/" ?

Posté : 16 mai 2008, 11:48
par lydie2001
J'avoue que je suis débutante en php, je crois que c'est la premiére requette qui sera interprété ,mais je ne sias pas comment faire pour charger les données d'un fichier texte (en local) dans ma base en spécifant seulement le nom du fichier via un formulaire.
Voici le code du formulaire

Code : Tout sélectionner

<html> <head> <title>ile fichier à inserer</title> </head> <body> <form name="insertion" action="insere.php" method="POST"> <table border="0" align="center" cellspacing="2" cellpadding="2"> <tr align="center"> <td>fichier</td> <td><input type="text" fichier="fichier"></td> </tr> <td colspan="2"><input type="submit" value="ins�rer"></td> </tr> </table> </form> </body> </html>
et le code php

Code : Tout sélectionner

<?php //connection au serveur $cnx = mysql_connect( "localhost", "root", "" ) ; //s�lection de la base de donn�es: $db = mysql_select_db( "bd_Multiplets" ) ; $fichier = $_POST["fichier"]; //cr�ation de la requ�te SQL: $sql ="LOAD DATA LOCAL INFILE '/tahiti/gran/Desktop/fichier .txt'' REPLACE INTO TABLE `client`"; //ex�cution de la requ�te SQL: $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ; //affichage des r�sultats, pour savoir si l'insertion a march�e: if($requete) { echo("L'insertion a �t� correctement effectu�e") ; } else { echo("L'insertion a echoue") ; } ?> Merci pour votre aide

Posté : 16 mai 2008, 12:00
par zeus
Pour continuer, je vais te donner l'algorithme à suivre dans le script exécuter à la soumission du formulaire
  1. Récupérer le nom du fichier
  2. Vérifier que fichier existe
  3. Construire ta requête en donnant le nom du fichier
  4. Exécuter la requête
Je tiens tout de même à te prévenir que si tu mets ce script dans un site public, tu ouvres une énorme faille de sécurité.
Mais j'ai dans l'idée que c'est un petit script pour toi, en local ...

Posté : 16 mai 2008, 12:14
par lydie2001
Mon probléme c'est que je ne saia pas comment formuler la requete :(

Code : Tout sélectionner

[php] $filename = $_POST["filename"]; if (file_exists($filename)) { echo "Le fichier $filename existe."; } else { echo "Le fichier $filename n'existe pas."; } [/php] // la requete????????????

Posté : 16 mai 2008, 13:46
par lydie2001
es que quelqu'un sais comment la faire cette requete :?: :lol:

Posté : 16 mai 2008, 13:49
par Cyrano
As-tu vu dans le forum FAQ le tuto sur LOAD DATA INFILE ?

Posté : 16 mai 2008, 14:19
par lydie2001
oui j'ai jeté un coup d'oeuil, mais ce n'ai pas exactement ce que je cherche .
Je sais faire un upload avec un bouton parcourir et telecharger le fichier ,mais ce que je recherche c'est que l'utilisateur tappe lui méme le nom du fichier à telcharger dans un formulaire ,je ne sais pas comment modifier ma requete
$sql ="LOAD DATA LOCAL INFILE '/tahiti/gran/Desktop/filename.txt' REPLACE INTO TABLE `client`"
je veux garder le meme chemin d'accés mais laisser le choix à l'utilisateur de choisir le nom du fichier

Posté : 16 mai 2008, 14:31
par zeus
:?

Eh bien, reprenons en détails.

Tu pars de cette requete :
$sql = "LOAD DATA LOCAL INFILE '/tahiti/gran/Desktop/fichier.txt' REPLACE INTO TABLE `client` "
Tu veux que le nom du fichier soit saisissable via un formulaire. Il faut donc que le nom devienne dynamique, via l'utilisation d'une variable.
Ta requête deviens donc
$sql = "LOAD DATA LOCAL INFILE '/tahiti/gran/Desktop/". $fichier ."' REPLACE INTO TABLE `client`"
NOTE : dans cet exemple, les fichiers devront être dans "/tahiti/gran/Desktop/"

Ensuite, tu veux que $fichier contienne le nom saisi dans le formulaire.
Il faut donc que tu récupères dans $_POST ou $_GET, tu dépends de ton formulaire, la valeur saisie par l'internaute et que tu la places dans la variable $fichier.
$fichier = $_POST['nom_fichier']; // ici, l'attribut "name" du champ input doit etre "nom_fichier" => <input type="text" name="nom_fichier" />
En prenant ce que je viens de t'apporter, en plus du code que tu viens de nous montrer, tu disposes de toutes les informations nécessaires ;)

Posté : 16 mai 2008, 14:51
par lydie2001
Voiçi mon formulaire et mon code php. quand je tappe le nom du fichier texte qui se trouve dans le meme répertoire que les deux fichiers html et php.
j'ai ce message: Le fichier n'existe pas. :?:

Code : Tout sélectionner

<html> <head> <title>insertion de donn�es en PHP :: partie 1</title> </head> <body> <form name="insertion" action="insere.php" method="POST"> <table border="0" align="center" cellspacing="2" cellpadding="2"> <tr align="center"> <td>fichier</td> <td><input type="text" fichier="nom_fichier"></td> </tr> <tr align="center"> <td colspan="2"><input type="submit" value="ins�rer"></td> </tr> </table> </form> </body> </html>
le fichier insere.php

Code : Tout sélectionner

[php] //connection au serveur $cnx = mysql_connect( "localhost", "root", "" ) ; //s�lection de la base de donn�es: $db = mysql_select_db( "bd_Multiplets" ) ; $fichier = $_POST['nom_fichier']; if (file_exists($fichier)) { $sql = "LOAD DATA LOCAL INFILE '/var/www/html/interface/essai/". $fichier ."' REPLACE INTO TABLE `client`" ; $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ; } else { echo "Le fichier $fichier n'existe pas."; } [/php]

Posté : 16 mai 2008, 15:17
par lydie2001
es que quelqu'un a une idée, j'abondonne :cry:

Posté : 16 mai 2008, 15:20
par zeus
Pour t'aider, il faut que tu commences à lire les conseils qu'on te donne.

$fichier = $_POST['nom_fichier']; // ici, l'attribut "name" du champ input doit etre "nom_fichier" => <input type="text" name="nom_fichier" />
Lit le commentaire et compare ton input au mien

EDIT
Je viens de me rendre compte qu'il y a un soucis avec le bbcode.
Voilà le commentaire qui devrait se trouver après le code que je cite juste au dessus :

Code : Tout sélectionner

// ici, l'attribut "name" du champ input doit etre "nom_fichier" => <input type="text" name="nom_fichier" />

Posté : 16 mai 2008, 15:37
par lydie2001
Parfait ça marche, merci beaucoup,merci pour votre aide :D

Posté : 16 mai 2008, 15:40
par zeus
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)