Page 1 sur 1

enregistrement liste liées + autres données en même temps

Posté : 01 févr. 2012, 17:05
par orgeg
Bonjour à tous et excusez-moi par avance si un tel sujet a déjà été posté. J'ai fait plusieurs recherches sans succcès.
J'ai suivi le tutoriel de Cyrano (en javascript pour moi) faq-tutoriels/formulaires-listes-deroul ... t4562.html
Pour ces listes aucun problème. (super tutorial en passant et encore merci de ton aide )

La première liste est alimenté par ma table "maintenance_site" qui stocke mes différents sites des collaborateurs. (site_id, site_nom)
La seconde liste est alimenté par la table "maintenance_collab" ou sont mes différents collaborateurs.
Ca fonctionne très bien.

En dessous j'ai deux champs, "probleme_description" et "probleme_commentaire" qui sert aux utilisateurs pour expliquer leurs problème (je vais me faire un programme pour mon ami le php :D ).
J'ai une troisième table "maintenance_probleme" avec les 2 champs cités ci-dessus + un champ "probleme_site" et un "probleme_collab" ou je voudrais enregistrer les données venant des listes. (bien sur un id pour cette table "probleme_id")

voilà le code de ma page :
<?php

		//print_r($_POST);

		// on se connecte a MySQL 
		require_once('../adresses/connections/conn.php');
				 
		// on sélectionne la base 
		mysql_select_db(mabase,$conn) or die('Erreur de selection '.mysql_error());

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Description probl&egrave;me</title>
<!--j'ai enlevé tous les metas pour gain de place dans le code sur le forum-->
<!---->
<script type="text/javascript" src="./arrayPHP2JS.js" charset="iso_8859-1"></script> le javascript pour les listes liées
<script type="text/javascript" src="./changeDept.js" charset="iso_8859-1"></script>  le javascript pour les listes liées
<!---->
<?php
/* Requête SQL de récupération des données */
$sql = "SELECT collab_id AS idd, collab_nom AS dept, maintenance_site.site_id AS idr, site_nom ".
"FROM  maintenance_collab,  maintenance_site ".
"WHERE maintenance_collab.site_id = maintenance_site.site_id ".
"ORDER BY maintenance_site.site_id;";
/* Connexion et exécution de la requête */
if($conn != false)
{
    $choixbase = mysql_select_db($conn);
    $recherche = mysql_query($sql, $conn);
    /* Pour ne pas écraser mes tableaux, je crée un témoin */
    $temoin_r = 0;
    /* Création du tableau PHP des valeurs récupérées */
    $regions = array();
    /* Index du collaborateur par tableau site */
    $id = 0;
    while($ligne = mysql_fetch_assoc($recherche))
    {
        $r = $ligne['idr'];
        $d = $ligne['idd'];
        /* Je vérifie si je suis toujours dans la même site, sinon je crée les tableaux nécessaires */
        if($temoin_r != $r)
        {
            $regions[$r] = array();
            /* J'ajoute le site */
            $regions[$r][0] = $ligne['site_nom'];
            $regions[$r][1] = array();
            $regions[$r][2] = array();
            $temoin_r = $r;
            $id = 0;
        }
        /* J'ajoute les collaborateurs*/
        $regions[$r][1][$id] = $d;
        $regions[$r][2][$id] = $ligne['dept'];
        $id++;
    }
    /* On sérialise le tableau obtenu pour traitement par JavaScript */
    $chaine = htmlspecialchars(serialize($regions), ENT_QUOTES);
?>
<script type="text/javascript">
/* <![CDATA[ */
<!--
/*
* Ici, on transmets la chaîne sérialisée à JavaScript 
* pour la transformer en tableau indexé JavaScript 
*/
var tableau = new PhpArray2Js('<?php echo $chaine; ?>');
var tab = tableau.retour();
// -->
/* ]]> */
</script>
</head>
<body bgcolor="#FFFFFF" onload="document.form1.probleme_description.focus();">
<div align="center">
  <table id="Tableau_01" width="950" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td valign="bottom" class="fondhaut"><table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="28%">&nbsp;</td>
          <td width="69%" align="center"><h1 class="txttitre">Gestion Informatique</h1></td>
          <td width="3%">&nbsp;</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
      </table></td>
    </tr>
    <tr>
      <td class="fondcentre"><table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="245">&nbsp;</td>
          <td><table width="100%" border="0" cellspacing="0" cellpadding="10">
                <tr>
                	<td colspan="2" align="left" class="txttitre">
<br /><br /><br /><form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
  <!--<fieldset>-->
  <legend><font color="#FFFFFF">Sélectionnez d&rsquo;abord un site<br /></font></legend>
    <select name="site" id="site" onchange="changeDept(tab,this.value);">
      <option value="vide">- - - Choisissez un site - - -</option>
    <?php
    /* Construction de la première liste : on se sert du tableau PHP */
    $nbr = count($regions);
    foreach($regions as $nr => $nom)
    {
        ?>
    <option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?></option>
<?php
    }
    ?>
    </select>
    <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de
         la seconde liste déroulande -->
  <br /><br /><font color="#FFFFFF">S&eacute;lectionnez un collaborateur</font><br /><span id="blocDepartements"></span>
  <!--</fieldset>-->
</form>
<?php
}
?>
</td>
                </tr>
             <form id="form1" name="form1" method="post" action="add-maintenance.php" onsubmit="">
               <tr>
                    <td align="left" class="txtTitre" bgcolor="#909193">Description du probl&egrave;me </td>
                    <td align="left"><textarea name="individu_comment" cols="40" rows="8" id="probleme_description" class="champ"></textarea></td>
              </tr>
              <tr>
                    <td align="left" class="txtsousTitre" bgcolor="#909193">Ajouter un commentaire</td>
                    <td align="left"><textarea name="individu_comment" cols="40" rows="4" id="probleme_comment" class="champ"></textarea></td>
              </tr>
              <tr>
               		<td colspan="2" align="center" bgcolor="#909193"><input type="submit" name="button" id="button" value="Envoyer" /></td>
              </tr></form>
               <tr>
                	<td colspan="2" align="center" bgcolor="#909193">&nbsp;</td>
              </tr>
              <tr>
                	<td colspan="2" align="center" bgcolor="#909193">&nbsp;</td>
              </tr>
            </table>            
            <p>&nbsp;</p></td>
          <td width="26">&nbsp;</td>
        </tr>
      </table></td>
	  </tr>
    <tr>
      <td class="fondbas">&nbsp;</td>
  </tr>
  </table>
  <p>&nbsp;</p>
</div>
</body>
</html>

Alors je sais forcément que ce code ne peut pas fonctionner, car il y a deux <form> distincts et c'est justement mon soucis.
Ma question : comment enregistrer les données des listes + celle posté par l'utilisateur dans les champs description et commentaire dans la même table sous le même id...

Désolé pour la longueur du post mais je voulais détailler au maximum.
Merci à ceux qui pourront m'aider.

PS : je n'ai volontairement pas changé certains bout de code ou vous pouvez apercevoir changedept ou autre. Le tutoriel pour les listes concernaient des départements et des régions.

Re: enregistrement liste liées + autres données en même temp

Posté : 01 févr. 2012, 20:48
par moogli
Salut,

La question est est bête mais pourquoi tu ne reste pas dans le même le formulaire ?

Si c'est à cause de ta mise en page avec le tableau je te conseil vivement l'utilisation de méthode plus moderne et de css ;)

@+

Re: enregistrement liste liées + autres données en même temp

Posté : 01 févr. 2012, 22:41
par orgeg
Effectivement et comme me l'avait conseillé Cyrano je suis resté dans le même <form>
C'est juste qu'au départ il y avait déjà un form pour les listes liées donc je ne voyais pas trop comment faire pour mettre une action autre dans un form pour appeler ma page ou j'enregistrais mes données.
Bref, j'avais sûrement le cerveau gelé lol.

Au final voilà mon code avec l'enregistrement des données, si un jour quelqu'un a besoin de la solution, elle sera présente :
<?php

                // si je ne trouve pas de données dans probleme_description alors je rentre dans ma page
	if($_POST['probleme_description'] == "") {
		
		//voir mes données postées
                                //print_r($_POST);

		// on se connecte a MySQL 
		require_once('../adresses/connections/conn.php');
				 
		// on sélectionne la base 
		mysql_select_db(matable,$conn) or die('Erreur de selection '.mysql_error());

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Description probl&egrave;me</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<!---->
<script type="text/javascript" src="./arrayPHP2JS.js" charset="iso_8859-1"></script>
<script type="text/javascript" src="./changeDept.js" charset="iso_8859-1"></script>
<!---->
<?php
/* Requête SQL de récupération des données */
$sql = "SELECT collab_id AS idd, collab_nom AS dept, maintenance_site.site_id AS idr, site_nom ".
"FROM  maintenance_collab,  maintenance_site ".
"WHERE maintenance_collab.site_id = maintenance_site.site_id ".
"ORDER BY maintenance_site.site_id;";
/* Connexion et exécution de la requête */
if($conn != false)
{
    $choixbase = mysql_select_db($conn);
    $recherche = mysql_query($sql, $conn);
    /* Pour ne pas écraser mes tableaux, je crée un témoin */
    $temoin_r = 0;
    /* Création du tableau PHP des valeurs récupérées */
    $regions = array();
    /* Index du département par tableau régional */
    $id = 0;
    while($ligne = mysql_fetch_assoc($recherche))
    {
        $r = $ligne['idr'];
        $d = $ligne['idd'];
        /* Je vérifie si je suis toujours dans la même région, sinon je crée les tableaux nécessaires */
        if($temoin_r != $r)
        {
            $regions[$r] = array();
            /* J'ajoute les sites */
            $regions[$r][0] = $ligne['site_nom'];
            $regions[$r][1] = array();
            $regions[$r][2] = array();
            $temoin_r = $r;
            $id = 0;
        }
        /* J'ajoute les collaborateurs*/
        $regions[$r][1][$id] = $d;
        $regions[$r][2][$id] = $ligne['dept'];
        $id++;
    }
    /* On sérialise le tableau obtenu pour traitement par JavaScript */
    $chaine = htmlspecialchars(serialize($regions), ENT_QUOTES);
?>
<script type="text/javascript">
/* <![CDATA[ */
<!--
/*
* Ici, on transmets la chaîne sérialisée à JavaScript 
* pour la transformer en tableau indexé JavaScript 
*/
var tableau = new PhpArray2Js('<?php echo $chaine; ?>');
var tab = tableau.retour();
// -->
/* ]]> */
</script>
</head>
<body bgcolor="#FFFFFF" onload="document.form1.probleme_description.focus();">
<div align="center">
  <table id="Tableau_01" width="950" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td valign="bottom" class="fondhaut"><table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="28%">&nbsp;</td>
          <td width="69%" align="center"><h1 class="txttitre">Gestion Informatique</h1></td>
          <td width="3%">&nbsp;</td>
        </tr>
    </table></td>
    </tr>
    <tr>
      <td class="fondcentre"><table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="245">&nbsp;</td>
          <td><table width="100%" border="0" cellspacing="0" cellpadding="10">
          <form action="<?=($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
                <tr>
                	<td colspan="2" align="left" class="txttitre">
<br /><br /><br />
  <!--<fieldset>-->
  <legend><font color="#FFFFFF">Sélectionnez d&rsquo;abord un site<br /></font></legend>
    <select name="probleme_site" id="probleme_site" onchange="changeDept(tab,this.value);">
      <option value="vide">- - - Choisissez un site - - -</option>
    <?php
    /* Construction de la première liste : on se sert du tableau PHP */
    $nbr = count($regions);
    foreach($regions as $nr => $nom)
    {
        ?>
    <option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?></option>
<?php
    }
    ?>
    </select>
    <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de
         la seconde liste déroulande -->
  <br /><br /><font color="#FFFFFF">S&eacute;lectionnez un collaborateur</font><br /><span id="blocDepartements"></span>
  <!--</fieldset>-->
<?php
}
?>
</td>
			<td></td>
               <tr>
                    <td align="left" class="txtTitre" bgcolor="#909193">Description du probl&egrave;me </td>
                    <td align="left"><textarea name="probleme_description" cols="40" rows="8" id="probleme_description" class="champ"></textarea></td>
              </tr>
              <tr>
                    <td align="left" class="txtsousTitre" bgcolor="#909193">Ajouter un commentaire</td>
                    <td align="left"><textarea name="probleme_comment" cols="40" rows="4" id="probleme_comment" class="champ"></textarea></td>
              </tr>
              <tr>
               		<td colspan="2" align="center" bgcolor="#909193"><input type="submit" name="button" id="button" value="Envoyer" /></td>
              </tr>
              </form>
               <tr>
                	<td colspan="2" align="center" bgcolor="#909193">&nbsp;</td>
              </tr>
              <tr>
                	<td colspan="2" align="center" bgcolor="#909193">&nbsp;</td>
              </tr>
            </table>            
            <p>&nbsp;</p></td>
          <td width="26">&nbsp;</td>
        </tr>
      </table></td>
	  </tr>
    <tr>
      <td class="fondbas">&nbsp;</td>
	</tr>
  </table>
  <p>&nbsp;</p>
</div>
</body>
</html>
//une fois qu'on a cliqué sur envoyé on repasse dans le if, probleme_description n'est plus vide, on passe dans le else et on écrit dans la table en récupérant les données postées
<?php } else {
                                // on récupère les données postées

		if(isset($_POST['site_id'])) $probleme_site=$_POST['site_id'];
	                else      $site_id ="";
	
	                if(isset($_POST['collab_id'])) $probleme_collab=$_POST['collab_id'];
	                else      $collab_id ="";
	
	                if(isset($_POST['probleme_comment']))      $probleme_comment=htmlentities($_POST['probleme_comment']);
	                else      $probleme_comment ="";
	
                 	if(isset($_POST['probleme_description'])) $probleme_description=htmlentities($_POST['probleme_description']);
                 	else      $probleme_description ="";
	
                 	if(isset($_POST['probleme_comment']))      $probleme_comment=htmlentities($_POST['probleme_comment']);
                 	else      $probleme_comment ="";
	

		// on se connecte a MySQL 
		require_once('../adresses/connections/conn.php');
			 
		// on sélectionne la base 
		mysql_select_db('acaconsurthb',$conn) or die('Erreur de selection '.mysql_error());
		
		// on ecrit la requete sql 
		$sqlinsert = "INSERT INTO maintenance_probleme  (probleme_id, probleme_site, probleme_collab, probleme_description, probleme_comment)
		
		VALUES ('', '$probleme_site','$probleme_collab','$probleme_description','$probleme_comment')"; 
		//echo $sqlinsert;
		// on insere les informations du formulaire dans la table 
		mysql_query($sqlinsert) or die('Erreur SQL !'.$sqlinsert.'<br>'.mysql_error()); 
		
		//header("location: merci.php");
}
?>
Merci de vos conseils ;)

edit : je ne trouve pas de bouton pour verrouiller le sujet...

Re: enregistrement liste liées + autres données en même temp

Posté : 02 févr. 2012, 00:31
par moogli
edit : je ne trouve pas de bouton pour verrouiller le sujet...

normal tu ne peux pas ;)

par contre tu peux éditer le sujet pour ajouter [résolu] dans le sujet stp ?

@+

Re: enregistrement liste liées + autres données en même temp

Posté : 02 févr. 2012, 22:16
par orgeg
Pas de bouton éditer non plus...
Donc dernier message pour dire que le sujet est résolu :)