Bouton de previsualisation

Invité
Invité n'ayant pas de compte PHPfrance

15 août 2008, 16:14

Bonjour,

Comment avoir un bouton de prévisualisation dans un formulaire comme celui de phpfrance sans perdre les informations dans le formulaire.

Merci

ViPHP
ViPHP | 4674 Messages

15 août 2008, 19:32

Hey :),

Bah c'est pas compliqué. Au lieu d'envoyer les données en base de données, tu les envoie sur la page. Tu remets les valeurs des champs du formulaire à leur place, et c'est tout.

Pour avoir le choix entre plusieurs boutons de soumission, sache que chaque bouton comporte un nom :

Code : Tout sélectionner

<input type="submit" name="preview" value="Prévisualisation" /> <input type="submit" name="send" />
Et dans ton code PHP, tu peux faire la différence entre les deux de cette façon :
if(isset($_POST['preview']) {

    // On prévisualise le message.
}
elseif($_POST['send']) {

    // On envoie le message.
}
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Invité
Invité n'ayant pas de compte PHPfrance

16 août 2008, 07:57

HyWaN: c'est deja fait, je fais mon formulaire en php_self, alors quand je clique sur prévisualisation, je perds les données que j'ai saisit sur le formulaire

Mammouth du PHP | 881 Messages

16 août 2008, 08:14

Pour chacun des éléments de ton formulaire, il faut que tu prévois qu'ils puissent reprendre les informations. Donc, à chaque item tu remets:
<input name="Bonton1" value="<?php if(isset($_POST["Bouton1"]) { echo $_POST["Bouton1"]; } ?>">
Ton nouveau formulaire sera donc automatiquement complété avec les valeurs antérieures. Ainsi, en cliquant sur un bouton "reset", les valeurs antérieures seront assignées de nouveau au formulaire - et non pas des cases vides.
Soyez artisans de paix

Invité
Invité n'ayant pas de compte PHPfrance

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>


Invité
Invité n'ayant pas de compte PHPfrance

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"]; } ?>">

ViPHP
ViPHP | 4674 Messages

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 ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Invité
Invité n'ayant pas de compte PHPfrance

16 août 2008, 18:32

ca donne le meme resultat :(

ViPHP
AB
ViPHP | 5818 Messages

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']);

?>

Invité
Invité n'ayant pas de compte PHPfrance

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 :(

ViPHP
ViPHP | 4674 Messages

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 :().
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Invité
Invité n'ayant pas de compte PHPfrance

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

ViPHP
ViPHP | 4674 Messages

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().
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Invité
Invité n'ayant pas de compte PHPfrance

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 :)

ViPHP
AB
ViPHP | 5818 Messages

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.