modifier enregistrement AVEC SUBMIT

afi
Eléphant du PHP | 51 Messages

15 juil. 2012, 14:22

bONJOUR,
je voudrais modifier les données d'un enregistrement via un bouton submit en cochant une case à cocher (ou pas ds un deuxieme temps...)
Malheureusement cela ne fonctionne pas, rien ne se passe dans la base. Ou plutot quand j'ai un seul enregistrement il ya modification, mais si j'ai plusieurs ca ne marche plus. Voici le code et merci d'avance!!

<form name="modif_pc" action="modif_pc.php" method="post">
<table width="800" border="0" align= "center" cellpadding="1" cellspacing="1">
<tr><td>
<?php
require ("Connect.php");
// on seléctionne la base
$connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE,$connexion);
$sql = mysql_query("SELECT * FROM permis WHERE id='$_SESSION[id]' ");
echo'<tr>
<td width=350 height=20 class=bloc>type permis de conduire</td>
<td width=150 height= 20 class=bloc>date obtention du permis</td>
<td width=0 height= 20></td>
<td width=0 height= 20 class=bloc>modifier</td>
<td width=0 height= 20 class=bloc>supprimer</td>
</tr>';
while($row=mysql_fetch_array($sql))
{
echo '<tr>
<td class=bloc2>'.$row['permis'].'</td>
<td class=bloc2><input type=text name=date_permis size=20 value="'.$row['date_permis'].'"></td>
<td width=20 height=20 class=bloc2><input type=checkbox name=pc[] value="'.$row['permis'].'"></td>
<td width=20 height=20 class=bloc2><input name="modifier" type="submit" value="modifier" style="font-size: xx-small"></td>
<td width=20 height=20 class=bloc2><input name="supprimer" type="submit" value="supprimer" style="font-size: xx-small"></td> </tr>';
}

echo '';
?>
</table>

<?php
if(isset($_POST['modifier']))
{
if ($_POST['pc'] == "") {
echo '<p class=rep_info>cochez la ligne à modifier !</p>';
}
else
{
foreach($_POST['pc'] as $val)
{
$sql="UPDATE permis SET date_permis='$_POST[date_permis]' where permis='$val'";
}
$req= mysql_query($sql);

echo '<p class=contenu>***données modifiées : <font color=#FF0000> '.$val.'</p>';
} }
?>
fin FORM.

ViPHP
xTG
ViPHP | 7331 Messages

15 juil. 2012, 16:48

Tous tes enregistrements prennent toujours la même valeur, celle du dernier input nommé date_permis.
Il faut utiliser aussi une notation tableau si tu veux dissocier les valeurs.
Et en rajoutant l'index dans ton foreach tu pourras y accéder facilement:
foreach($_POST['pc'] as $idx => $val)
  echo $_POST['date_permis'][$idx];

afi
Eléphant du PHP | 51 Messages

15 juil. 2012, 19:35

oui effecivement ts les enregistrements prennent la meme valeur. j'ai essayé ta solution je n'ai aucun résultat.
Ai je oublié queque chose?

afi
Eléphant du PHP | 51 Messages

15 juil. 2012, 19:39

Par contre en utilisant le meme script pour supprimer cette fois ci ca marche très bien:

<?php
if(isset($_POST['supprimer']))
{
if ($_POST['pc'] == "") {
echo '<p class=rep_info>cochez la ligne à supprimer !</p>';
}
else
{
foreach($_POST['pc'] as $val)
{
$sql="DELETE FROM permis where permis='$val'";
$req= mysql_query($sql);
}
echo '<div style="text-align: center"><font color=#FF0000> ***données supprimées : '.$val.'</font></div>';
} }
?>

ViPHP
xTG
ViPHP | 7331 Messages

16 juil. 2012, 08:28

En plaçant le mysql_query() dans le foreach aussi ça peut aller mieux...
Et échapper les données (mysql_real_escape_string()) pour éviter les injections SQL.

afi
Eléphant du PHP | 51 Messages

22 juil. 2012, 08:08

désolé pour le retard, à tous
Non jusqu'a maintenant le problème n'est pas réglé.
je me suis dit que c'est peut etre un pb au niveau du WHERE:
foreach($_POST['pc'] as $val)
{
$sql="UPDATE permis SET date_permis='$_POST[date_permis]' where permis='$val'";
$req= mysql_query($sql);
}

ViPHP
xTG
ViPHP | 7331 Messages

22 juil. 2012, 09:56

Essaies ainsi :
$sql="UPDATE permis SET date_permis='" . mysql_real_escape_string($_POST[date_permis]) . "' where permis='" . mysql_real_escape_string($val). "'"; // toujours protéger les injections
$req= mysql_query($sql) or die(mysql_error() . '<br />Requête : ' . $sql);// pour le debug