Formulaire avec données modifiables

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 : Formulaire avec données modifiables

Re: Formulaire avec données modifiables

par sadeq » 25 mars 2011, 01:03

Le plaisir était pour moi. :wink:

A+

Re: Formulaire avec données modifiables

par Nesdonal » 24 mars 2011, 23:50

:? Ben voyons...!!! :?
ça a l'air si simple..!!!
je crois que grace à toi j'ai maintenant tous les éléments pour me mettre au travail !!!!
je tiens à t'adresser mes sincères remerciements pour ton "tutorat" et ta patience.
Je vais maintenant travailler pour dévelloper mon projet en essayant de faire honneur à tes conseils.
Ce Forum est vraiment tres sympa...!!
et je risque fort d'y faire encore appel...!!!!!
MERCI +++++++++ :D
MERCI +++++++++ :D

Re: Formulaire avec données modifiables

par sadeq » 24 mars 2011, 23:34

Rien de plus simple mon cher, il faut lister tous les modes d'actions qui peuvent déclencher l'affichage des boutons "Modifier" et "Supprimer" dans le teste IF correspondant. Comme ça:
<?php
    // cas où on vient de la page d'affichage des News et qu'on a demandé la modification d'une News (action='MettreAjour') => Modifier/Supprimer News
    if (isset($action) &&  in_array($action, Array("MettreAjour", "Modifier", "Supprimer")))
    {
     echo '<input name="action" type="submit" value="Modifier" /><input name="action" type="submit" value="Supprimer" />';            
    }
   else {
         // cas où aucune action préalable (affichage du formulaire par défaut) et aussi le cas où aucune mise à jour News n'est demandée => Ajouter New
        echo '<input name="action" type="submit" value="Ajouter" />';            
    }
                 

?>

Re: Formulaire avec données modifiables

par Nesdonal » 24 mars 2011, 23:22

Bonsoir, et merci..encore..!!!
je crois qu'on touche maintenant à la fin...
il reste encore un léger dysfontionnement que je ne sais résoudre..
avec ce script, qui permet de sélectionner l'affichage des boutons en fonction de l'action à réaliser.
<?php
    // cas où on vient de la page d'affichage des News et qu'on a demandé la modification d'une News (action='MettreAjour') => Modifier/Supprimer News
    if (isset($action) && $action == "MettreAjour") 
	{
        echo '<input name="action" type="submit" value="Modifier" />';            
    }
   else {
         // cas où aucune action préalable (affichage du formulaire par défaut) et aussi le cas où aucune mise à jour News n'est demandée => Ajouter New
        echo '<input name="action" type="submit" value="Ajouter" />';            
    }
		 

?>
lorsque je lélectionne dans la liste la page s'affiche bien avec juste les boutons modif, supprimer et liste,
mais lorsque je clique sur modifier, la modif se fait bien, le message "modif effectuée" s'affiche bien,
mais le bouton modifier disparait et le bouton ajouter ré apparait....ce que je ne veux surtout pas, bien sur !!
je souhaite que la page reste sur la possibilté de modifier ou de retour vers liste...

Re: Formulaire avec données modifiables

par sadeq » 24 mars 2011, 21:16

Ce comportement est normal car on n'a pas finalisé l'initialisation des variables de travail et on n'a géré que les cas où les valeurs de ces variables sont envoyées par le formulaire. La solution est de gérer aussi les cas où certaines valeurs (facultatives) ne sont pas renseignées dans le formulaire et donc non envoyées (c'est donc le cas de la variable $rep que tu signales).
Voici donc la solution: Il faut modifier le script au niveau de l'initialisation des variables en ajoutant les cas ELSE des tests IF ISSET
//Détection des paramètres GET ou POST
if (isset ($_GET['action']))    $action = $_GET['action']; else $action = null;
if (isset ($_POST['action']))   $action = $_POST['action']; else $action = null;
if (isset ($_GET['id']))                $id = $_GET['id']; else $id = null;
if (isset ($_POST['id']))               $id = $_POST['id'];  else $id = null;
if (isset ($_POST['titre']))  $titre= addslashes($_POST['titre']); else $titre = null;
if (isset ($_POST['texte']))  $texte = addslashes($_POST['texte']); else $texte = null;
if (isset ($_POST['date']))  $date = $_POST['date']; $date = null;
if (isset ($_POST['jours']))  $jours= $_POST['jours']; else $jours = null;
if (isset ($_POST['rep']))  $rep= $_POST['rep']; else $rep = null;
Ce genre d'initialisation est une méthode qu'on a l'habitude de mettre systématiquement au début d'un script de gestion d'un formulaire. Sachant qu'on peut simplifier ces écritures sous la forme suivante qu'on appelle : Affectation ternaire (ou conditionnelle)
//Détection des paramètres GET ou POST
$action =  isset ($_GET['action']) ?  $_GET['action'] :  null;
$action = isset ($_POST['action']) ?   $_POST['action'] :  null; // le POST est prioritaire
$id = isset ($_GET['id'])  ? $_GET['id'] :  null;
$id = isset ($_POST['id']) ? $_POST['id'] : null; // le POST est prioritaire
//
$titre = isset ($_POST['titre']) ? addslashes($_POST['titre']) : null;
$texte = isset ($_POST['texte']) ? addslashes($_POST['texte']) : null;
$date = isset ($_POST['date']) ? $_POST['date'] : null;
$jours = isset ($_POST['jours']) ? $_POST['jours'] : null;
$rep = isset ($_POST['rep']) ? $_POST['rep'] : null;
Cette affectation ternaire est de la forme générale:
$variable = (condition logique) ? valeur1 : valeur2;
Et ce lit: si la condition logique est vraie (?) on affecte la valeur 1, sinon (:) on affecte la valeur 2.
Avec ce genre d'affectation de valeur on est sûr qu'une variable de travail a toujours une valeur pour satisfaire les traitements du script.
A+

Re: Formulaire avec données modifiables

par Nesdonal » 24 mars 2011, 00:34

Bonsoir....
Grrrrrrrr !!
if............else........
j'aurais du y penser...!!!!! :evil:
c'est nickel.!!!
tout fonctionne parfaitement bien..
il reste cependant un petit bugg.
Je ne peux pas "ajouter" un enregistrement en laissant par le bouton radio "vide"...sans séléction oui ou non.. (Undefined variable: rep )
ce qui est embétant, car je prévois une possibilité de mise à jour ultérieure à la création ..
Pourquoi cela bug t'il lorsqu'on laisse ce champ vide..? j'ai chagé le paramétrage du champ dans ma table...idem
et je n'ai pas ce problème si je ne sélectionne rien dans la liste déroulante..?
pourquoi..?

Re: Formulaire avec données modifiables

par sadeq » 22 mars 2011, 23:55

Le problème avec ton code est que le test sur l'action=Ajouter n'est pas logique car cette action est déclenchée par le bouton Ajouter lui même, donc l'action Ajouter ne peut pas exister avant l'affichage du bouton Ajouter.

Le mieux est de dire que le bouton Ajouter doit être affiché si on est pas en mode mise à jour. C'est à dire : quand il n'y a aucune action engagée avant l'affichage du formulaire (premier affichage par défaut) C'est à dire aussi : quand on vient pas de l'action mise à jour provenant de la page d'affichage de la liste des News. Donc c'est exactement l'état contraire de l'action qui affiche les boutons "Modifier" et "Supprimer". D'où le code suivant:
<?php
    // cas où on vient de la page d'affichage des News et qu'on a demandé la modification d'une News (action='MettreAjour') => Modifier/Supprimer News
    if (isset($action) && $action == "MettreAjour") {
        echo '<input name="action" type="submit" value="Modifier" /><input name="action" type="submit" value="Supprimer" />';            
    }
   else {
         // cas où aucune action préalable (affichage du formulaire par défaut) et aussi le cas où aucune mise à jour News n'est demandée => Ajouter New
        echo '<input name="action" type="submit" value="Ajouter" />';
  }
?>
A+

Re: Formulaire avec données modifiables

par Nesdonal » 22 mars 2011, 11:14

Bonjour
donc ça fonctionne bien avec ton code pour modification..!! avec le test sur l'action mise à jour,
mais bien sur cela ne fonctionne pas avec mon code pour ajout...j'ai bien fait le test sur l'action "ajouter"..
c'est quoi le problème..?
		if (isset ($action) && $action == "Ajouter") {
	    echo '<input name="action" type="submit" value="Ajouter" />';
	
	}

Re: Formulaire avec données modifiables

par sadeq » 22 mars 2011, 01:33

Non, les boutons d'action doivent rester à leur emplacement actuel c'est à dire en bas du formulaire. Il faut simplement ajouter un teste PHP avec un IF avant d'afficher chaque bouton. comme on a fait pour le champ "hidden". En l'occurrence, un truc comme ça:
<?php 
    // cas où on vient de la page d'affichage des News et qu'on a demandé la modification d'une News (action='MettreAjour')
    if (isset($action) && $action == "MettreAjour") { 
        echo '<input name="action" type="submit" value="Modifier" /><input name="action" type="submit" value="Supprimer" />';            
    }
?>
...

Re: Formulaire avec données modifiables

par Nesdonal » 22 mars 2011, 00:27

j'ai bien testé ton conseil:
il faut tester avant l'affichage des boutons comme on a testé dans le code PHP pour détecter les actions. Par exemple, si l'action est "MettreAjour" alors on affiche simplement les boutons "Modifier" et "Supprimer" sinon on affiche le bouton "Ajouter
j'ai don essayé de déplacer le code:
<input name="action" type="submit" value="Ajouter" />
dans la partie "INSERT"...mais bien sur ce serait trop simple :(

Re: Formulaire avec données modifiables

par sadeq » 22 mars 2011, 00:13

:D courage et tenacité... :D
C'est une très bonne résolution. Je t'encourage fort de continuer comme ça :wink:

Re: Formulaire avec données modifiables

par Nesdonal » 22 mars 2011, 00:09

bonsoir.
Formidable..!!! ça marche !!!
je commence à évaluer l'ampleur du travail qui m'attend..pour réaliser mon projet ..!! :?
:D courage et tenacité... :D
il me reste la gestion des boutons
modifier invisible si acces direct pour "ajout"
et
ajouter invisible si acces par la lise "afficherNews.php"


Ps: dans ton exemple ci-dessus, la boucle FOR ne vaut que si les zones de liste (par exemple) ont le même "name"..
ce qui est difficilement réalisable dans la même page..non? car si elles ont le même nom..on ne peut pas leurs attribuer de $variale différente..

Re: Formulaire avec données modifiables

par sadeq » 21 mars 2011, 23:59

Exact moogli. Selon le standard XHTML, Merci de l'avoir rappelé.

On peut aussi faire ça avec javascript comme on a fait avec la liste déroulante, même si ça ne sert pas à grand chose pour le cas de 2 radio oui/non. Mais dans le cas de plusieurs radio ou checkbox ça peut servir. Voila, une boucle FOR peut parcourir les objets radio ayant le même "name" comme un tableau (Array) voici un exemple concret:
<form id="f1">
<p> <input type="radio" name="rep" value="1"  /> </p>
<p> <input type="radio" name="rep" value="2"  /> </p>
<p> <input type="radio" name="rep" value="3"  /> </p>
<p> <input type="radio" name="rep" value="4"  /> </p>
<p> <input type="radio" name="rep" value="5"  /> </p>
<script>
// accès au tableau rep constitué des boutons radio nommés "rep" (f1 est l'id de leur formulaire)
var tab = document.getElementById('f1').rep; 
// la valeur recherchée provient de PHP de la variable $rep
var valeurRep = <?php if (isset($rep)) echo $rep; else echo "''"; ?>;
// parcourir le tableau rep et détecter le radio dont la valeur = l'index recherché
for (i=0; i<tab.length; i++){
	if (tab[i].value == valeurRep) { 
		tab[i].checked = true; // si la valeur recherchée est trouvée on sélectionne le bouton radio
		break; // arrêter la boucle FOR car on a trouvé
	}
}
</script>
</form>

Re: Formulaire avec données modifiables

par moogli » 21 mars 2011, 23:20

Yop,

plutot checked ou checked="checked" en xhtml ;)

@+

Re: Formulaire avec données modifiables

par sadeq » 21 mars 2011, 23:06

Pour les cases à cocher "CHECKBOX" et les boutons d'options "RADIO" la propriété pour les sélectionner est ".checked" qui prend comme valeur "true" ou "false"
ça marche pas comme pour les listes déroulantes.

De ce fait le plus simple n'est pas d'utiliser javascript mais de faire une affectation de l'attribut "checked" comme on a fait pour "value" pour les zones de texte.

Voici comment:
<p>Réponse</p>
        <input type="radio" name="rep" value="1" id="oui" <?php if (isset($rep) && $rep==1) echo ' checked="true" '; ?> /> <label for="oui">Oui</label>
        <input type="radio" name="rep" value="0" id="non" <?php if (isset($rep) && $rep==0) echo ' checked="true" '; ?>/> <label for="non">Non</label>
Donc si rep égale à 1 on met checked=true pour le radio "oui" et si rep égale à 0 on met checked=true sur le radio "non"