Modifier simultanément plusieurs lignes dans une BDD

Mammouth du PHP | 620 Messages

22 déc. 2011, 06:40

Bonjour,
j'ai un petit soucis pour modifier simultanément plusieurs lignes dans un base de données.
à l’époque j'avais fait un petit script mais là pour une raison que je ne comprend pas sa ne fonctionne plus (peut être une MAJ php ou je ne sais quoi ).
voici mon code, pourriez vous me dire se qui ne va pas (ou se qui ne va plus) afin que sa refonctionne à nouveau ?
  <form name="prix" method="post" action=""> 
  <div align="center">
  <table width="450px" border="1" cellspacing="0" cellpadding="0">
    <tr>
      <td bgcolor="#003399"><div align="center" class="Style1 Style1">Description</div></td>
        <td bgcolor="#003399"><div align="center" class="Style1">Tarifs HS</div></td>
        <td bgcolor="#003399"><div align="center" class="Style1">Tarifs BS</div></td>
      </tr>
    <?php

$sql="SELECT * FROM IWtarifschbr ORDER BY id ASC";
$result=mysql_query($sql);

// On compte le nombre de lignes dans la table
$count=mysql_num_rows($result);

// On fait une boucle pour lister tout ce que contient la table :
while($rows=mysql_fetch_array($result) )
{
?>
    <?php echo "<tr bgcolor=\""; echo switchcolor(); echo "\">" ?>
    <?php $Id[]=$rows['id']; ?>
    <td>
      id = <?php echo $rows['id']; ?><div align="center">    
<input name="nbrpers[]" type="text" id="nbrpers" value="<?php echo $rows['nbrpers']; ?>" size="40"> </div></td>
    <td>
      <div align="center">
        <input name="unenuit[]" type="text" id="unenuit" class="miniinput" value="<?php echo $rows['unenuit']; ?>" size="10" />
      </div></td>
    
<td>
  <div align="center">
    <input name="nuitplus[]" type="text" id="nuitplus" class="miniinput" value="<?php echo $rows['nuitplus']; ?>" size="10">
    </div></td>
    </tr> 
    <?php
}
?>
  </table>
  <input type="submit" name="Submit" value="Modifier">
    
  <?php
// Check if button name "Submit" is active, do this
if($Submit){
for($i=0;$i<$count;$i++){
$sql1="UPDATE IWtarifschbr SET nbrpers='$nbrpers[$i]', unenuit='$unenuit[$i]', nuitplus='$nuitplus[$i]' WHERE id='$Id[$i]'";

$result1=mysql_query($sql1);
}
}

if($result1)
{
	echo "ok";	
	$confirm="OK";
?>
    <script type="text/javascript">
     document.location.href="tarifs.php";
    </script>
    
<?php
}
mysql_close();
?>
    
  </div>
</form>


du coup maintenant lorsque je fais des modifications, elle ne sont pas enregistrées dans ma base de données et je ne peut donc pas modifier mes tarifs.

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

22 déc. 2011, 11:52

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

Mammouth du PHP | 620 Messages

22 déc. 2011, 12:06

Donc si je comprend bien il faut que je récupère les infos de la façon suivante ? (je viens de modifié la partie submit de mon code et sa fonctionne pas)

if($Submit){
for($i=0;$i<$count;$i++){
$chambre = $_POST['chambre[$i]'];
$description = $_POST['description[$i]'];
$tarifs = $_POST['tarifs[$i]'];


$sql1="UPDATE IWtarifsloca SET chambre='$chambre', description='$description', tarifs='$tarifs' WHERE id='$Id[$i]'";

$result1=mysql_query($sql1);

ViPHP
ViPHP | 2577 Messages

22 déc. 2011, 12:53

Bonjour,

Il y a aussi le if($Submit) à remplacer par if(isset($_POST['Submit']))
(permet de vérifier que le bouton "Submit" a été actionné)

Mammouth du PHP | 620 Messages

22 déc. 2011, 13:06

Whouaaa ! je viens de faire le remplacement et sa m'a tout effacer dans ma table ! Du coup tous mes champs sont vide maintenant et la modification ne fonctionne toujours pas plus.
voici le code tel qu'il est maintenant.
  <form name="prix" method="post" action=""> 
<?php
$sql="SELECT * FROM IWtarifsloca ORDER BY id ASC";
$result=mysql_query($sql);

// On compte le nombre de lignes dans la table
$count=mysql_num_rows($result);

// On fait une boucle pour lister tout ce que contient la table :
while($rows=mysql_fetch_array($result) )
{
?>
    <?php $Id[]=$rows['id']; ?>
     <input name="chambre[]" type="text" id="chambre" class="chambre" value="<?php echo $rows['chambre']; ?>" size="20">
     <textarea name="description[]" class="chambre" id="description" maxlength="255"><?php echo $rows['description']; ?></textarea>
     <input name="tarifs[]" type="text" id="tarifs" class="miniinput" value="<?php echo $rows['tarifs']; ?>" size="10" />
    <?php } ?>
  <input type="submit" name="Submit" value="Modifier">
    
<?php
// Check if button name "Submit" is active, do this
if(isset($_POST['Submit'])){
	for($i=0;$i<$count;$i++){
		$chambre = $_POST['chambre[$i]'];
		$description = $_POST['description[$i]'];
		$tarifs = $_POST['tarifs[$i]'];
		$sql1="UPDATE IWtarifsloca SET chambre='$chambre', description='$description', tarifs='$tarifs' WHERE id='$Id[$i]'";
		$result1=mysql_query($sql1);
	}
}

if($result1)
{
	echo "ok";	
	$confirm="OK";
?>
    <script type="text/javascript">
     document.location.href="tarifs.php";
    </script>
    
<?php } mysql_close(); ?>
HELP !

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

22 déc. 2011, 16:00

réfléchie mieux a ce que tu fait.

- la validation ne doit pas ce faire dans l'affichage.
- $ID n'est pas un tableau tu n'as qu'une seul id retourné par ligne !

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

Mammouth du PHP | 620 Messages

22 déc. 2011, 16:40

Ok c'est bon j'y suis parvenue en séparant le formulaire de la requette en 2 pages.
Merci pour votre aide.