IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Modifier des enregistrements affichés dans un tableau HTML


Sujet :

Langage PHP

  1. #21
    Invité
    Invité(e)
    Par défaut
    Regarde la différence ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <?php
    include('fonctions.php');
    // connexion a la BdD
    connect();
    ?>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <head>
    	<link rel="stylesheet" media="screen" type="text/css" title="Design" href="budget_css.css" />
    	<title>Modifier une operations</title>
    </head>
    <body >
     
    <div id="formulaire">  
    	<!-- formulaire -->
    	<form name="test" action="modif_echo_op.php" method="post" >
    	<fieldset ><legend><b>Compte à modifier</b></legend>
     
    	<table border="1" style="border-collapse:collapse" align="center" width="60%">
    	<thead>
    		<tr>
    			<th>Numéro compte</th>
    			<th>Libelle</th>
    			<th>Code_cr</th>
    			<th>Montant</th>
    			<th>Date</th>
    			<th>reference</th>
    			<th>fournisseur</th>
    			<th>A modifier</th>
    		</tr>
    	</thead>
    	<tbody>
    <?php
    	// requete : operations
    	$sql = "SELECT * FROM operations;";
    	$sql_result = mysql_query($sql);
    	while($row_op_mod = mysql_fetch_array($sql_result)) 
    	{
    ?>
    		<tr>  
    			<td width="10%">
    				<input type="text" name="Num_compte[]" size="15" value="<?php echo $row_op_mod['Num_compte']; ?>" />
    			</td> 
    			<td>
    				<input type="text" name="Libelle[]" size="40"  value="<?php echo $row_op_mod['libelle']; ?>" />
    			</td> 
    			<td class="cr">
    				<input type="text" name="Code_cr[]" size="15" value="<?php echo $row_op_mod['Code_cr']; ?>" />
    			</td>  
    			<td width="10%">
    				<input type="text" name="Montant[]" size="15" value="<?php echo $row_op_mod['montant_realise']; ?>" />
    			</td>
    			<td width="10%">
    				<input type="text" name="Date[]" size="10"  value="<?php echo $row_op_mod['date_realise']; ?>" />
    			</td>
    			<td>
    				<input type="text" name="Reference[]"  value="<?php echo $row_op_mod['reference']; ?>" />
    			</td>
    			<td>
    				<input type="text" name="Fournisseur[]"  value="<?php echo $row_op_mod['fournisseur']; ?>" />
    			</td>  
    			<td>
    				<input type="checkbox" name="labox[]" value="ON" />
    				<input type="hidden" name="ID[]" value="<?php echo $row_op_mod['id_operation']; ?>" />
    			</td>
    		</tr>
    <?php
    	} // fin while
    ?>
    		<tr align="center">
    			<td colspan="3">
    				<input type="submit" name="envoiform" value="Modifier les données" />
    			</td>
    		</tr>
    	</tbody>
    	</table>
     
    	</fieldset>
    	</form>
    </div>
     
    </body>
    </html>
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?php
    include('fonctions.php');
    // connexion a la BdD
    connect();
    // LA PARTIE CI-DESSUS EST INUTILE SI le fichier est en INCLUDE dans l'autre !
    ?>
     
    <?php
    $nb_modif = 0;
    if(isset($_POST['envoiform']))  // (si le formulaire a été envoyé)
    {
    	if (isset($_POST['labox']))
    	{
    		// recuperation des checkbox (array !)
    		$array_box = $_POST['labox'];
    		print_r($array_box);
    		// on parcours l'array
    		foreach($array_box as $key => $val) {
    			// Si LA CASE EST COCHEE -> on traite les donnees
    			if($val =='ON') 
    			{ 
    				// on recupere les donnees (de la ligne correspondante)
    				$ID 			= $_POST['ID'][$key];
    				$num_compte 	= $_POST['Num_compte'][$key];
    				$libelle 		= $_POST['Libelle'][$key];
    				$code_cr 		= $_POST['Code_cr'][$key];
    				$montant 		= $_POST['Montant'][$key];
    				$date_realise 	= $_POST['Date'][$key];
    				$reference 		= $_POST['Reference'][$key];
    				$fournisseur 	= $_POST['Fournisseur'][$key];
    				// on protège la BdD contre les injections SQL
    				$ID 			= mysql_real_escape_string($ID);
    				$num_compte 	= mysql_real_escape_string($num_compte);
    				$libelle 		= mysql_real_escape_string($libelle);
    				$code_cr 		= mysql_real_escape_string($code_cr);
    				$montant 		= mysql_real_escape_string($montant);
    				$date_realise 	= mysql_real_escape_string($date_realise);
    				$reference 		= mysql_real_escape_string($reference);
    				$fournisseur 	= mysql_real_escape_string($fournisseur);
    				// on modifie l'enregistrement en BdD
    				$query_update = "UPDATE operations SET 
    								Num_compte 		= '".$num_compte."',
    								libelle 		= '".$libelle."', 
    								code_cr 		= '".$code_cr."',
    								montant_realise = '"$montant.",
    								date_realise 	= '".$date_realise."',
    								reference 		= '".$reference."',
    								fournisseur 	= '".$fournisseur."'
    								WHERE id_operation	= '".$ID."';";
    				$res_query = mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
    				if ($res_query !== false){
    				   $nb_modif = $nb_modif+1;
    				}
    			} // fin si case cochée
    		} // fin foreach
    	} // fin if labox
    	unset($POST);
    	echo 'Vous avez modifié '.$nb_modif.' lignes';
    }// fin si le formulaire envoyé
    ?>
    Un code "propre" FACILITE grandement la lecture du fichier, et son débugage ....
    Dernière modification par Invité ; 02/08/2011 à 20h16.

  2. #22
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    voilà le fichier du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <head>
     <link rel="stylesheet" media="screen" type="text/css" title="Design" href="budget_css.css" />
     <title>Modifier une operations</title>
    </head>
    <body >
     <div id="formulaire">  
     <form name="test" action ="modif_echo_op.php"  method="post" >
    <fieldset ><legend><b>Compte à modifier</b></legend>
    </br>
    <table border="1"  style="border-collapse:collapse" align="center"  width=60%>
    <tr>
    <th>Numéro compte</th>
    <th>Libelle</th>
    <th>Code_cr</th>
    <th>Montant</th>
    <th>Date</th>
    <th>reference</th>
    <th>fournisseur</th>
    <th>A modifier</th>
    </tr>
    <?php
     include('fonctions.php');
      connect();
    $sql='select * from operations';
    $sql_result=mysql_query($sql);
    while($row_op_mod=mysql_fetch_array($sql_result)) 
    {
    ?>
    <tr>  
    <td width=10%><input type="text" name="Num_compte[]" size="15" value="<?php echo $row_op_mod['Num_compte'];?>" /></td> 
    <td><input type="text" name="Libelle[]" size="40"  value="<?php echo $row_op_mod['libelle'];?>" /></td> 
    <td class="cr"><input type="text" name="Code_cr[]" size="15" value="<?php echo $row_op_mod['Code_cr'];?>" /></td>  
    <td width=10%><input type="text" name="Montant[]" size="15" value="<?php echo $row_op_mod['montant_realise'];?>" /></td>
    <td width=10%><input type="text" name="Date[]" size="10"  value="<?php echo $row_op_mod['date_realise'];?>" /></td>
    <td><input type="text" name="Reference[]"  value="<?php echo $row_op_mod['reference'];?>" /></td>
     <td><input type="text" name="Fournisseur[]"  value="<?php echo $row_op_mod['fournisseur'];?>" /></td>  
     <td><input type="checkbox" name="labox[]" value="ON" />
    <input type="hidden" name="ID[]" value="<?php echo $row_op_mod['id_operation'];?>" /></td>
    </tr>
    <?php
    }
    ?>
    <tr align="center">
    <td colspan="3"><input type="submit" name="envoiform" value="Modifier les données" /></td>
    </tr>
    </table>
    </fieldset>
    </form>
    </div>
    </body>
    </html>
    Et quand je coche 3 lignes et que je les modifies, ça m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => ON [1] => ON [2] => ON ) Vous avez modifié 3 lignes

  3. #23
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par madina Voir le message
    Et quand je coche 3 lignes et que je les modifies, ça m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => ON [1] => ON [2] => ON ) Vous avez modifié 3 lignes
    Donc, ca fonctionne, non ?

  4. #24
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour

    J'ai l'impression qu'il y a un problème de libération de ressource
    car ça fonctionnait bien quand j'ai fais 3 ou 4 premiers essais et après ça fonctionne comme avant : refuse de modifier autre que la première ligne ;

    quand je coche la dernière ligne :

    ça m'affiche : or ça devait m'afficher la clé(l'index) de la dernière ligne.

  5. #25
    Invité
    Invité(e)
    Par défaut
    c'est juste.
    Je ne sais pas quoi te dire ....

  6. #26
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    C'est en ne cochant que les checkbox de toutes les lignes que ça m'affiche tous les éléments du tableau( donc les modifie toutes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => ON [1] => ON [2] => ON )
    . J'ai 3 enregistrements

    mais si je coche une ligne intermédiaire ou la dernière, ça m'affiche toujours la première ligne .

  7. #27
    Invité
    Invité(e)
    Par défaut
    Le problème vient de la récupération de l'array $_POST['labox']
    Il ne récupère pas les index venant du formulaire, mais re-numérote systématiquement à partir de 0 ...
    ... je teste ... mais je ne comprends pas encore ...

    Pour éviter de te faire perdre du temps, je te propose une MODIFICATION importante :

    -> on se sert de id_operation comme index de ligne !
    (ligne 38) $idLigne = $row_op_mod['id_operation']; // id UNIQUE -> on s'en sert pour identifier la ligne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <?php
    include('fonctions.php');
    // connexion a la BdD
    connect();
    ?>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <head>
    	<link rel="stylesheet" media="screen" type="text/css" title="Design" href="budget_css.css" />
    	<title>Modifier une operations</title>
    </head>
    <body >
     
    <div id="formulaire">  
    	<!-- formulaire -->
    	<form name="test" action="modif_echo_op.php" method="post" >
    	<fieldset ><legend><b>Compte à modifier</b></legend>
     
    	<table border="1" style="border-collapse:collapse" align="center" width="60%">
    	<thead>
    		<tr>
    			<th>Numéro compte</th>
    			<th>Libelle</th>
    			<th>Code_cr</th>
    			<th>Montant</th>
    			<th>Date</th>
    			<th>reference</th>
    			<th>fournisseur</th>
    			<th>A modifier</th>
    		</tr>
    	</thead>
    	<tbody>
    <?php
    	// requete : operations
    	$sql = "SELECT * FROM operations;";
    	$sql_result = mysql_query($sql);
    	while($row_op_mod = mysql_fetch_array($sql_result)) 
    	{
    		$idLigne = $row_op_mod['id_operation']; // id UNIQUE -> on s'en sert pour identifier la ligne !
    ?>
    		<tr>  
    			<td width="10%">
    				<input type="text" name="Num_compte[<?php echo $idLigne; ?>]" size="15" value="<?php echo $row_op_mod['Num_compte']; ?>" />
    			</td> 
    			<td>
    				<input type="text" name="Libelle[<?php echo $idLigne; ?>]" size="40"  value="<?php echo $row_op_mod['libelle']; ?>" />
    			</td> 
    			<td class="cr">
    				<input type="text" name="Code_cr[<?php echo $idLigne; ?>]" size="15" value="<?php echo $row_op_mod['Code_cr']; ?>" />
    			</td>  
    			<td width="10%">
    				<input type="text" name="Montant[<?php echo $idLigne; ?>]" size="15" value="<?php echo $row_op_mod['montant_realise']; ?>" />
    			</td>
    			<td width="10%">
    				<input type="text" name="Date[<?php echo $idLigne; ?>]" size="10"  value="<?php echo $row_op_mod['date_realise']; ?>" />
    			</td>
    			<td>
    				<input type="text" name="Reference[<?php echo $idLigne; ?>]"  value="<?php echo $row_op_mod['reference']; ?>" />
    			</td>
    			<td>
    				<input type="text" name="Fournisseur[<?php echo $idLigne; ?>]"  value="<?php echo $row_op_mod['fournisseur']; ?>" />
    			</td>  
    			<td>
    				<input type="checkbox" name="labox[<?php echo $idLigne; ?>]" value="ON" />
    			</td>
    		</tr>
    <?php
    	} // fin while
    ?>
    		<tr align="center">
    			<td colspan="3">
    				<input type="submit" name="envoiform" value="Modifier les données" />
    			</td>
    		</tr>
    	</tbody>
    	</table>
     
    	</fieldset>
    	</form>
    </div>
     
    </body>
    </html>
    et :
    -> on récupère id_operation via $key
    (ligne 23) $ID = $key; // $key = id_operation !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?php
    include('fonctions.php');
    // connexion a la BdD
    connect();
    // LA PARTIE CI-DESSUS EST INUTILE SI le fichier est en INCLUDE dans l'autre !
    ?>
     
    <?php
    $nb_modif = 0;
    if(isset($_POST['envoiform']))  // (si le formulaire a été envoyé)
    {
    	if (isset($_POST['labox']))
    	{
    		// recuperation des checkbox (array !)
    		$array_box = $_POST['labox'];
    		print_r($array_box);
    		// on parcours l'array
    		foreach($array_box as $key => $val) {
    			// Si LA CASE EST COCHEE -> on traite les donnees
    			if($val =='ON') 
    			{ 
    				// on recupere les donnees (de la ligne correspondante)
    				$ID 			= $key; // $key = id_operation !
    				$num_compte 	= $_POST['Num_compte'][$key];
    				$libelle 		= $_POST['Libelle'][$key];
    				$code_cr 		= $_POST['Code_cr'][$key];
    				$montant 		= $_POST['Montant'][$key];
    				$date_realise 	= $_POST['Date'][$key];
    				$reference 		= $_POST['Reference'][$key];
    				$fournisseur 	= $_POST['Fournisseur'][$key];
    				// on protège la BdD contre les injections SQL
    				$ID 			= mysql_real_escape_string($ID);
    				$num_compte 	= mysql_real_escape_string($num_compte);
    				$libelle 		= mysql_real_escape_string($libelle);
    				$code_cr 		= mysql_real_escape_string($code_cr);
    				$montant 		= mysql_real_escape_string($montant);
    				$date_realise 	= mysql_real_escape_string($date_realise);
    				$reference 		= mysql_real_escape_string($reference);
    				$fournisseur 	= mysql_real_escape_string($fournisseur);
    				// on modifie l'enregistrement en BdD
    				$query_update = "UPDATE operations SET 
    								Num_compte 		= '".$num_compte."',
    								libelle 		= '".$libelle."', 
    								code_cr 		= '".$code_cr."',
    								montant_realise = '"$montant.",
    								date_realise 	= '".$date_realise."',
    								reference 		= '".$reference."',
    								fournisseur 	= '".$fournisseur."'
    								WHERE id_operation	= '".$ID."';";
    				$res_query = mysql_query($query_update) or die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());
    				if ($res_query !== false){
    				   $nb_modif = $nb_modif+1;
    				}
    			} // fin si case cochée
    		} // fin foreach
    	} // fin if labox
    	unset($POST);
    	echo 'Vous avez modifié '.$nb_modif.' lignes';
    }// fin si le formulaire envoyé
    ?>
    Là, je suis sûr que ca fonctionne.
    Dernière modification par Invité ; 02/08/2011 à 21h00.

  8. #28
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    Effectivement, le problème venait des index du checkbox. Avec les motifs, ça marche tout à fait.

    Merci jreaux62 de s'en occuper vraiment.

    ça marche nikel .

    Cordialement.

  9. #29
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par madina Voir le message
    Merci jreaux62 de s'en occuper vraiment.
    ça marche nikel .
    A ton service ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [MySQL] Affichage par php des données mysql dans un tableau html
    Par JDP91 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 17/05/2015, 09h10
  2. Réponses: 3
    Dernier message: 19/05/2014, 08h24
  3. Réponses: 2
    Dernier message: 12/04/2014, 21h45
  4. [HTML] afficher des courbes dans un tableau html ?
    Par MAJIK_ENIS dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/05/2006, 15h19
  5. [MySQL] Afficher mes données dans un tableau HTML
    Par lassmust dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 02/03/2006, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo