load data en indiquant le nom du fichier

lydie2001
Invité n'ayant pas de compte PHPfrance

16 mai 2008, 11:00

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

16 mai 2008, 11:38

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/" ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

lydie2001
Invité n'ayant pas de compte PHPfrance

16 mai 2008, 11:48

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

16 mai 2008, 12:00

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 ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

lydie2001
Invité n'ayant pas de compte PHPfrance

16 mai 2008, 12:14

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????????????

lydie2001
Invité n'ayant pas de compte PHPfrance

16 mai 2008, 13:46

es que quelqu'un sais comment la faire cette requete :?: :lol:

Mammouth du PHP | 19672 Messages

16 mai 2008, 13:49

As-tu vu dans le forum FAQ le tuto sur LOAD DATA INFILE ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

lydie2001
Invité n'ayant pas de compte PHPfrance

16 mai 2008, 14:19

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

16 mai 2008, 14:31

:?

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

lydie2001
Invité n'ayant pas de compte PHPfrance

16 mai 2008, 14:51

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]

lydie2001
Invité n'ayant pas de compte PHPfrance

16 mai 2008, 15:17

es que quelqu'un a une idée, j'abondonne :cry:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

16 mai 2008, 15:20

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" />
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

lydie2001
Invité n'ayant pas de compte PHPfrance

16 mai 2008, 15:37

Parfait ça marche, merci beaucoup,merci pour votre aide :D

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

16 mai 2008, 15:40

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 !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer