Page 1 sur 2
Bouton de previsualisation
Posté : 15 août 2008, 16:14
par Invité
Bonjour,
Comment avoir un bouton de prévisualisation dans un formulaire comme celui de phpfrance sans perdre les informations dans le formulaire.
Merci
Posté : 15 août 2008, 19:32
par Hywan
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.
}
Posté : 16 août 2008, 07:57
par Invité
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
Posté : 16 août 2008, 08:14
par Patriboom
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.
Posté : 16 août 2008, 08:48
par Invité
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>
Posté : 16 août 2008, 09:55
par Invité
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"]; } ?>">
Posté : 16 août 2008, 11:12
par Hywan
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

.
Posté : 16 août 2008, 18:32
par Invité
ca donne le meme resultat

Posté : 16 août 2008, 19:36
par AB
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']);
?>
Posté : 16 août 2008, 19:48
par Invité
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

Posté : 16 août 2008, 19:50
par Hywan
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
(et Hywan -1
).
Posté : 16 août 2008, 23:47
par Invité
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
Posté : 16 août 2008, 23:56
par Hywan
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().
Posté : 17 août 2008, 01:54
par Invité
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

Posté : 17 août 2008, 05:21
par AB
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.