Problème de script qui modifie plusieurs lignes dans BDD

Eléphant du PHP | 81 Messages

31 oct. 2006, 11:07

Bonjour à tous,

J’ai fait un script qui me permet de modifier des informations stockées dans ma base de données (Une ligne de ma Base de données contient à chaque fois : Nom, Prénom, Adresse, etc.).
Mon souci c’est que je n’arrive pas à changer plusieurs lignes à la fois.
Si j’affiche par exemple 2 clients en même temps et que je change des infos les concernant, mon script ne prend en compte que le dernier client affiché.
En fait je ne récupère, sur ma page qui modifie les infos, que la dernière ligne.
Je pense qu’il faut faire un tableau associatif, mais je ne sais pas comment faire.

Voici un bout de mon code pour modifier ma base :
<?php session_start();
include('gestion_login.php');//verifie à chaque fois le login et password

$num=$_POST['Num'];

$Nr=trim(strtoupper($_POST["Nom_stagiaire"]));
$P=trim(ucfirst(strtolower($_POST["Prenom"])));
$T=$_POST['Tel'];
$Tbis=$_POST['Telbis'];
$A=$_POST['Adresse'];
$V=trim(ucfirst(strtolower($_POST["Ville"])));
$C=$_POST['Cp'];
$E=$_POST['Email'];
$Pwd=$_POST['Pwd'];
$date_d=$_POST['date_d'];
$date_f=$_POST['date_f'];
$saison=$_POST['saison'];


$r=" update clients set Nom_stagiaire='$Nr', Prenom='$P',
Tel='$T', Telbis='$Tbis', Adresse='$A', Ville='$V', Cp='$C', Email='$E', Pwd='$Pwd',
Date_debut='$date_d', Date_fin='$date_f', Saison='$saison' where Num='$num' ";
$rq=mysql_query($r);

mysql_close();
?>
<html>
<head>
<title>Admin</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link type="text/css" href="css/stylesheet.css" rel="stylesheet"/>
</head>

<body bgcolor="#FFFFFF" text="#000000">
<div id="content">
    <h2>Modification</h2>
<div id="contenu">
      <div id="general">

      <p><? echo "Vos modifications ont été prises en compte"; ?></p>

      </div>
      </div>
      </div>
</body>
</html>
Merci pour votre aide.
Pierre

Mammouth du PHP | 514 Messages

31 oct. 2006, 11:13

il te faut une boucle pour récupérer les champs postés :

pour chaque champs posté, construire une requête. Une boucle foreach serait pas mal.

Lorsque tu génères ton formulaire, voici comment tu peux nommer tes champs :

Code : Tout sélectionner

<input type="text" name="nom[0]" /> <input type="text" name="nom[1]" />
puis :
<?php
foreach ($_POST['nom'] as $key) {
// mise à jour de la base de données
}
?>
note qu'il est préférable de placer le php en haut de page.
Ne jamais repousser à demain ce qu'on peut faire après demain ...

Eléphant du PHP | 81 Messages

31 oct. 2006, 11:41

Merci pour ta réponse.
Dans mon formulaire je peux avoir 2, ou 10 clients.

Dans ce cas la le code serait :
<input type="text" name="nom[]" />
c'est bien ça ?

voici le code de mon formulaire :
<?php

$Num=$_POST['Num'];

for($i=0;$i<sizeof($Num);$i++)
{

$NUM=$Num[$i];

$r="select * from clients where Num='$NUM'";
$rq=mysql_query($r);

$numero=mysql_result($rq,0,'Num');
$Nr=mysql_result($rq,0,'Nom');


?>

<form method="post" action="vrai_modif_client.php">
    <fieldset>
<!--Infos clients-->
        <p><label>Nom du stagiaire:</label><input name="Nom_stagiaire[]" type="text" maxlength="100" value="<?php echo $Nr; ?>"/></p>
     </fieldset>
<?php
}

?>
<!--Bouton envoie-->
        <p class="formbt"><input type="submit" value="Modifier" name="envoyer" class="bouton"/></p>
        <input type="hidden" value="<? echo $numero ?>" name="Num[]" />
</form>