plusieurs formulaire sur une page et affichage select

iruka
Invité n'ayant pas de compte PHPfrance

30 mai 2006, 09:47

Bonjour,

j ai une page de formulaire qui se compose de 3 parties (en fait plus, mais le principe est toujours le meme donc je pars sur ces 3 elements)
  • 1 deux selects
  • 2 une entree de donnee avec insertion des donnees dans la base quand on presse sur le bouton ajouter qui s affiche apres apres envoi
  • 3 une deuxieme entree du meme type que la precedente
mes soucis :

1 lorsque j ajoute les donnees 2 pour les entrer dans la table et les afficher, la selection des select ne se reaffiche pas.

2 comment faire pour entrer en dernier lieu dans la table les valeurs des selects ?

je vous mets le code allege ci dessous, si quelqu un voit comment faire...
<?php 
session_start();
include ("connexion/mysql.inc.php");
$id=$_SESSION['id'];

if(isset($_POST['conversational']))      $conversational=$_POST['conversational']; else      $conversational="";
$_SESSION['conversational'] = (isset($_POST['conversational'])) ?  $_POST['conversational'] : "";

if(isset($_POST['written']))      $written=$_POST['written']; else      $written="";
$_SESSION['written'] = (isset($_POST['written'])) ?  $_POST['written'] : "";

if(isset($_POST['testname']))      $testname=$_POST['testname']; else      $testname="";
if(isset($_POST['testscore']))      $testscore=$_POST['testscore']; else      $testscore="";
if(isset($_POST['testmonth']))      $testmonth=$_POST['testmonth']; else      $testmonth="";
if(isset($_POST['testyear']))      $testyear=$_POST['testyear']; else      $testyear="";

if(isset($_POST['otherlang']))      $otherlang=$_POST['otherlang']; else      $otherlang="";
if(isset($_POST['otherlanglevel']))      $otherlanglevel=$_POST['otherlanglevel']; else      $otherlanglevel="";

?>


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<link href="css/style.css" rel="stylesheet" title="style" type="text/css"/>
<title>staff data base </title>  
</head> 

<body>         
<h1>anglais</h1>
<p>
(1) oral&nbsp;&nbsp;
<form name="eng" method="post" action="lang.php">
<select name="conversational"> 
<option value="<?php echo $_SESSION['conversational']; ?>" selected="selected"><?php  echo $_SESSION['conversational']; ?></option>
<option value="je suis une bille">je suis une bille</option>
<option value="ca peut aller">ca peut aller</option>
</select>
</p>
<p>
(2) comphrehension ecrite&nbsp;&nbsp;

<select name="written" >
<option value="<?php echo $written; ?>" selected="selected"><?php echo $written; ?></option>
<option value="je suis une bille">je suis une bille</option>
<option value="ca peut aller">ca peut aller</option>
</select>
</p>    
<p>             
(3) test 
<input type="text" name="testname" value="<?php echo $testname;?>" size="20" style="ime-mode: active;">&nbsp;&nbsp;score:<input type="text" name="testscore" value="<?php echo $testscore;?>" size="10" style="ime-mode: disabled;">
annee d obtention :
<select name="testyear">
<option value="<?php echo $testyear; ?>" selected="selected"><?php echo $testyear; ?></option>
<option value="1930">1930</option>
<option value="2006">2006</option>
</select>
<input type="submit" name="nom"  value="ajouter">
				<input type="hidden" name="eng">
				</form>
<?php 
include ("connexion/mysql.inc.php");

if (isset($_POST['eng']))
{
// on insère les informations du formulaire dans la table 
$sql = "INSERT INTO VALUES";     
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
	  echo "<meta http-equiv='refresh' content='0; url=lang.php? ".session_id()."'>";
}

//on affiche les resultats rentrees dans la table des que le bouton submit est appuye	
$sql2 = mysql_query("SELECT * FROM  WHERE id=$id ORDER BY  DESC"); 
$total = mysql_num_rows($sql2);

if ($total >0) 
{
	echo "<form name=\"delete\" method=\"post\" action=\"lang.php\">";
	echo"<tr>";
    echo"<td colspan=\"6\" class=\"submessage\">";
    echo"  ";
    echo" </td>";
    echo" </tr>";
    echo"<tr>";
    echo"<td class=\"header\" align=\"center\"></td>";
    echo" <td class=\"header\" align=\"center\"></td>";
    echo"  <td class=\"header\" align=\"center\" width=\"80%\"></td>";
    echo"  <td class=\"header\" align=\"center\" width=\"10%\"><br/></td>";
    echo"  <td class=\"header\" align=\"center\" width=\"10%\"><br/></td>";
    echo"</tr>";
	 
 while ($donnees = mysql_fetch_array($sql2) )
 {
    echo"    <tr>";
    echo"     <td class=\"input1\">";
    echo    $donnees[''];
    echo "  </td>";
    echo"   <td class=\"input1\">";
    echo    $donnees[''];
    echo"   </td>";
    echo"   <td class=\"input1\">";
    echo    $donnees[''];
    echo"   </td>";
    echo"   <td class=\"input1\">";
    echo    $donnees[''];
    echo"   </td>";
    echo"    <td class=\"input1\">";
    echo    $donnees[''];
    echo"   </td>";
    echo"   <td class=\"input1\" align=\"center\">";
    echo"   <input type=\"checkbox\" name=\"aeffacer[]\" value=\"".$donnees['auto']."\" >";
	echo"   </td>";
    echo"   </tr>";
 } 

$effacer = (isset($_POST['aeffacer'])) ? $_POST['aeffacer']:null; 

 if (!empty($effacer)) 
 { 
  foreach($effacer as $valeur) 
  { 
    $sql2 = "DELETE FROM  WHERE auto=".$valeur."";
	$sql2=mysql_query($sql2);
  }
  echo "<meta http-equiv='refresh' content='0; url=lang.php? ".session_id()."'>";
 }
       echo"<tr>";
       echo"<td  align=\"center\"></td>";
       echo" <td  align=\"center\"></td>";
       echo"  <td  align=\"center\" width=\"80%\"></td>";
       echo"  <td  align=\"center\" width=\"10%\"><br/></td>";
       echo"  <td align=\"center\" width=\"10%\"><br/></td>";
	   echo"  <td align=\"center\">";
       echo"   <input type=\"submit\" name=\"nom\" value=\"削除\">";
       echo"   </td>";
	   echo"</form>";
       echo"   </tr>";
} 
?>
<h1>autre langues</h1>
<form name="autrelang" method="post" action="Education.php">
langue :<input type="text" name="otherlang" value="<?php echo $otherlang; ?>" size="20"style="ime-mode: active;">	 
&nbsp;niveau:
<select name="otherlanglevel">
<option value="<?php echo $otherlanglevel; ?>" selected="selected"><?php echo $otherlanglevel; ?></option>
<option value="debutant" >debutant</option>
<option value="bilingue">bilingue</option>
</select>
<input type="submit" name="nom"  value="ajouter">
<input type="hidden" name="autrelang">
</form>
					
			

               <p>
			   <form name="confirmation" method="post" action="Education.php">
                <input type="submit" name="nom"  value="envoyer">
				<input type="hidden" name="final">
				</form></p>
    </body>
</html>
merci d avance^^

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

30 mai 2006, 10:04

Je ne suis pas certain d'avoir tout compris, mais à premiere vue je dirais que c'est lié au selected :

L'attribut selected="selected" permet de selectionner l'option par défaut. Comme tu l'as placé en dur sur la premiere option, c'est toujours celle là qui est selectionné.

Il te faudrait le rendre conditionnel en fonction des valeurs envoyées
<option value="je suis une bille" <? if($_POST['conversational'] =="je suis une bille") echo 'selected="selected"'; ?>>je suis une bille</option>
...
Est-ce que ca répond à ta question ou est-ce que je suis completement à côté ?

iruka
Invité n'ayant pas de compte PHPfrance

30 mai 2006, 10:09

bonjour Ryle,

non en fait ma question ne se pose pas vraiment la.

si par exemple je selectionne 'je suis une bille' puis recharge la page avec le dernier bouton d envoi, ca sera bien 'je suis une bille' qui s affichera comme selection de base.

en fait, mon souci se situe plutot de la gestion des multiples formulaires sur une seule page.

imaginons que je choisisse 'je suis une bille' pour le premier select puis 'ca peut aller' pour le deuxieme.
ensuite je passe aux certificats que je possede (genre toefl et compagnie)
je rentre les donnees puis je les envoie avec le bouton ajouter.
la page se recharge, affiche mes donnees rentrees mais du coup les valeurs des selected ont disparu, ca reste vide. j ai essaye en mettant en session mais ca marche pas plus...

je suis desole, je suis pas tres clair je crois...

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

30 mai 2006, 10:20

Si c'est bon, j'ai compris (enfin je crois ;))

Le problème lorsque tu cliques sur le bouton submit, c'est qu'il n'envoi que le formulaire auquel il est associé, donc les autres formulaires ne sont pas envoyés et les valeurs deviennent vide puisque le isSet est faux.

Tu peux donc soit à ce moment là ne pas mettre tes valeurs en session (en fait inclure la mise en session dans le if(isSet()) ) ce qui ne modifie pas trop ton code, soit ne faire qu'un seul formulaire pour toute la page (ce qui ne devrait pas poser de problème vu que tes champs ont tous des noms différents) ce qui ne t'empêche pas d'avoir 3 boutons submit pour l'envoyer :)

IRUKA
Invité n'ayant pas de compte PHPfrance

30 mai 2006, 10:26

Le problème lorsque tu cliques sur le bouton submit, c'est qu'il n'envoi que le formulaire auquel il est associé, donc les autres formulaires ne sont pas envoyés et les valeurs deviennent vide puisque le isSet est faux.
C est ce que je m etais dit et j avais essaye avec du javascript (j y connais rien du tout en javascript donc euh...) mais sans succes....
Tu peux donc soit à ce moment là ne pas mettre tes valeurs en session (en fait inclure la mise en session dans le if(isSet()) ) ce qui ne modifie pas trop ton code,
je suis desole, je ne comprends pas exactement ?
soit ne faire qu'un seul formulaire pour toute la page (ce qui ne devrait pas poser de problème vu que tes champs ont tous des noms différents) ce qui ne t'empêche pas d'avoir 3 boutons submit pour l'envoyer
la j ai enleve les verifications des champs pour alleger le code mais si je ne fait qu un seul grand formulaire lorsque je cliquerai sur l insert 1, les messages d erreurs apparaitront pour l insert 2 non ?

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

30 mai 2006, 10:36

Pour l'histoire du isSet et de la session je pensais à quelque chose comme ceci :
if(isset($_POST['conversational'])) {
  $conversational=$_POST['conversational']; 
  $_SESSION['conversational'] = $conversational;
}
else      
  $conversational=""; 
Du coup tu ne mettrais à jour la valeur en session que lorsque celle-ci est envoyée. Si c'est un autre formulaire qui est soumis, elle ne sera pas écrasée.

Pour les insert, il faudrait effectivement modifier ton test pour qu'il controle non pas le champ hidden, mais simplement le nom du bouton submit par exemple... Tu n'es d'ailleurs même pas obligé de faire de modification au niveau du test si tu nommes tes boutons avec les noms de tes champs hidden, tu n'auras de valeur que pour celui qui est cliqué :) (les champs hidden pour les insert ne serviraient plus du coup)

iruka
Invité n'ayant pas de compte PHPfrance

30 mai 2006, 10:46

ok, donc si je fais plusieurs formulaires, je declare les variables sessions et post comme tu as indique.

sinon je ne fais qu un seul grand formulaire, je garde ma methode mais :
mais simplement le nom du bouton submit par exemple...
on peut verifier si un submit a ete envoye ?

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

30 mai 2006, 10:56

Toutafé :)

Code : Tout sélectionner

<form method="GET"> <input type="submit" name="monBouton" value="Envoyer Formulaire 1"> <input type="submit" name="monAutreBouton" value="Envoyer Formulaire 2"> </form>
<?
if(isSet($_GET['monBouton']))
  echo $_GET['monBouton'];
if(isSet($_GET['monAutreBouton']))
  echo $_GET['monAutreBouton'];
?>

iruka
Invité n'ayant pas de compte PHPfrance

30 mai 2006, 11:00

ooh, je ne savais pas! ca marche aussi avec $_post ??


bon en tout cas je vais essayer avec toutes les infos que tu m as donnees et je reviendrais poster la solution (j espere) ou le probleme contre lequel je bute !

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

30 mai 2006, 11:56

Ca marche tout pareil avec post vi :)

J'ai mis l'exemple en GET parce que ca te permet de le voir directement dans l'url également :) (qui a dit "et aussi parce que ca fait moins de lettre à taper" ?!)

iruka
Invité n'ayant pas de compte PHPfrance

30 mai 2006, 13:33

je viens d essayer sur la suite du formulaire (qui est du meme style) et donc ca marche bien en passant par un seul formulaire et en declarant les noms des submits!

seulement, la redirection de la page sur elle meme

(lorsque l on entre des donnees dans la table, les donnees saisies s affichent sans souci mais quand on les efface, il faut recharger la page au moins une fois pour que le delete soit pris en compte dans l affichage, je sais pas pourquoi)

ne permet pas de garder les valeurs des selects.... ca me remet a zero...

iruka
Invité n'ayant pas de compte PHPfrance

30 mai 2006, 13:51

hum, j ai trouve une solution pas tres honnete mais qui a l air de marcher :
echo "<script>document.requestform.submit();</script>";
au lieu de recharger la page, je lance le formulaire, ce qui me recharge la page et permet de faire disparaitre de l affichage les donnees effacees...


la question etant, qu est ce qui dans mon script fait que j ai besoin de recharger la page pour que la donnee effacee disparaisse de la page

(
pour expliquer le probleme :
j entre une donnee en appuyant sur ajouter
les donnees sont entrees dans la base
la donnee s affiche en dessous suite a une requete vers la base

j efface la donnee en cliquant sur effacer
la donnee est effacee dans la base suite a une requete

mais reste afficher sur la page
un rechargement de la page fait disparaitre cet affichage

)

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

30 mai 2006, 14:25

A vue de nez, je dirais que c'est parce que tu fais le select avant de faire le delete dans ton code, du coup il a déjà ramené l'ensemble des enregistrements avant d'aller faire la suppression en base, et travail sur les données ramenées sans se soucier du fait que certaines aient pu être éffacées depuis.
Lorsque tu actualises, il recharge la page, le select ne trouve plus les données supprimées et affiche ta page correctement. Il devrait donc normalement te suffir d'exécuter l'instruction delete avant le select pour que tout se fasse dans l'ordre sans necessiter de rechargement :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 mai 2006, 14:34

Pourquoi tu ne t'es pas inscrit "iruka", tu es bien parmi nous, non :wink: tu peux par exemple suivre l'historique de tes messages plus facilement, tu sais :idea:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

iruka
Invité n'ayant pas de compte PHPfrance

30 mai 2006, 14:40

ARGH! La je dis bravo!!

pfiou, c est baleze quand meme d avoir assimile le cheminement (logique) du programme!

j ai du boulot devant moi la...

merci beaucoup, ca fonctionne sans avoir a faire appel a des bouts de ficelle!!

(enfin j ai pas touche la page du premier post, c est une autre page qui y ressemble de tres pres donc ca devrait etre bon...enfin... j espere lol)