Formulaire avec données modifiables

Eléphanteau du PHP | 18 Messages

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..?
l'intelligence est le seul outil qui permet à l'Homme de mesurer l'imensité de son malheur.(P.Desproges)
C'est en sciant que Léonard devint scie...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

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+
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 18 Messages

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...
l'intelligence est le seul outil qui permet à l'Homme de mesurer l'imensité de son malheur.(P.Desproges)
C'est en sciant que Léonard devint scie...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

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" />';            
    }
                 

?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 18 Messages

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
l'intelligence est le seul outil qui permet à l'Homme de mesurer l'imensité de son malheur.(P.Desproges)
C'est en sciant que Léonard devint scie...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 mars 2011, 01:03

Le plaisir était pour moi. :wink:

A+
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène