Page 1 sur 2

transférer un tableau pour mettre a jour ma base sql

Posté : 06 août 2014, 14:55
par kaobar
Bonjour,

Je construit un site qui permettra la gestion des stages dans mon établissement scolaire.
Tout vas plutot bien mais la je cale.

J'affiche le contenu des classes saisies dans la base SQL pour pouvoir y saisir ou modifier le nom des prof referent et principaux.

l'affichage est OK

je n'arrive pas a poster les modifications pour les récupérées et les insérer dans la base.
SEUL LE DERNIER ENREGISTREMENT SE MET A JOUR ???????????
<?php 
 session_start();
 
 require_once ('../../connexion.php');

//------------------------  gestion de connexion  --------------------------------

 if(empty($_SESSION['id_utilisateur'])) {
	  echo '<script language="Javascript"> document.location.replace("../index.php?erreur=connect"); </script>'; 
 } else { 
 
 $id_utilisateur = $_SESSION['id_utilisateur'];
 
mysql_select_db($database_dbprotect, $bdd);
  $query_users = "SELECT * FROM utilisateurs WHERE id_util = '$id_utilisateur'   "; 
  $users = mysql_query($query_users, $bdd) or die(mysql_error());
	while (	$row_users = mysql_fetch_assoc($users)) {
	
	$nom_utilisateur =  $row_users['nom'];
	$prenom_utilisateur = $row_users['prenom']; 
	$level_utilisateur = $row_users['level']; 
     }  
       }
//-----------------------------------------------------------------------------------

 if (empty($_GET['action'])) { $action = ''; } else { $action = $_GET['action']; }
 if (empty($_POST['classe'])) {$classe = "%"; } else { $classe = $_POST['classe']; }	

  ?>



<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Gestion PFMP</title>
<style type="text/css"></style>
<link href="../../css.css" rel="stylesheet" type="text/css" />
<link href="../SpryAssets/SpryMenuBarHorizontal.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.Style20 {font-size: 10px}
</style>
<script src="../SpryAssets/SpryMenuBar.js" type="text/javascript"></script>
</head>

<body>
<table width="1350" border="0" align="center">
  <tr>
    <td width="4%">&nbsp;</td>
    <td width="93%">&nbsp;</td>
    <td width="3%">&nbsp;</td>
  </tr>
  <tr>
    <td height="171">&nbsp;</td>
    <td class="header_site"><table width="100%" border="0">
      <tr>
        <td width="33%">&nbsp;</td>
        <td width="28%">&nbsp;</td>
        <td width="39%">&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td class="Style14"><?php echo $level_utilisateur ."<BR>".$prenom_utilisateur ."&nbsp;" .$nom_utilisateur; ?></td>
      </tr>
    </table></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td class="header_titre"><table width="100%" border="0">
      <tr>
        <td width="13%">&nbsp;</td>
        <td width="70%"><ul id="MenuBar1" class="MenuBarHorizontal">
<li><a href="../accueil.php">Retour Accueil</a></li>
          <li><a href="../../index.php?erreur=logout">Deconnexion</a></li>
        </ul></td>
        <td width="17%" class="sous_titre">Gestion des Classes</td>
      </tr>
    </table></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><table width="100%" border="0">
        <tr>
          <td width="12%"><img src="../../images/frise.jpg" width="130" height="613" /></td>
          <td width="84%" valign="top"><table width="100%" border="0" align="center">
              <tr>
                <td width="5%">&nbsp;</td>
                <td width="91%"><span class="Style5"><div style="width:900px; height:550px; overflow:auto; border:solid 0px black;">
                
                 
                  
                    <table width="100%" border="0" align="center">
                      <tr>
                        <td width="91%">&nbsp;</td>
                        <td width="9%">
                  </td>
                      </tr>
                    </table>
                    <p>
                    
          <form id="form1" name="form1" method="post" action="gest_classes.php?action=maj">    
            
          <input type="submit" name="button" id="button" value="Envoyer" />    
                               
                      <?php  
  
	
	$db= mysql_select_db( "gest_stages" );
	$sql = "SELECT * FROM classes WHERE classes LIKE '$classe' ORDER BY classes ASC";   

	$requete = mysql_query( $sql, $bdd ) or die( "ERREUR MYSQL num&eacute;ro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );

	echo( "<table border=\"1\"   frame=\"hsides\" rules=\"rows\" cellpadding=\"5\" cellspacing=\"0\" align=\"center\">\n" );
	echo( "<tr>

		<td width = '100'><div align=\"center\"> <b> Classe </div></td></b>
		<td width = '600'><div align=\"center\"> <b> Dipl&ocirc;me </div></td></b>
		<td width = '200'><div align=\"center\"> <b> Prof Principal </div></td></b>
		<td width = '200'><div align=\"center\"> <b> Prof R&eacute;f&eacute;rent </div></td></b>
		<td ><div align=\"center\"> <b> </div></td></b>
		

		</tr>" );
 
	while( $result = mysql_fetch_assoc( $requete ) )
	{
	echo( "<tr>\n" );
	echo( "<td><div align=\"center\">".$result["classes"]."</div></td>\n" );
	echo( "<td><div align=\"center\">".$result["titre"]."</div></td>\n" );
	echo( "<td><div align=\"center\"> <input type=\"text\" name=\"prof_prin\"id=\"prof_prin\" value = \"".$result["prof_prin"] ."\"/>"."</div></td>\n" );
	echo( "<td><div align=\"center\"> <input type=\"text\" name=\"prof_ref\"id=\"prof_ref\" value = \"".$result["prof_referent"] ."\"/>"."</div></td>\n" );
	echo( "<td><div align=\"center\"> <input type=\"text\" size=\"2\" name=\"id_classe\" id=\"id_classe\" value = \"".$result["id_classe"] ."\"/>"."</div></td>\n" );
	}
	
 	echo( "</tr>\n" );

	echo( "</table>\n" );

		?>
                    </p>
                  </form></td>
                <td width="4%" valign="top">&nbsp;</td>
              </tr>
          </table></td>
          <td width="4%">&nbsp;</td>
        </tr>
      </table></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td width="93%" valign="top" class="footer_site"><?php include("../../footer.php"); ?>      
 <br /></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
<table width="100%" border="0" cellspacing="2" cellpadding="10">
  <tr>
   
  </tr>
</table>

<table class="ds_box" cellpadding="0" cellspacing="0" id="ds_conclass" style="display: none;">
<tr><td id="ds_calclass">

</td></tr>
</table>

</body>
</html>

<?php

 //-----------------------   MAJ BDD -------------------------
if($action == "maj") {

  mysql_select_db($database_dbprotect, $bdd);
  $query_users = "SELECT count(*) AS id_classe FROM classes "; 
     $users = mysql_query($query_users, $bdd) or die(mysql_error());
	 while (	$row_users = mysql_fetch_assoc($users)) {
     $nb_classe = $row_users['id_classe']; }

 //---------------------------
	$i = 0; 
     while($i < $nb_classe) 
     { 
	$id_classe = $_POST['id_classe'];
	$prof_referent = $_POST['prof_ref'];
	$prof_prin = $_POST['prof_prin'];
	

 mysql_query (" UPDATE classes SET  prof_referent = '$prof_referent', prof_prin = '$prof_prin'
       WHERE id_classe = '$id_classe' ") ;

     $i++;
	 
/* echo '<script language="Javascript"> document.location.replace("gest_classes.php"); </script>'; 	*/
     }
     	 
}
 ?>

merci par avance pour l'aide.

Cordialement Patrice

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 06 août 2014, 19:44
par sadeq
Bonjour, il faut changer les noms des champs input pour les considérer comme tableaux en les suffixant avec 2 crochets [] et en les indexant par l'id_classe.

Comme ça par exemple :
echo( "<td><div align=\"center\"> <input type=\"text\" name=\"prof_prin[".$result["id_classe"] ."]\" id=\"prof_prin\" value = \"".$result["prof_prin"] ."\"/>"."</div></td>\n" );
echo( "<td><div align=\"center\"> <input type=\"text\" name=\"prof_ref[".$result["id_classe"] ."]\" id=\"prof_ref\" value = \"".$result["prof_referent"] ."\"/>"."</div></td>\n" );
Et dans le code de màj il faut récupérer les tableaux puis lancer l'update en boucle. comme ça :
<?php

 //-----------------------   MAJ BDD -------------------------
if($action == "maj") {

  mysql_select_db($database_dbprotect, $bdd);
  $query_users = "SELECT count(*) AS id_classe FROM classes "; 
     $users = mysql_query($query_users, $bdd) or die(mysql_error());
         while (        $row_users = mysql_fetch_assoc($users)) {
     $nb_classe = $row_users['id_classe']; }

 //---------------------------
        $i = 0; 
     while($i < $nb_classe) 
     { 
         //LES TABLEAUX SONT INDEXES PAR ID_CLASSE
        $id_classe = $_POST['id_classe'];
        $prof_referent = $_POST['prof_ref'][$id_classe];
        $prof_prin = $_POST['prof_prin'][$id_classe];
        

 mysql_query (" UPDATE classes SET  prof_referent = '$prof_referent', prof_prin = '$prof_prin'
       WHERE id_classe = '$id_classe' ") ;

     $i++;
         
/* echo '<script language="Javascript"> document.location.replace("gest_classes.php"); </script>';      */
     }
         
}
 ?>

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 07 août 2014, 11:29
par kaobar
Bonjour,

merci pour cette reponse mais cela ne fonctionne pas.

en effet voici le message d'erreur

----------------------------------------------------------------------------------------------------------------------

Code : Tout sélectionner

( ! ) Warning: Illegal offset type in E:\APP_DATA\wamp\www\Gest_PFMP_2014\fichiers\pfmp\gest_classes.php on line 212 Call Stack # Time Memory Function Location 1 0.0009 411968 {main}( ) ..\gest_classes.php:0 ( ! ) Warning: Illegal offset type in E:\APP_DATA\wamp\www\Gest_PFMP_2014\fichiers\pfmp\gest_classes.php on line 213 Call Stack # Time Memory Function Location 1 0.0009 411968 {main}( ) ..\gest_classes.php:0
----------------------------------------------------------------------------------------------------------------------

lorsque que je fait un
echo $id_classe ;
il ne s'affiche que ARRAY

cordialement

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 07 août 2014, 15:36
par xTG
Je dirais que la coquille se trouve ici :
$id_classe = $_POST['id_classe'];
Je mettrai plutôt :
$id_classe = $_POST['id_classe'][$i];
Ou bien s'il n'y a pas de trou dans les id_classe autant utiliser directement $i.

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 09:09
par kaobar
Bonjour,

j'ai essayé avec

$id_classe = $_POST['id_classe'][$i];

cela ne fonctionne pas ???

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 10:49
par sirakawa
Comme,nce donc par faire:
print_r($_POST); die();
On y verra plus clair (erreur dans le formulaire ou dans le traitement visible là)

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 11:11
par kaobar
voila le resultat

Array ( [button] => Envoyer [prof_prin] => Array ( [16] => [27] => [28] => [30] => [31] => [32] => [33] => [34] => [35] => [36] => [38] => [39] => [40] => Sébastien BINGER [41] => [42] => [37] => [43] => [29] => [44] => ) [prof_ref] => Array ( [16] => [27] => [28] => [30] => [31] => [32] => [33] => [34] => [35] => [36] => [38] => [39] => [40] => Patrice REPOSEUR [41] => [42] => [37] => [43] => [29] => [44] => ) )

apparemment ca fonctionne cote formulaire

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 11:44
par sirakawa
Trois choses m'étonnent:
que les indices commencent à 16
que les indices soient discontinus
quil n'y ait pas de id_class dans les posts
ce sont des facteurs de complication de la consultation de ces données.
en effet en utilisant un while comme tu fais tu as forcément une erreur:
$i = 0; 
      while($i < $nb_classe) 
      { 
          //LES TABLEAUX SONT INDEXES PAR ID_CLASSE
         $id_classe = $_POST['id_classe']; 
var_dump(id_classe); //serait instructif
         $prof_referent = $_POST['prof_ref'][$id_classe]; //ici il y a une erreur
         $prof_prin = $_POST['prof_prin'][$id_classe];
         

  mysql_query (" UPDATE classes SET  prof_referent = '$prof_referent', prof_prin = '$prof_prin'
        WHERE id_classe = '$id_classe' ") ;

      $i++;
          
/* echo '<script language="Javascript"> document.location.replace("gest_classes.php"); </script>';      */
      }
          
}
Quant à moi je modifierais le formulaire pour avoir en sortie un seul tableau
$classes = array ("num" =>, "princ" =>, "referent" =>);
<?PHP
$chaine = "<form method = 'post' action = 'traiter.php'>";

for ($i = 16; $i <=40; $i++)
{
$nom = "classe[$i]['classe']";
$chaine.= "<br> <input type = 'text' nama = '$nom' />";
$nom = "classe[$i]['princ']";
$chaine.= "<input type = 'text' nama = '$nom' />";
}
print "$chaine";


?>

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 13:38
par kaobar
les réponses:

les N° se crée en fonction de l'insertion dans la base de donnée. Donc ils ont commencé à 0 puis au fur et a mesure des test ajouter, effacer, ajouter on arrive a ces N°.
c'est pour cela qu'ils sont discontinus.

Pour ton script, je vois pas l'objectif etant de mettre a jour la base pas d'afficher ????

Je comprend pas .

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 13:44
par sirakawa
Parce que si j'ai bien compris, dans ta base il devrait y avoir des numéros de classes associés à des noms de prof principaux et de profs référents (horrible jargon de péda gogues comme dirait Roger Ikor).
Je suppose que le nom de chaque prof doit être saisi dans _un formulaire avant de pouvoir être transféra dans la base. C'est précisément à ça que sert le formulaire que j'ai rédigé en tenant compte de ce que je vois que tu n'as pas compris des remarques des autres.
Enfin, il existe une commande SQL: DELETE
Avec toutes mes excuses pour cette incompréhension de ma part.

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 13:59
par kaobar
non les classes existent une fois pour toutes, elles ne changent pas d'une année sur l'autre.
c'est pour cela que je ne fait qu'un update des profs prin et referent qui eux peuvent changer.

dans ma base, il y a une table classes avec toutes les classes dans laquelle je voudrais pouvoir updater les noms des profs.

pas grave...

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 14:15
par sirakawa
C'est justement ce que fait le formulaire que j'ai rédigé à condition bien sûr de l'exploiter:
version modifiée à numéros de classes fixes
<?PHP
$chaine = "<form method = 'post' action = 'traiter.php'>";

for ($i = 16; $i <=40; $i++)
{
$nom = "classe[$i]['classe']";
$chaine.= "<br>Classe <input type = 'text' readonly = 'readonly' nama = '$nom'  value = '$i' />";
$nom = "classe[$i]['princ']";
$chaine.= "principal <input type = 'text' nama = '$nom' />";
}
print "$chaine";


?>

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 14:41
par kaobar
ok mais comment ?

comme tu t'en doute je suis completement perdu.

ton code dans la reception du formulaire ?
dans la création ?

je vois pas du tout

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 14:50
par sirakawa
Tu écris traiter.php
au début
<?PHP
print_r($_POST];
?>
et tu verras que c'est tout simple.

Re: transférer un tableau pour mettre a jour ma base sql

Posté : 08 août 2014, 15:01
par kaobar
je dois être complètement stupide ou complètement perdu mais non j'y arrive pas

je laisse tomber pour le moment je vais essayer de trouver quelqu'un pour m'aider sans passer par de nombreuses et inextricable énigme.

merci beaucoup pour l'interet dont vous avez fait preuve.

Cordialement