Bouton de previsualisation

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 : Bouton de previsualisation

par Invité » 18 août 2008, 00:51

alors je pense que je ferais une previsualisation avec envoi du fichier, et si l'envoi ne se confirme pas je peux lister les fichier dans la table et chercher si les fichiers existent sinon les supprimer.

donc je peux previsualiser le fichier par son nom temporaire sur le serveur.

par AB » 17 août 2008, 18:59

Tu peux faire le téléchargement du fichier lors de la prévisualisation et lors de la confirmation directe (sans prévisualisation).
Si confirmation après prévisualisation => pas de nouvel upload.
Si annulation tu effaces le fichier du serveur.
Et si l'utilisateur a fait previsualisation, et a tourne dans sa tete de ne pas envoyer le formulaire et a ferme la page, le fichier serait dans le serveur :(
S'il tourne dans sa tête comme tu dis, normalement il devrait faire "annulation". Et s'il ne le fait pas, tu auras le même résultat (c'est à dire des fichiers ou données inutiles) que quelqu'un qui a confirmé puis qui tourne dans sa tête et ne revient plus jamais sur ton site.

Je veux dire que tu auras de toutes façons des fichiers inutiles. Alors autant en prendre son parti et imaginer des solutions pour faire le ménage de temps en temps.
Avec une tâche planifiée - une fois par semaine (ou moins) par exemple - tu peux très bien faire une requête pour récupérer la liste des fichiers images associés aux membres enregistrés, comparer cette liste avec les fichiers images présents dans le dossier où tu upload ces images et effacer les fichiers inutiles.

Bon c'est un exemple de procéder. A vrai dire je t'ai donné la façon la plus simple qui m'est passée par la tête... y'a certainement d'autres manières de faire mais comme je n'ai jamais eu à coder ce que tu veux faire exactement je ne me suis pas renseigné plus que ça sur les différentes méthodes.

par Invité » 17 août 2008, 18:11

Tu peux faire le téléchargement du fichier lors de la prévisualisation et lors de la confirmation directe (sans prévisualisation).
Si confirmation après prévisualisation => pas de nouvel upload.
Si annulation tu effaces le fichier du serveur.
Et si l'utilisateur a fait previsualisation, et a tourne dans sa tete de ne pas envoyer le formulaire et a ferme la page, le fichier serait dans le serveur :(

par Hywan » 17 août 2008, 10:53

Moi je pensais aussi à : si le fichier existe déjà, on l'écrase.
Il te suffit de faire un identifiant unique pour chaque requête, c'est pas compliqué.

par AB » 17 août 2008, 05:21

Tu peux faire le téléchargement du fichier lors de la prévisualisation et lors de la confirmation directe (sans prévisualisation).
Si confirmation après prévisualisation => pas de nouvel upload.
Si annulation tu effaces le fichier du serveur.

par Invité » 17 août 2008, 01:54

2. Soit tu affiches le fichier qui est dans le dossier temporaire du serveur, mais problème possible. Soit tu t'amuses avec move_uploaded_file().
Si je mets move_uploaded_file() dans ma previsualisation, serait un autre probleme, c'est que avec la confirmation de l'envois, il aura un message d'erreur: Fichier existe deja :)

par Hywan » 16 août 2008, 23:56

1. S'il prévisualise, le fichier sera envoyé et placé dans le temporaire du serveur. Tu peux récupérer ce chemin ($_FILES['nom']['tmp_name'] de mémoire) et le placer en session par exemple.

2. Soit tu affiches le fichier qui est dans le dossier temporaire du serveur, mais problème possible. Soit tu t'amuses avec move_uploaded_file().

par Invité » 16 août 2008, 23:47

merci pour l'explication, la j'ai 2 trucs a mentionner:

1- Quand l'utilisateur clique sur previsualiser, le champs $_FILE serait vide, comment peut on forcer l'envoi du formulaire alors que je fais un controle de if($champ =''), sachant que si l'utilisateur ne previsualise pas, il envois directement le formulaire ce champ ne doit pas etre vide,

2- Comment faire que, quand l'utilisateur clique sur previsualiser, il peut voir la photo en haut de page.

Merci

par Hywan » 16 août 2008, 19:50

AB a raison et j'ai honte … Je n'ai même pas tilté. On ne peut pas mettre la valeur d'un champ $_POST de type file. Première raison : les informations ne sont pas dans $_POST mais dans $_FILE … Seconde raison : la sécurité. On ne connaît pas l'emplacement du fichier sur le poste du client mais seulement sur le serveur (/tmp/a/b/hash).
Donc : AB +1 :pouce: (et Hywan -1 :().

par Invité » 16 août 2008, 19:48

mes champs sont deja securises:
if(isset($_POST['name']))      
$name=trim(htmlentities($_POST['name'],ENT_QUOTES));
else      $name="";
alors comme ca si un utilisateur veut poster une image, il fai la previsualisation il ne peut pas la poster sans qu'il la charge une 2eme fois :(

par AB » 16 août 2008, 19:36

Ben je crois (si mes souvenirs sont bons) que ça peut pas marcher avec un champs de type file.

Et puis tu devrais sécuriser tes echo s'ils ne sont pas sécurisés par ailleurs
<?php

if(isset($_POST['champ'])) echo htmlentites($_POST['champ']);

?>

par Invité » 16 août 2008, 18:32

ca donne le meme resultat :(

par Hywan » 16 août 2008, 11:12

Et
<input type="file" name="ma_photo" value="<?php if(isset($_POST["ma_photo"])) { echo $_POST["ma_photo"]; } ?>">
Peut devenir :
<input type="file" name="ma_photo" value="<?php echo isset($_POST['ma_photo']) ? $_POST['ma_photo'] : ''; ?>">
J'utilise une condition ternaire. C'est plus lisible ;-).

par Invité » 16 août 2008, 09:55

Le probleme est regle, juste la zone de fichier attache ne recupere pas ses informations en cas de previsualisation:
Photo: <input type="file" name="ma_photo" value="<?php if(isset($_POST["ma_photo"])) { echo $_POST["ma_photo"]; } ?>">

par Invité » 16 août 2008, 08:48

c'est bien fait avec 2 boutons un pour envoyer et l'autre pour prévisualisation, la seule chose que je veux mettre si les 2 champs sont vides, il me renvoit seulement un par un, et pas l'ensemble des champs vides:
<?

$name = isset($_POST['name']) ? $_POST['name'] : Null;
$surname = isset($_POST['surname']) ? $_POST['surname'] : Null;

if ($name=='')
{
	$erreur = "<b>pas de nom</b><br>";
}
if ($surname=='')
{
	$erreur = "<b>pas de prenom</b><br>";
}
if (!isSet($erreur))
{
if(isset($_POST['pre'])) {
		echo "voila les infos<br>";
		echo "Nom: $name<br>";
		echo "Prenom: $surname<br>";
		
	}

if(isset($_POST['send'])) {

  echo 'done<br>';
  	echo "c bon merci<br>";
		echo "Nom: $name<br>";
		echo "Prenom: $surname<br>";
}
}
else
{
	echo $erreur;

}
?>

 
<html>
<body>
<fieldset>
<legend>Envois de fichier:</legend>
<form name="leformulaire" action="<? echo $_SERVER['php_self'] ?>" method="post"> 
<label>Nom: <input name="name" value="<?php if(isset($_POST["name"])) { echo $_POST["name"]; } ?>"> </label><br>
<label>Prenom: <input name="surname" type="text" length="20" value="<?php if(isset($_POST["surname"])) { echo $_POST["surname"]; } ?>"></label><br>
<input type="submit" name="send" value="Go">
<input type="submit" name="pre" value="prev">
</form>
</fieldset>
</body>
</html>