[php] Mettre à jour plusieurs enregistrement

Fermé
wil_60_ Messages postés 9 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 29 juin 2007 - 22 juin 2007 à 15:08
wil_60_ Messages postés 9 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 29 juin 2007 - 26 juin 2007 à 09:48
Bonjour, je suis actuellement en stage pour l'armée de l'air et je dois réaliser un projet en php avec base de données mySql.

Voila le problème, j'ai un formulaire qui recoit plusieurs renseignement concerant des ordres de missions par un autre formulaire en "GET".

Le formulaire sert à mettre à jour ces renseignement avec une date qui se modifie et ainsi qu'un numero de bordereau saisie par l'utilisateur.

En faite l'utilisateur coche dans le tableau, une checkbox "à envoyer", si elle est cochée on envoit les ordres de missions selectionnés( avec la même date d'envoi et le même numero de bordereau) sinon les enregistrements de la base de données "dateenvoi" et "numerobordereau" sont vides.

Le problème lors de la mise et qu'il ne prend en compte que le dernier enregistrement du tableau selectionné.
J'ai cherché sur le web des infos mais rien de vraiment concluant.

Donc merci de m'éclairer sur ce soucis.
A voir également:

9 réponses

J'ai modiifé a la place du do /while j'ai fait un while

et t'ai modifie le nom des champs pour avoir des noms dynamiques

ensuite un petit script de récup des valeurs des variables dynamiques ainsi postées. Je ne l'ai pas testé. Il se peut qu'il y ai qqs erreurs ce n'est qu'une piste.

<?php
while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)) {
$i=0;
?>
<tr>
<td><div align="center">
<input name="<?php echo "numRj_".$i ?>" type="text" size="3" value="<?php echo $row_Recordset2['numrj']; ?>" readonly="on">
</div></td>
<td><div align="center">
<input name="<?php echo "typeRegistre_".$i ?>" type="text" size="3" value="<?php echo $row_Recordset2['typeregistre']; ?>">
</div></td>
<td><div align="right">
<input name="<?php echo "transportPaiement_".$i ?>" type="text" size="10" onFocus="this.value=''" value="<?php echo $row_Recordset2['transportpaiement']; ?>">
</div></td>

</tr>
<?php
$i++;
}
?>
</table>

<?php
//recuperation des valeurs des variables dynamiques postees
foreach ($_POST as $cle=>$value){
if(substr($cle,0,4)=="numRj"){
$indice=substr($cle,6);
$array_numRj[$indice]=$value;
}
if(substr($cle,0,11)=="typeRegistre"){
$indice=substr($cle,13);
$typeRegistre[$indice]=$value;
}
if(substr($cle,0,16)=="transportPaiement"){
$indice=substr($cle,18);
$array_transportPaiement[$indice]=$value;
}
}
// tu te retrouves avec 3 array que tu pourra parcourir avec des foreach et faire tes UPDATE
?>
1
Un conseil utilises plutot la method POST pour envoyer les données d'un formulaire à l'autre, tu éviteras bien des soucis car parfois suivant les navigateurs l'encodage de certains caractères pose problème dans l'URL.

Mets method="post" dans la balise <form

et tu récupéres de l'autre côté par des $_POST[nom_du_champ]

Si tu veux que tes champs dates ne soient pas vides, testes si le bouton est coché.
Soit tu n'enregistres pas si il n'est pas coché
Soit tu enregistres en forçant la date à une valeur prédéfinie ??
0
wil_60_ Messages postés 9 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 29 juin 2007 6
25 juin 2007 à 13:02
Je me suis mal exprimé apparament...

Bon je rentente l'explication, j'ai pu lire sur le net que lorsque l'on veut modifier plusieurs données dans un tableaux, php ne garde que la derniere valeur du tableau.

J'ai 2 tables la table om(ordre de mission) et la table registre, la table om est relié par numordre(identifiant de la table om) à la table registre.
Un ordre de mission peut posseder plusieurs registres.

Bref moi j'ai une page je choisi l'ordre de mission dans une liste déroulante et avec l'action du formulaire je recupère le numero de cet ordre de mission dans une autre page.

Jusque la tout va bien, dans la nouvelle page j'affiche un tableau avec tous les registres concernant l'ordre de mission selectionné auparravant.(le tableau affiche les registres avec un "do")

Ca fonctionne encore, tous mes champs sont des inputs(pour les modifier) et j'ai pour finir un bouton de submit mais lors de l'update seul le dernier enregistrement du tableau est modifié.

Donc j'aurais aimé avoir plus d'informations sur mon problème et un peu d'aide car tout fonctionne sans problème mais l'update ne se fait que sur la derniere ligne du tableau

Voila et merci d'avance
0
As tu mis des nem différents pour les input ?

Je te conseille à nouveau d'utiliser la methode POST car avec GET tu dois être obligé de mettre autant de ?variable1=...& variable2=... &variable3=.... que tu as de champs input dans ton formulaire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wil_60_ Messages postés 9 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 29 juin 2007 6
25 juin 2007 à 13:45
j'ai les même noms sur chaque ligne etant donné que c'est avec un repéter que je les affiches
bref tout fonctionne même l'update mais vu que c'est un tableau en php ( repeté avec un "do")
seul la derniere ligne est mise a jour
0
c'est normal que tu n'ai que le dernier input puisque tu as le même nom pour tous, le formulaire poste la dernière valeur chargée dans la "variable" nom.

Alors si tu crée tes input de formulaire avec un do / while met une variable $i qui s'increment à chaque boucle et met comme nom ${'nom_champ'.$i}
et tu recupere dans le script appelé en parcourant l'array $_POST[] et en travaillant sur le début des noms de varibles.

Un bout de code serrait le bienvenu, pour mieux t'aiguiller
0
wil_60_ Messages postés 9 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 29 juin 2007 6
25 juin 2007 à 14:26
<?php require_once('Connections/om.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "registre")) {
$updateSQL = sprintf("UPDATE registre SET numordre=%s, typeregistre=%s, transportpaiement=%s WHERE numrj=%s",
GetSQLValueString($_POST['numordre'], "text"),
GetSQLValueString($_POST['typeregistre'], "text"),
GetSQLValueString($_POST['transportpaiement'], "double"),
GetSQLValueString($_POST['numrj'], "text"));

mysql_select_db($database_om, $om);
$Result1 = mysql_query($updateSQL, $om) or die(mysql_error());
if($Result1 == true)
{
?>
<body onload="return validationmodifeng()"></body>
<?php
}
}

$colname_Recordset2 = "1";
if (isset($_GET['numordre'])) {
$colname_Recordset2 = (get_magic_quotes_gpc()) ? $_GET['numordre'] : addslashes($_GET['numordre']);
}
mysql_select_db($database_om, $om);
$query_Recordset2 = sprintf("SELECT * FROM om, personnel, registre WHERE personnel.nid=om.nid AND om.numordre=registre.numordre AND registre.numordre = '%s'", $colname_Recordset2);
$Recordset2 = mysql_query($query_Recordset2, $om) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
?>



<table width="100%" border="1">
<tr>
<th rowspan="2" bgcolor="#CCCCCC" scope="col"><div align="center">n°RJ</div></th>
<th rowspan="2" bgcolor="#CCCCCC" scope="col"><div align="center">Type</div></th>
<th rowspan="2" bgcolor="#CCCCCC" scope="col"><div align="center">Transport</div></th>
</tr>

<?php do { ?>
<tr>
<td><div align="center">
<input name="numrj" type="text" size="3" value="<?php echo $row_Recordset2['numrj']; ?>" readonly="on">
</div></td>
<td><div align="center">
<input name="typeregistre" type="text" size="3" value="<?php echo $row_Recordset2['typeregistre']; ?>">
</div></td>
<td><div align="right">
<input name="transportpaiement" type="text" size="10" onFocus="this.value=''" value="<?php echo $row_Recordset2['transportpaiement']; ?>">
</div></td>

</tr>
<?php } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)); ?>
</table>
0
en complement:

pour parcourir et utiliser les valeurs des 3 array en même temps (ils ont forcement la même taille):

for( $i=0 ; $i <sizeof( $array_numRj) ; $i++) {
tu recuperes la valeur dans chacun des array avec par exemple

$array_numRj[$i]
$array_typeRegistre[$i]
$array_transportPaiement[$i]

pour faire tes UPDATE

}

Petit conseil au passage: pour une meilleure lisibilité du script il est préférable de nommer les variables
$transportPaiement avec P majuscule ou alors transport_paiement avec un underscore

amicalement
0
wil_60_ Messages postés 9 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 29 juin 2007 6
26 juin 2007 à 09:48
Merci de ton aide, je vais essayer sinon j'ai recupérer divers scripts en AJAX pour modifier en "inline" mais cela m'a l'air beaucoup plus complexe.
0