Page 1 sur 2
[PHP] Mise à jours table pour chaque ligne de l'array en une
Posté : 16 mai 2008, 08:11
par Sylv@in
Bonjour,
Je cherche à mettre à jours une table SQL via un formulaire PHP.
Je connais la commande SQL pour le faire mais je n'arrive pas à mettre en place ce que je veut :
Dans mon tableau il y a des liste déroulantes (1 par ligne) je souhaiterais que la table se mette à jours lorsqu'on change une valeur d'une liste (ou de plusieurs) et qu'on clique sur le bouton enregistrer situé en bas du tableau.
Voici le Code :
Code : Tout sélectionner
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="content-language" content="fr">
<title>Administration</title>
<style type="text/css">
body {
margin: 0;
font-family: Arial;
color: #000000;
font-size: 10pt;
}
a:link {text-decoration: none;}
a:visited {text-decoration: none;}
a:active {text-decoration: none;}
a:hover {text-decoration: none;}
a {color: #333399; font-weight: bold;}
a:hover {color: #FF0000;}
table td {background-color: #CCCCCC; margin: 0; border-width: 0; font-family: Arial; color: #000000; font-size: 10pt;}
.title {background-color: #33CCCC; margin: 0; border-width: 0; font-family: Arial; color: #000000; font-size: 11pt;}
</style>
</head>
<body>
<center><h2>Reste à faire</h2></center>
<?php
include ('include/connexion.php');
$connexion=connexion();
//WHERE etat = 'En cours' OR etat = 'Verification' OR etat = 'Autorisation'
$sql = "SELECT * FROM formulaire ORDER BY `formulaire`.`id` DESC";
$result=mysql_query($sql);
echo "<table border=\"1\" width=\"100%\" align=\"center\">";
echo "<tr>";
echo "<td class=\"title\" align=\"center\"> N° </td>";
echo "<td class=\"title\" align=\"center\"> Identifiant </td>";
echo "<td class=\"title\" align=\"center\"> Nom </td>";
echo "<td class=\"title\" align=\"center\"> Prénom </td>";
echo "<td class=\"title\" align=\"center\"> Service </td>";
echo "<td class=\"title\" align=\"center\"> Téléphone </td>";
echo "<td class=\"title\" align=\"center\"> Nom du site </td>";
echo "<td class=\"title\" align=\"center\"> URL </td>";
echo "<td class=\"title\" align=\"center\"> Catégorie </td>";
echo "<td class=\"title\" align=\"center\"> Motivation de la demande </td>";
echo "<td class=\"title\" align=\"center\"> Date </td>";
echo "<td class=\"title\" align=\"center\"> Etat </td>";
echo "<td class=\"title\" align=\"center\"> Commentaire </td>";
echo "</tr>";
//$tableau = mysql_fetch_array($result);
while ($tableau = mysql_fetch_row($result))
{
$id=$tableau[0];
$identifiant=$tableau[1];
$ndemandeur=$tableau[2];
$prenom=$tableau[3];
$service=$tableau[4];
$telephone=$tableau[5];
$nsi=$tableau[6];
$url=$tableau[7];
$categorie=$tableau[8];
$mdld=$tableau[9];
$date=$tableau[10];
$etat=$tableau[11];
$com=$tableau[12];
?>
<form method="post" action="administration_test.php">
<?php
echo "<tr>";
echo "<td align=\"center\">$id </td>";
echo "<td>$identifiant </td>";
echo "<td>$ndemandeur </td>";
echo "<td>$prenom </td>";
echo "<td>$service </td>";
echo "<td>$telephone </td>";
echo "<td>$nsi </td>";
echo "<td><a href=\"$url\" target=\"_blank\">$url</a> </td>";
echo "<td>$categorie </td>";
echo "<td>$mdld </td>";
echo "<td align=\"center\">$date </td>";
echo "<td align=\"center\"><select size=\"1\" name=\"etat\" value=\"$etat\" tabindex=\"3\">
<option value=\"$etat\">$etat</option>
<option value=\"Verification\">Verification</option>
<option value=\"Autorisation\">Autorisation</option>
<option value=\"Accepter\">Accepter</option>
<option value=\"Refuser\">Refuser</option>
</select></td>";
echo "<td align=\"center\"><textarea rows='5' cols='15' name='comen'>$com</textarea></td>";
echo "</tr>";
$upd = 'UPDATE formulaire SET etat="'.$etat.'" WHERE id="'.$id.'"';
mysql_query($upd);
}
echo "</table>";
echo "<br><center><input type=\"submit\" value=\"Enregistrer\"></center>";
?>
</form>
<br><br>
</body>
</html>
La mise à jours ne fonctionne pas pour la table.
J'ai essayé avec une boucle For et une boucle foreach mais rien à faire je n'y arrive pas
Merci par avance
Posté : 16 mai 2008, 10:36
par steph29
c'est moi ou on a pas le code du fichier "administration_test.php" ?
Posté : 16 mai 2008, 10:36
par Sylv@in
c'est toi
Car administration_test.php est le fichier pour lequel je vous ai fourni le code
Posté : 16 mai 2008, 10:56
par Berzemus
c'est un feux d'artifice de "echos" disdonc.. tu as fait du vbscript ?
Tu peux tranquillement faire ceci:
echo "<table border=\"1\" width=\"100%\" align=\"center\">
<tr>
<td class=\"title\" align=\"center\"> N° </td>
<td class=\"title\" align=\"center\"> Identifiant </td>
<td class=\"title\" align=\"center\"> Nom </td>
<td class=\"title\" align=\"center\"> Prénom </td>
<td class=\"title\" align=\"center\"> Service </td>
<td class=\"title\" align=\"center\"> Téléphone </td>
<td class=\"title\" align=\"center\"> Nom du site </td>
<td class=\"title\" align=\"center\"> URL </td>
<td class=\"title\" align=\"center\"> Catégorie </td>
<td class=\"title\" align=\"center\"> Motivation de la demande </td>
<td class=\"title\" align=\"center\"> Date </td>
<td class=\"title\" align=\"center\"> Etat </td>
<td class=\"title\" align=\"center\"> Commentaire </td>
</tr>";
plutôt que ceci:
echo "<table border=\"1\" width=\"100%\" align=\"center\">";
echo "<tr>";
echo "<td class=\"title\" align=\"center\"> N° </td>";
echo "<td class=\"title\" align=\"center\"> Identifiant </td>";
echo "<td class=\"title\" align=\"center\"> Nom </td>";
echo "<td class=\"title\" align=\"center\"> Prénom </td>";
echo "<td class=\"title\" align=\"center\"> Service </td>";
echo "<td class=\"title\" align=\"center\"> Téléphone </td>";
echo "<td class=\"title\" align=\"center\"> Nom du site </td>";
echo "<td class=\"title\" align=\"center\"> URL </td>";
echo "<td class=\"title\" align=\"center\"> Catégorie </td>";
echo "<td class=\"title\" align=\"center\"> Motivation de la demande </td>";
echo "<td class=\"title\" align=\"center\"> Date </td>";
echo "<td class=\"title\" align=\"center\"> Etat </td>";
echo "<td class=\"title\" align=\"center\"> Commentaire </td>";
echo "</tr>";
Posté : 16 mai 2008, 11:04
par Sylv@in
Ok merci pour les echo et non je n'ai pas fait de VBScript
<?php
include ('include/connexion.php');
$connexion=connexion();
//WHERE etat = 'En cours' OR etat = 'Verification' OR etat = 'Autorisation'
$sql = "SELECT * FROM formulaire ORDER BY `formulaire`.`id` DESC";
$result=mysql_query($sql);
echo "<table border=\"1\" width=\"100%\" align=\"center\">
<tr>
<td class=\"title\" align=\"center\"> N° </td>
<td class=\"title\" align=\"center\"> Identifiant </td>
<td class=\"title\" align=\"center\"> Nom </td>
<td class=\"title\" align=\"center\"> Prénom </td>
<td class=\"title\" align=\"center\"> Service </td>
<td class=\"title\" align=\"center\"> Téléphone </td>
<td class=\"title\" align=\"center\"> Nom du site </td>
<td class=\"title\" align=\"center\"> URL </td>
<td class=\"title\" align=\"center\"> Catégorie </td>
<td class=\"title\" align=\"center\"> Motivation de la demande </td>
<td class=\"title\" align=\"center\"> Date </td>
<td class=\"title\" align=\"center\"> Etat </td>
<td class=\"title\" align=\"center\"> Commentaire </td>
</tr>";
//$tableau = mysql_fetch_array($result);
while ($tableau = mysql_fetch_row($result))
{
$id=$tableau[0];
$identifiant=$tableau[1];
$ndemandeur=$tableau[2];
$prenom=$tableau[3];
$service=$tableau[4];
$telephone=$tableau[5];
$nsi=$tableau[6];
$url=$tableau[7];
$categorie=$tableau[8];
$mdld=$tableau[9];
$date=$tableau[10];
$etat=$tableau[11];
$com=$tableau[12];
?>
<form method="post" action="administration_test.php">
<?php
echo "<tr>
<td align=\"center\">$id </td>
<td>$identifiant </td>
<td>$ndemandeur </td>
<td>$prenom </td>
<td>$service </td>
<td>$telephone </td>
<td>$nsi </td>
<td><a href=\"$url\" target=\"_blank\">$url</a> </td>
<td>$categorie </td>
<td>$mdld </td>
<td align=\"center\">$date </td>
<td align=\"center\"><select size=\"1\" name=\"etat\" value=\"$etat\" tabindex=\"3\">
<option value=\"$etat\">$etat</option>
<option value=\"Verification\">Verification</option>
<option value=\"Autorisation\">Autorisation</option>
<option value=\"Accepter\">Accepter</option>
<option value=\"Refuser\">Refuser</option>
</select></td>
<td align=\"center\"><textarea rows='5' cols='15' name='comen'>$com</textarea></td>
</tr>";
$upd = 'UPDATE formulaire SET etat="'.$etat.'" WHERE id="'.$id.'"';
mysql_query($upd);
}
echo "</table>
<br><center><input type=\"submit\" value=\"Enregistrer\"></center>";
?>
</form>
Posté : 16 mai 2008, 11:24
par steph29
c'est toi
Car administration_test.php est le fichier pour lequel je vous ai fourni le code

ah oui jolie structure de fichier, heureusement que j'ai pas trop mangé ce matin...
l'update en plein milieu de la structure html ... et la a chaque chargement de page ...
si on ne gere que les etats, on peut faire un truc du genre:
include ('include/connexion.php');
$connexion=connexion();
if ($_POST){
if (is_array($_POST['etat'])){
foreach ($_POST['etat'] as $cle=>$valeur){
$upd = 'UPDATE formulaire SET etat="'.$valeur.'" WHERE id="'.$cle.'"';
mysql_query($upd);
}
//idealement on fais une redirection sur soit meme... pour eviter de refaire un update a chaque refresh...
}
}
//WHERE etat = 'En cours' OR etat = 'Verification' OR etat = 'Autorisation'
$sql = "SELECT * FROM formulaire ORDER BY `formulaire`.`id` DESC";
$result=mysql_query($sql);
echo '<td align="center">select size="1" name="etat['.$id.']" tabindex="3">';
Posté : 16 mai 2008, 11:28
par caroube
Ton problème est là
$upd = 'UPDATE formulaire SET etat="'.$etat.'" WHERE id="'.$id.'"';
La variable $etat provient du <select name="etat" >, mais avec un ancien paramétrage de PHP qui transformait automatiquement les données de formulaire HTML en variables PHP. Cela n'est plus vrai maintenant. Il faut auparavant faire
$etat = $_POST["etat"];
cela dit, mélanger du HTML et du PHP, ce n'est pas terrible. Et puis, personnellement, je n'aime pas trop mélanger la saisie d'un formulaire et la mise à jour d'une base : je préfère une page pour chaque, quitte à ce que la page de mise à jour de la base soit redirigée automatiquement vers la page du formulaire.
Posté : 16 mai 2008, 11:31
par Sékiltoyai
c'est un feux d'artifice de "echos" disdonc.. tu as fait du vbscript ?
Rho l'attaque gratuite, c'est moche

Posté : 16 mai 2008, 11:33
par Sylv@in
Ton problème est là
$upd = 'UPDATE formulaire SET etat="'.$etat.'" WHERE id="'.$id.'"';
La variable $etat provient du <select name="etat" >, mais avec un ancien paramétrage de PHP qui transformait automatiquement les données de formulaire HTML en variables PHP. Cela n'est plus vrai maintenant. Il faut auparavant faire
$etat = $_POST["etat"];
cela dit, mélanger du HTML et du PHP, ce n'est pas terrible. Et puis, personnellement, je n'aime pas trop mélanger la saisie d'un formulaire et la mise à jour d'une base : je préfère une page pour chaque, quitte à ce que la page de mise à jour de la base soit redirigée automatiquement vers la page du formulaire.
Ce n'est pas moi qui veux faire ça

c'est un collègue. Je lui ai dis que ce serait plus propre de faire comme tu le propose mais il préfère modifier tout d'un coup
c'est toi
Car administration_test.php est le fichier pour lequel je vous ai fourni le code

ah oui jolie structure de fichier, heureusement que j'ai pas trop mangé ce matin...
l'update en plein milieu de la structure html ... et la a chaque chargement de page ...
si on ne gere que les etats, on peut faire un truc du genre:
include ('include/connexion.php');
$connexion=connexion();
if ($_POST){
if (is_array($_POST['etat'])){
foreach ($_POST['etat'] as $cle=>$valeur){
$upd = 'UPDATE formulaire SET etat="'.$valeur.'" WHERE id="'.$cle.'"';
mysql_query($upd);
}
//idealement on fais une redirection sur soit meme... pour eviter de refaire un update a chaque refresh...
}
}
//WHERE etat = 'En cours' OR etat = 'Verification' OR etat = 'Autorisation'
$sql = "SELECT * FROM formulaire ORDER BY `formulaire`.`id` DESC";
$result=mysql_query($sql);
echo '<td align="center">select size="1" name="etat['.$id.']" tabindex="3">';
ça ne fonctionne pas
Posté : 16 mai 2008, 11:36
par caroube
Je n'avais pas vu. tu as $etat qui est positionné avec ce qui est lu dans la base de données. Tu mets à jour avec ce qui est lu dans la base de données, donc ça ne bouge pas. Je mettrais plutôt
$newetat = $_POST["etat"];
if ($newetat) {
$upd = 'UPDATE formulaire SET etat="'.$newetat.'" WHERE id="'.$id.'"';
mysql_query($upd);
}
et je remonterais tout ça en haut de la page, avant le SELECT, parce que sinon, tu vas afficher l'ancienne valeur
Posté : 16 mai 2008, 11:37
par Sylv@in
Ton problème est là
$upd = 'UPDATE formulaire SET etat="'.$etat.'" WHERE id="'.$id.'"';
La variable $etat provient du <select name="etat" >, mais avec un ancien paramétrage de PHP qui transformait automatiquement les données de formulaire HTML en variables PHP. Cela n'est plus vrai maintenant. Il faut auparavant faire
$etat = $_POST["etat"];
cela dit, mélanger du HTML et du PHP, ce n'est pas terrible. Et puis, personnellement, je n'aime pas trop mélanger la saisie d'un formulaire et la mise à jour d'une base : je préfère une page pour chaque, quitte à ce que la page de mise à jour de la base soit redirigée automatiquement vers la page du formulaire.
fonctionne pas non plus
Posté : 16 mai 2008, 11:37
par steph29
c'est meme encore plus rigolo que ca, a aucun moment ca ne peut prendre en compte la veleur postée.
$etat est settée par la requete de select
$etat=$tableau[11];
dans le select la velur est settee alors que ca doit etre dans les options:
Code : Tout sélectionner
<select size=\"1\" name=\"etat\" value=\"$etat\" tabindex=\"3\">
donc plutot:
et ensuite pour selectionner l'opion en cours utilisation de :
au lieu de tester chaque option:
echo '<option value="Verification"',
if ($etat=="Verification") echo ' selected="selected";
echo '>Verification</option>
Posté : 16 mai 2008, 11:44
par Sylv@in
c'est meme encore plus rigolo que ca, a aucun moment ca ne peut prendre en compte la veleur postée.
$etat est settée par la requete de select
$etat=$tableau[11];
dans le select la velur est settee alors que ca doit etre dans les options:
donc plutot:
et ensuite pour selectionner l'opion en cours utilisation de :
au lieu de tester chaque option:
echo '<option value="Verification"',
if ($etat=="Verification") echo ' selected="selected";
echo '>Verification</option>
heu donc je fait quoi là
<select size="1" name="etat" tabindex="3">
puis
<option value="Verification"',
if ($etat=="Verification") echo ' selected="selected";
echo '>Verification</option>
et j'enlève $etat=$tableau[11]
EDIT : J'avoue que je suis perdu là entre les deux solutions
Posté : 16 mai 2008, 11:55
par steph29
voila le fichier complet avec les modifs:
(pour ma part vous aurez remarque que les echo ne me genent pas plus que ca

)
<?php
include ('include/connexion.php');
$connexion=connexion();
//en cas de soumission du formulaire on va modifier chaque id...
if ($_POST){
if (is_array($_POST['etat'])){
foreach ($_POST['etat'] as $cle=>$valeur){
$upd = 'UPDATE formulaire SET etat="'.$valeur.'" WHERE id="'.$cle.'"';
mysql_query($upd);
}
}
}
//on recupere les valeurs de la base:
$sql = "SELECT * FROM formulaire ORDER BY `formulaire`.`id` DESC";
$result=mysql_query($sql);
echo "<table border=\"1\" width=\"100%\" align=\"center\">
<tr>
<td class=\"title\" align=\"center\"> N° </td>
<td class=\"title\" align=\"center\"> Identifiant </td>
<td class=\"title\" align=\"center\"> Nom </td>
<td class=\"title\" align=\"center\"> Prénom </td>
<td class=\"title\" align=\"center\"> Service </td>
<td class=\"title\" align=\"center\"> Téléphone </td>
<td class=\"title\" align=\"center\"> Nom du site </td>
<td class=\"title\" align=\"center\"> URL </td>
<td class=\"title\" align=\"center\"> Catégorie </td>
<td class=\"title\" align=\"center\"> Motivation de la demande </td>
<td class=\"title\" align=\"center\"> Date </td>
<td class=\"title\" align=\"center\"> Etat </td>
<td class=\"title\" align=\"center\"> Commentaire </td>
</tr>";
//$tableau = mysql_fetch_array($result);
while ($tableau = mysql_fetch_row($result))
{
$id=$tableau[0];
$identifiant=$tableau[1];
$ndemandeur=$tableau[2];
$prenom=$tableau[3];
$service=$tableau[4];
$telephone=$tableau[5];
$nsi=$tableau[6];
$url=$tableau[7];
$categorie=$tableau[8];
$mdld=$tableau[9];
$date=$tableau[10];
$etat=$tableau[11];
$com=$tableau[12];
?>
<form method="post" action="administration_test.php">
<?php
echo "<tr>
<td align=\"center\">$id </td>
<td>$identifiant </td>
<td>$ndemandeur </td>
<td>$prenom </td>
<td>$service </td>
<td>$telephone </td>
<td>$nsi </td>
<td><a href=\"$url\" target=\"_blank\">$url</a> </td>
<td>$categorie </td>
<td>$mdld </td>
<td align=\"center\">$date </td>
<td align=\"center\">";
echo '<td align="center">select size="1" name="etat['.$id.']" tabindex="3">';
echo '<option value="">Selectionnez un etat</option>';
echo '<option value="Verification"',
if ($etat=="Verification") echo ' selected="selected"';
echo '>Verification</option>';
echo '<option value="Autorisation"',
if ($etat=="Autorisation") echo ' selected="selected"';
echo '>Autorisation</option>';
echo '<option value="Accepter"',
if ($etat=="Accepter") echo ' selected="selected"';
echo '>Accepter</option>';
echo '<option value="Refuser"',
if ($etat=="Refuser") echo ' selected="selected"';
echo '>Refuser</option>';
echo '</select>';
echo "<td align=\"center\"><textarea rows='5' cols='15' name='comen'>$com</textarea></td>
</tr>";
}
echo "</table>
<br><center><input type=\"submit\" value=\"Enregistrer\"></center>";
?>
</form>
Posté : 16 mai 2008, 11:59
par Sylv@in
Parse error: syntax error, unexpected T_IF in D:\gmf\apps\homol\webwasher\administration_test.php on line 95
Ligne 95 :
if ($etat=="Verification") echo ' selected="selected"';