[RESOLU] php formulaire et fichier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] php formulaire et fichier

Re: php formulaire et fichier

par Saian » 21 févr. 2020, 13:12

Super =D> j'avais pas vu l'edit de ton dernier message d'hier soir...

Re: php formulaire et fichier

par gentil_ecureuil » 21 févr. 2020, 13:08

coucou

Tout fonctionne.
J'avais un openbasedir dans les logs de mon serveur !!!

Le fichier se supprime bien tout seul!

Merci beaucoup à Saian (Mammouth du PHP)

Anne

Re: php formulaire et fichier

par gentil_ecureuil » 20 févr. 2020, 20:13

Merci pour tout
Je teste

Je viens de tester.
Tout c'est bien passé sauf
---
unlink($_SESSION['filepath']);// supprime le fichier
unset($_SESSION['filepath']);// supprime l'index de la session
// On détruit les variables de notre session
session_unset ();
// On détruit notre session
session_destroy ();
---

J'ai testé tout cela quand je reviens sur la première page.
Cela ne détruit pas le fichier

:(

Anne

Re: php formulaire et fichier

par Saian » 20 févr. 2020, 19:25

Oui étant donnée qu'on a affecté la valeur de $destinationFilepath dans $_SESSION['filepath']. C'est sur le serveur que le fichier est supprimé, c'est pas ton fichier original sur ta machine. Tu n'as pas de souci à te faire, le serveur ne peut pas accéder à ta machine.

PS : tout se passe sur le serveur si je puis dire. Ton navigateur ne fait qu'afficher la sortie du script qui est exécuté sur le serveur. Quand tu soumets un formulaire le serveur exécute le script appelé et ce dernier accède aux données soumises dont le fichier qui est bien transféré (copié) sur le serveur.

Re: php formulaire et fichier

par gentil_ecureuil » 20 févr. 2020, 19:20

Comment supprimer le fichier après le traitement?
Après la conversion il te suffit de faire un unlink et de supprimer l'index de la session :
unlink($_SESSION['filepath']);// supprime le fichier
unset($_SESSION['filepath']);// supprime l'index de la session
Cela va supprimer le fichier qui se trouve dans $destinationFilepath?

Anne

Re: php formulaire et fichier

par Saian » 20 févr. 2020, 19:12

Il faut mettre le fichier sur le serveur ou ma debian?
Sur le serveur bien entendu. Le fichier est uploadé sur le serveur et c'est suite à cet upload que tu le déplaces. C'est pour éviter que le fichier ne soit supprimé entre l'upload et la conversion.

Comment supprimer le fichier après le traitement?
Après la conversion il te suffit de faire un unlink et de supprimer l'index de la session :
unlink($_SESSION['filepath']);// supprime le fichier
unset($_SESSION['filepath']);// supprime l'index de la session

Re: php formulaire et fichier

par Saian » 20 févr. 2020, 18:57

Tu peux te contenter de le déplacer dans le répertoire où il y a ton script mais le serveur web doit avoir les droits d'écriture sur le répertoire.
Sinon y a pas grand chose à ajouter, c'est pas plus compliqué que mon explication au dessus.

EDIT
Pour pousser un peu, disons que tu vas créer un dossier csv dans le répertoire où tu as ton script.
Tu mets ce dossier en chmod 777 si tu veux pas batailler mais il est quand même mieux de faire un chown owner:group (le owner à priori est ton user centos et le group est le user du serveur web) et un chmod 775.

Lors du verif tu peux faire :
$destFilepath = 'csv/file.csv';
move_uploaded_file($_FILES['file']['tmp_name'], $destFilepath);
$_SESSION['filepath'] = $destFilepath;

Après tu n'as plus qu'à utiliser $_SESSION['filepath'] pour obtenir le path du fichier.

Re: php formulaire et fichier

par gentil_ecureuil » 20 févr. 2020, 18:54

Je viens de poster ce que j'ai récupéré avec session
J'ai bien fait session_start()

Je ne sais pas trop où mettre le fichier?
Si je mets le fichier fait avec des 'print'

Mais connaissances en php sont très limitées.

Il me faudrait un peu plus d'information sur la façon de faire.

Merci pour les infos.

Il faut mettre le fichier sur le serveur ou ma debian?
Comment supprimer le fichier après le traitement?

Merci
Anne

Re: php formulaire et fichier

par Saian » 20 févr. 2020, 18:44

Bonjour Anne, le plus simple c'est en effet d'utiliser la session. Pour utiliser la session tu ne dois pas oublier de mettre un session_start() avant toute sortie au début de chacun des fichiers devant l'utiliser.

Tu peux, lors de la soumission du premier formulaire, enregistrer le filepath du fichier dans la session et le réutiliser lors de la soumission du deuxième formulaire. Pour ça je te conseillerais de déplacer le fichier uploadé dans un autre répertoire que le répertoire temporaire d'upload.

// dans le if verif
$destinationFilepath = 'new/file/path/to/file.csv';// valeur à adapter
move_uploaded_file($_FILES['file']['tmp_name'], $destinationFilepath);
$_SESSION['filepath'] = $destinationFilepath;

// dans le if convert tu n'as plus qu'à utiliser $_SESSION['filepath']

php formulaire et fichier

par gentil_ecureuil » 20 févr. 2020, 18:34

bonjour,

Je suis nouvelle sur ce forum.
Mon ordinateur est sous debian strech
J'ai un serveur qui est basé sur centos.
.
Je ne connais pas PHP

J'essaie de transformer un fichier csv en vcf. (vcard).
C'était ok.

Mon fichier csv a la notion de catégorie
J'ai décidé de pouvoir sélectioner une ou plusieurs catégories du fichier csv.

Dans un premier temps, je sélectionne le fichier csv qui se trouve dans ma debian dans un premier formulaire.
Je valide le fichier et fais les tests pour savoir si le fichier est ok
J'affiche une fenêtre avec un autre formulaire avec un select multiple des catégories trouvées dans le fichier sélectionné.

Le problème je n'arrive pas à garder les infos du fichier sélectionné du premier formulaire dans le deuxième.

Je n'ai pas du tout le vocabulaire pour dire ce que je fais dans le deuxième formulaire

premier formulaire
----
print_html_header();
echo '<form method="post" enctype="multipart/form-data">
<label for="file">Please select your File.csv then hit convert:</label>
<input type="file" name="file" id="file" style="width: 100%;">
<br />

field selector :
<select name="$_delimiter" value="'.$delimiter.'" >
<option value="'.$comma.'" '.$select_del1.'>Comma</option>
<option value="'.$semicolon.'" '.$select_del2.' >Semicolon</option>
<option value="" '.$select_del0.' ></option>
<option value="'.$tab.'" '.$select_del3.' >Tab</option>
</select><br>

téléphone fixe :
<select name="$_telfixe" value="'.$telfixe.'" >
<option value="" '.$select_tel0.'></option>
<option value="'.$oui.'" '.$select_tel1.' >Oui</option>
<option value="'.$non.'" '.$select_tel2.' >Non</option>
</select><br />

<input type="submit" name="verif" value="selectionner la catégorie que vous voulez" style="width: 100%;">
</form>';
---

le deuxième formulaire
---
if ( isset($_REQUEST["verif"]))
{
print_html_header();
$nomFich = file($_FILES["file"]["tmp_name"]);
$length1 = count($nomFich);

// récupération des différentes catégories du fichier
$fich_tmp = $_FILES["file"]["tmp_name"];
$categorie = checkCategorie($fich_tmp,$delimiter);

echo "Fichier Vérifié <br>";
affich($_FILES["file"]["name"],$delimiter,$_FILES["file"]["size"],$telfixe);
echo "Nombre de lignes : ".$length1."<br>";
echo "Nom du fichier temporaire ".$_FILES["file"]["tmp_name"]."<br>";

echo '<form method="post" enctype="multipart/form-data">
<input type="hidden" name="$_FILES["file"]["name"]" value="'.$nomFich.'" >
<input type="hidden" name="$_delimiter" value="'.$delimiter.'" >
<input type="hidden" name="$_telfixe" value="'.$telfixe.'" >
Catégorie :
<select name = "$_categorie[]" multiple size = 6> ';
foreach($categorie as $select_cat){
echo '<option value = "'.$select_cat.'" > '.$select_cat.' </option>';
}
echo '</select>

<input type="submit" name="convert" value="convert" style="width: 100%;">
<input type="submit" name="retour" value="retour" style="width: 100%;">
</form>';
finentete();
finpage($delimiter);
}
---

Pour récupérer le fichier je fais 'convert'
----
if(isset($_REQUEST["convert"])) // detect upload of file
{
$_FILE["file"] = $_SESSION['fichier_file'];
// $filename_vcf = $_FILES["file"]["name"].".vcf";
$filename_vcf = $_SESSION['fichier_name'].".vcf";
header('Content-Type: text/vcard');
header(sprintf('Content-Disposition: attachment; filename="%s"', $filename_vcf));
// convert1($_FILES["file"]["tmp_name"],$delimiter,$telfixe,$catégorie);
convert1($_SESSION['fichier_tmp_name'],$delimiter,$telfixe,$catégorie);
exit;
}
----

J'ai essayé de mettre le fichier en 'hidden' dans le deuxième formulaire => Marche pas
J'ai essayé d'utiliser SESSION => Marche pas non plus

pour session
----
$_SESSION['fichier_name'] = $_FILES["file"]["name"];
$_SESSION['fichier_type'] = $_FILES["file"]["type"];
$_SESSION['fichier_size'] = $_FILES["file"]["size"];
$_SESSION['fichier_tmp_name'] = $_FILES["file"]["tmp_name"];
$_SESSION['fichier_file'] = $_FILES["file"];
$_SESSION['fichier_file1'] = $_FILES;
-----

Enfin pas réussi

Si quelqu'un a une idée...

Anne