Ouvrir formulaire selon condition

Eléphant du PHP | 71 Messages

22 juin 2011, 13:59

Bonjour,
Je suis entrain de faire une application dans j'insère et je modifie des champs de mes tables
Dans mon programme J'ai utilisé un select pour choisir la table
<select name="genre">
   <option value="livre">Ouvrage</option>
   <option value="article">Article</option>
   <option value="diplome">Memoire   </option>
 </select>
Mon problème consiste à :
- Quand je choisi la table à modifier (c à d en cliquant sur le select) je veux afficher un formulaire dans la même page

NB : Mon formulaire change selon la table choisi

Quelqu'un peux m'aider ???
Merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 juin 2011, 14:21

salut,

il "suffit" de valider le formulaire sans action (action="") ou avec PHP_SELF (enfin bref sur la même page ;) ).
pour cela nomme le bouton submit et en fonction de la valeur tu sais quel formulaire tu doit traiter / afficher

exemple
<?php
// validation du formulaire avant tout affichage, cela permet de renvoyer vers une autre page à l'aide de la fonction header
if (isset($_POST['submit'])){
// on a validé le 1er formulaire
	if ($_POST['submit'] == 'modifier livres') {
		// validation du formulaire de modification du livre
	}
	elseif ($_POST['submit'] == 'modifier article') {
		// validation 
	}
	elseif ($_POST['submit'] == 'modifier diplome') {
		// validation 
		
	}
	else {
		//message d'erreur ce cas ne doit pas ce prodiore, cela veux dire que le select a été modifié !
	}
}
?>
la le début de la page html 
<form method="post" action="">
<?php 
if (isset($_POST['submit'])){
// on a validé le 1er formulaire
	if ($_POST['submit'] == 'livres') {
		// affichage du formulaire livre
		//fin du formulaire
		echo <<<formulaire
...
 <input type="submit" name="submit" value="modifier livres" />
formulaire;
	}
	elseif ($_POST['submit'] == 'article') {
		// affichage du formulaire article
		echo <<<formulaire
...
 <input type="submit" name="submit" value="modifier article" />
formulaire;
	}
	elseif ($_POST['submit'] == 'diplome') {
		// affichage du formulaire diplome
		echo <<<formulaire
...
 <input type="submit" name="submit" value="modifier diplome" />
formulaire;
	}
	else {
		//message d'erreur ce cas ne doit pas ce prodiore, cela veux dire que le select a été modifié !
	}
}
else {
// on affiche le 1er formulaire
echo <<<formulaire
<select name="genre">
   <option value="livre">Ouvrage</option>
   <option value="article">Article</option>
   <option value="diplome">Memoire   </option>
 </select>
 <input type="submit" name="submit" value="choisir table" />
formulaire;
}
?>
</form>

fin de la page html
globalement tu peux faire ainsi, après il y a des méthodes beaucoup plus généraliste (comme récupérer la structure de la table et l'afficher dans un formulaire pour modification mais ce n'est pas toujours pertinent :)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 71 Messages

22 juin 2011, 14:54

Tous d'abord Merci pour ta réponse,
J'essaye mais J'ai pas bien compris,
Pour mieux comprendre voici mon formulaire d'insertion dans la table livres :

Code : Tout sélectionner

<form id="form1" name="form1" method="post" action=""> <p align="center">&nbsp;</p> <p align="center"><strong>Genre :</strong> <select name="genre"> <option value="livre">Ouvrage</option> <option value="article">Article</option> <option value="diplome">Memoire </option> </select> </p> <p>&nbsp;</p> <p><strong> Titre : </strong> <input name="titre" type="text" size="118" /> </p> <p><strong>Auteur(s) : </strong> <input name="auteur" type="text" size="86" /> <strong>Cote :</strong> <input name="cote" type="text" size="19" /> </p> <p><strong>Maison d'&eacute;dition :</strong> <input name="maisonE" type="text" size="50" /> <strong>Lieu d'&eacute;dition : </strong> <input name="lieuE" type="text" size="23" /> <strong>Ann&eacute;e</strong><strong> :</strong> <input name="annee" type="text" size="9" /> </p> <p>&nbsp;</p> <p>&nbsp;<strong>Illustration : </strong> <input name="illustration" type="text" size="42" /> <strong>Format :</strong> <input name="format" type="text" size="35" /> <strong>Pages :</strong> <input name="pages" type="text" size="11" /> </p> <p><strong>Collection :</strong> <input name="collection" type="text" size="47" /> <strong>ISBN :</strong> <input name="isbn" type="text" size="23" /> <strong>Inventaire :</strong> <input name="inventaire" type="text" size="15" /> </p> <p><strong>Mots Cl&eacute;s :</strong> <input name="mots" type="text" size="118" /> </p> <p><strong>Resumé : </strong> <textarea name="resume" cols="89"></textarea> </p> <p><strong>Disponibilit&eacute; : </strong> <input name="dispo" type="text" size="20" /> <strong>Image : </strong> <input name="img" type="text" size="20" /> </p> <p>&nbsp;</p> <p>    <input type="submit" value="Enregistrer" name="Submit" /> </p> </form>
1. Comment je fais la validation du formulaire de modification (du livre par exemple)
2. Pour l'affichage c ce formulaire que je dois afficher ???
Peux tu m'expliquer de plus ?? :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

22 juin 2011, 16:03

Bonjour,

Peux-tu nous donner les structures (les champs) des tables : livre, article et diplome. Pour qu'on puisse t'aider.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 71 Messages

22 juin 2011, 16:52

Pour vous aider, voici le code d'inserer un nouvelle enregistrement dans la table livres et qui marche trés bien :
<?php 

include "connexion.php";

if (isset($_POST['Submit'])) 
{
   $genre=$_POST['genre'];
Mais je veux l'afficher dans la même page
et si la table est Articles je vais changer juste les champs (c à d le formulaire)

Eléphant du PHP | 71 Messages

22 juin 2011, 17:06

Pour vous aider, voici le code d'inserer un nouvelle enregistrement dans la table livres et qui marche trés bien :

<?php 

include "connexion.php";

if (isset($_POST['Submit'])) 
{
   $genre=$_POST['genre'];

$inv=$_POST['inventaire'];
$tit=$_POST['titre'];
$aut=$_POST['auteur'];
$cot=$_POST['cote'];
$mE=$_POST['maisonE'];
$lE=$_POST['lieuE'];
$anne=$_POST['annee'];
$illus=$_POST['illustration'];
$forma=$_POST['format'];
$pag=$_POST['pages'];
$collec=$_POST['collection'];
$isbn=$_POST['isbn'];
$mot=$_POST['mots'];
$resum=$_POST['resume'];
$img=$_POST['img'];
$disp=$_POST['dispo'];


 if ($genre == 'livre') 
 {
     $sql = 'SELECT * FROM livres ';  
     $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
	 
if((empty($_POST['inventaire'])) || (empty($_POST['titre']))|| (empty($_POST['auteur'])) ||(empty($_POST['cote'])) || (empty($_POST['maisonE'])) || (empty($_POST['lieuE']))|| (empty($_POST['annee'])) ||(empty($_POST['illustration'])) || (empty($_POST['format']))|| (empty($_POST['pages']))|| (empty($_POST['collection'])) ||(empty($_POST['isbn'])) || (empty($_POST['mots']))|| (empty($_POST['resume']))|| (empty($_POST['dispo']))|| (empty($_POST['img']))  )
  { 
 ?>

 <script language="javascript"> 
alert('Vous devez remplir tous les champs');
 </script>
 <?php 

 }//Champs vides

else
         {
 $requete = "INSERT INTO livres (Titre,Auteur,Cote,Maisonedition,Dateedition,Lieuedition,Pages,Illustration,Format,Collection,Inventaire,ISBN,Mots,Resume,Image,Disponibilite) VALUES('$tit','$aut','$cot','$mE', 'lE', '$anne','$pag','$illus','$forma','$collec','$inv','$isbn','$mot','$resum','$disp','$img')";
 $result = mysql_query($requete) or exit(mysql_error().'Echec');
		 }//Fin else 
		 
 } //Fin genre = livre

}// Fin Submit
?>

Mais je veux l'afficher dans la même page
et si la table est Articles je vais changer juste les champs (c à d le formulaire)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 juin 2011, 18:17

le select sert a rien la :)

ton code reflète bien le style de ce que j'ai indiqué plus haut.

Il te faut afficher le formulaire en fonction du choix du 1er select, ensuite avec ce que j'ai mis tu a un exemple d'aiguillage :)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

23 juin 2011, 10:04

Salut,

Pour ce genre de chose tu peux simplifier le tout via un xhr en js puis afficher le formulaire souhaité via un simple button avec onclick ou lors du changement de catégorie dans le formulaire (onchange) et afficher le tout dans la div souhaité par un innerHTML ou en ajoutant des nodes dans ton script js si tu préfères mais plus long à faire.

Un exemple de bon matin...

La page html de base
<head>
    <!-- Appel du script -->
    <script src="select.js" type="text/javascript"></script>
</head>
<body>
<div>
    <!-- Le select -->
    <select id="subSection" name="subSection" onchange="importxhr.loadSection(this.id, 'divSection');">
        <option value="-1"> ---- Catégories ---- </option>
        <option value="livre">Ouvrage</option>
       <option value="article">Article</option>
       <option value="diplome">Memoire   </option>
    </select>
</div>
<!-- la div qui va recevoir le formulaire -->
<div id="divSection"></div> 
</body>
Tu peux aussi insérer un btn
<head>
    <!-- Appel du script -->
    <script src="select.js" type="text/javascript"></script>
</head>
<body>
<div>
    <!-- Le select -->
    <select id="subSection" name="subSection">
        <option value="-1"> ---- Catégories ---- </option>
        <option value="livre">Ouvrage</option>
       <option value="article">Article</option>
       <option value="diplome">Memoire   </option>
    </select>
    <!-- Bouton de validation -->
    <button onclick="importxhr.loadSection(this.id, 'divSection');" style="cursor:pointer" title="choix de catégorie">Valider</button>
</div>
<!-- la div qui va recevoir le formulaire -->
<div id="divSection"></div> 
</body>
La page select.js

Code : Tout sélectionner

// le xhr standard function getXHR() { var xhr = null; if(window.XMLHttpRequest || window.ActiveXObject) { if(window.ActiveXObject) { try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } } else { xhr = new XMLHttpRequest(); } } else { var browser = navigator.appName; if(browser == 'Netscape') { alert('Votre navigateur ne supporte pas l\'objet XMLHttpRequest.'); } else { alert('Votre navigateur ne supporte pas l\'objet ActiveXObject.'); } return null; } return xhr; } // le script var importxhr = { loadSection : function(val, balz) { var xhr = getXHR(), openForm = document.getElementById(balz); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) { openForm.innerHTML = xhr.responseText; } else if(xhr.readyState < 4) { openForm.innerHTML = 'Ouverture du fomulaire...'; } }; xhr.open('POST', 'section.php', true); // appel de la page section.php xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('valID=' + val); } };
La page section.php
<?php
// chargement des classes
function chargClass($class) {
    require $class.'.class.php';
}
spl_autoload_register('chargClass');
try {
    $section = new FormBase();
    if(isset($_POST['valID'])) {
        $section->openSection($_POST['valID']);
    }
}
catch(Exception $e) { die('Echec de la connexion et blah blah blah...'); }
?>
La class FormBase (FormBase.class.php)
<?php
    class FormBase
    {
        public function openSection($val) {
            switch ($val) {
                case 'livre':
		$this->sectionA();
		break;
                case 'article':
		$this->sectionB();
		break;
                case 'diplome':
		$this->sectionC();
		break;
            }
        }
        public function sectionA() {
            // le formulaire A
        }
        public function sectionB() {
            // le formulaire B
        }
        public function sectionC() {
            // le formulaire C
        }
    }
J'ai rien testé donc bon... mais ça peut indiquer un mode de fonctionnement assez simple pour ça sans submit.
Ah oui j'ai oublié une condition dans le js avant d'entrer dans xhr.onreadystate du genre if(val.value != '-1') { le déroulé du script; }
Bonne journée

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2011, 13:10

hum me semble bien compliqué lorsque l'on n'arrive pas réaliser la logique de base .....
Il en faut peu pour être heureux ......

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

23 juin 2011, 15:40

tu as surtout oublié de transmettre la valeur sélectionnée dans la liste car au lieu de ça tu transmet l'id. La correction:
<head>
    <!-- Appel du script -->
    <script src="select.js" type="text/javascript"></script>
</head>
<body>
<div>
    <!-- Le select -->
    <select id="subSection" name="subSection" onchange="importxhr.loadSection(this.value, 'divSection');">
        <option value="-1"> ---- Catégories ---- </option>
        <option value="livre">Ouvrage</option>
       <option value="article">Article</option>
       <option value="diplome">Memoire   </option>
    </select>
</div>
<!-- la div qui va recevoir le formulaire -->
<div id="divSection"></div>
</body>
Et pour simplifier le programme "section.php" on pourrait écrire une version non objet comme ça:
if (isset($_POST["val"])) switch ($_POST["val"]) {
                case 'livre':
                  include("formLivre.php");
                break;
                case 'article':
                include("formArticle.php");
                break;
                case 'diplome':
                include("formDiplome.php");
}
On pourrait même éviter d'utiliser Ajax et le modèle objet en transformant le programme comme ça:
programme2.php (tout en un)
<body>
<form name="form1" method="post">
    <!-- Le select -->
    <select id="categorie" name="categorie" onchange="form1.submit()" value="<?php echo isset($_POST["categorie"])?$_POST["categorie"]:null; ?>">
        <option value="-1"> ---- Catégories ---- </option>
        <option value="livre">Ouvrage</option>
       <option value="article">Article</option>
       <option value="diplome">Memoire</option>
    </select>
	<script type="text/javascript">
	    // re-sélectionner l'élèment choisi dans un post précédent
		var selectedValue = '<?php echo isset($_POST["categorie"])?$_POST["categorie"]:null; ?>';
		for(var i=0;i<document.getElementById('categorie').options.length;i++)
		{
			if (document.getElementById('categorie').options[i].value == selectedValue) 
				document.getElementById('categorie').options[i].selected = true;
		} 
	</script>	
</form>
<!-- la div qui va recevoir le formulaire -->
<div>
<?php
  //Quel formulaire afficher? tout dépend de $_POST['categorie']
  if (isset($_POST["categorie"])) switch ($_POST["categorie"]) {
                case 'livre':
                  include("formLivre.php");
                	break;
                case 'article':
                	include("formArticle.php");
                	break;
                case 'diplome':
                	include("formDiplome.php");
}
?>
</div>
</body>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Ssabrina
Invité n'ayant pas de compte PHPfrance

23 juin 2011, 16:36

salut,
Merci pour vous et j'ai trouvé la solution, qui est plus simple que j'ai cru :
if (isset($_POST['Submit'])) 
{
   $genre=$_POST['genre'];
 
   
 if ($genre == 'livre') 
 {
 ?>
 
   <table width="902" height="466" border="2" align="center">
    <tr>
      <td width="896" height="458" align="center"><form id="form1" name="form1" method="post" action="">
<p align="center">&nbsp;</p>
<p align="center">   </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong> Titre : </strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input name="titre" type="text" size="118" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;<strong>Auteur(s) : </strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input name="auteur" type="text" size="86" />
 &nbsp;&nbsp; &nbsp; <strong>Cote :</strong>
  <input name="cote" type="text" size="19" />
  &nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><strong>Maison d'&eacute;dition  :</strong>
  <input name="maisonE" type="text" size="50" />
  &nbsp;&nbsp;&nbsp;&nbsp;<strong>Lieu d'&eacute;dition : </strong>
  <input name="lieuE" type="text" size="23" />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Ann&eacute;e</strong><strong> :</strong>
  <input name="annee" type="text" size="9" />&nbsp;&nbsp;&nbsp;&nbsp;
</p>
<p>&nbsp;</p>
<p>&nbsp;<strong>Illustration : </strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input name="illustration" type="text" size="42" />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Format :</strong>
  <input name="format" type="text" size="35" />
  &nbsp;&nbsp;&nbsp;&nbsp; <strong>Pages :</strong>
  <input name="pages" type="text" size="11" />
  &nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Collection :</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input name="collection" type="text" size="47" />
  &nbsp;&nbsp;&nbsp;&nbsp; <strong>ISBN :</strong>&nbsp;
  <input name="isbn" type="text" size="23" />
  &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<strong>Inventaire :</strong>&nbsp;&nbsp;
  <input name="inventaire" type="text" size="15" />
&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><strong>Mots Cl&eacute;s  :</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input name="mots" type="text" size="118" />&nbsp;
</p>
<p>&nbsp;</p>
<p><strong>Resumé : </strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <textarea name="resume" cols="89"></textarea>   
</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;<strong>Disponibilit&eacute; : </strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input name="dispo" type="text" size="20" /> 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>Image : </strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input name="img" type="text" size="20" />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>   
  <input type="submit" value="Enregistrer"  name="Submit" />
</p>
<p>&nbsp;</p>
</form></td>
</tr>
</table>
 
 <?php 
 } //Fin if genre = livre
 
Et ça marche bien