Je débute complètement en php (j'ai démarré hier et lu un max de sites s'y rapportant) et j'essaye de faire un tableau que l'on peut modifier à la volée.
J'entends par là qu'on a une base mySQL avec des identifiants et des CA, que cette base est affichée sur le site en php (jusque là ça va) et qu'ensuite l'utilisateur peut modifier une valeur du tableau (seulement la case CA, l'id ne changera jamais) en cliquant dessus et en entrant une nouvelle valeur.
J'ai fait un premier essai pour me familiariser avec les commandes: le tableau s'affiche et l'utilisateur entre l'id du CA qu'il veut modifier et la nouvelle valeur. Il peut ensuite confirmer ou annuler son changement. A la confirmation la table est mise à jour sur l'instant.
<html>
<head>
<title> Test formulaire gauche</title>
</head>
<body>
<link rel="STYLESHEET" type="text/css" media="all" href="style.css"/>
<div id="global">
<div id="header">
<?php
//On créé une fonction de connection à la base
function connecttest_CA(){
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('test_ca', $base) ;
}
?>
</div>
<!-- Menu fixe gauche (édition des règles de gestion) ##WIP## -->
<div id="gauche">
<h1>Edition</h1>
<p class="menu">Règles gestion</p>
<!-- On créé un formulaire permettant d'éditer la table-->
<form name="update" method="post" action="index.php?formulaire">
<!-- L'utilisateur doit choisir quel ID il veut changer -->
Entrez l'ID que vous voulez modifier : <input type="entier" name="id_CA" value=""/><br/>
<!-- L'utilisateur entre le nouveau CA -->
Entrez le CA corrigé correspondant : <input type="entier" name="CA" value=""/><br/>
<!-- L'utilisateur peut confirmer ou annuler sa modification -->
<input type="submit" name="valider" value="Valider"/>
<input type="submit" name="reset" value="Reset"/>
</form>
<?php
//Une fois que l'utilisateur a entré une modification, elle est récapitulée devant lui
//et le changement a lieu immediatement
if(isset($_POST['valider']))
{
$id_CA=floatval($_POST['id_CA']);
//Les modifications s'affichent
echo '<strong>Vous avez choisi de modifier : </strong><br />';
echo '  id: ';
echo $id_CA;
echo '<br/>';
echo '  Nouveau CA: ';
$CA=floatval($_POST['CA']);
echo $CA;
echo '<br/>';
//On se connecte à la base
connecttest_CA();
//On selectionne la table
$sql = 'SELECT * FROM tableCA';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//On sélectionne le CA correspondant à l'ID entrée et on l'update avec la valeur entrée
$req = "UPDATE tableca SET CA='$CA' WHERE id_CA='$id_CA'";
mysql_query($req) or die ('Erreur sur : '.$requete.'<br/>'.mysql_error());
mysql_close ();
}
?>
</div>
<!-- Fin Menu fixe gauche -->
<!-- Page_Principale -->
<div id="page_principale">
<br />
<?php
//On se connecte
connecttest_CA();
//On selectionne la table
$sql = 'SELECT * FROM tableCA';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//On affiche les champs et paramètres de la table sous forme de tableau
echo '<table border=1 width=300 cellpadding=5><tr bgcolor=#DDDDDD>';
echo '<td><center><strong>id</strong></center></td>';
echo '<td><center><strong>CA</strong></center></td></tr>';
while ($data = mysql_fetch_array($req)) {
echo '<tr><td>'.$data['id_CA'].'</td>';
echo '<td align=right>'.$data['CA'].'</td></tr>';
}
echo '</table>';
//On libère la mémoire mobilisée pour cette requête dans sql
//$data de PHP lui est toujours accessible !
mysql_free_result ($req);
//On ferme sql
mysql_close ();
?>
</div>
<!-- Fin Page_Principale -->
</div>
</body>
</html>
Cela fonctionne parfaitement, mais ce n'est pas le sujet. L'idée c'est d'avoir le tableau (qui peut faire des milliers de lignes) et de cliquer sur une seule case (ou sur une colonne "modifier" mais dans la ligne du sujet à modifier) pour pouvoir modifier le CA choisi.J'ai tenté une deuxième approche, avec une seconde page form.php qui transformerait une case en formulaire permettant de modifier le CA.
INDEX:
<html>
<head>
<title>Test mod tableau clic</title>
</head>
<body>
<link rel="STYLESHEET" type="text/css" media="all" href="style.css"/>
<div id="global">
<div id="header">
<?php
//On créé une fonction de connection à la base
function connecttest_CA(){
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('test_ca', $base) ;
}
?>
</div>
<!-- Menu fixe gauche (édition des règles de gestion) ##WIP## -->
<div id="gauche">
<h1>Edition</h1>
<p class="menu">Règles gestion</p>
<form name="update" method="post" action="form.php">
<p class="menu"><input type="submit" name="modifier" value="Modifier"/></p>
</form>
<!-- On créé un formulaire permettant d'éditer la table-->
</div>
<!-- Fin Menu fixe gauche -->
<!-- Page_Principale -->
<div id="page_principale">
<br />
<?php
//On se connecte
connecttest_CA();
//On selectionne la table
$sql = 'SELECT * FROM tableCA';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//On affiche les champs et paramètres de la table sous forme de tableau
echo '<table border=1 cellpadding=5><tr bgcolor=#DDDDDD>';
echo '<td width=15><center><strong>id</strong></center></td>';
echo '<td width=300><center><strong>CA</strong></center></td>';
$i=0; //on initialise l'index
while ($data = mysql_fetch_array($req)) {
echo '<tr><td align=center>'.$data['id_CA'].'</td>';
echo '<td align=right>'.$data['CA'].'</td>';
$i++;// on incrémente l'index
}
echo '</table>';
//On libère la mémoire mobilisée pour cette requête dans sql
//$data de PHP lui est toujours accessible !
mysql_free_result ($req);
//On ferme sql
mysql_close ();
?>
</div>
<!-- Fin Page_Principale -->
</div>
</body>
</html>
FORMULAIRE:
<html>
<head>
<title>Test mod tableau clic</title>
</head>
<body>
<link rel="STYLESHEET" type="text/css" media="all" href="style.css"/>
<div id="global">
<div id="header">
<?php
//On créé une fonction de connection à la base
function connecttest_CA(){
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('test_ca', $base) ;
}
?>
</div>
<!-- Menu fixe gauche (édition des règles de gestion) ##WIP## -->
<div id="gauche">
<h1>Edition</h1>
<p class="menu">Règles gestion</p>
<!-- On créé un formulaire permettant d'éditer la table-->
<form name="update" method="post" action="index2.php">
<p class="menu"><input type="submit" name="valider" value="Valider"/></p>
</form>
</div>
<!-- Fin Menu fixe gauche -->
<!-- Page_Principale -->
<div id="page_principale">
<br />
<?php
//On se connecte
connecttest_CA();
//On selectionne la table
$sql = 'SELECT * FROM tableCA';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//On affiche les champs et paramètres de la table sous forme de tableau
echo '<form method="post">';
echo '<table border=1 cellpadding=5><tr bgcolor=#DDDDDD>';
echo '<td width=15><center><strong>id</strong></center></td>';
echo '<td width=300><center><strong>CA</strong></center></td>';
$i=1; //on initialise l'index
while ($data = mysql_fetch_array($req))
{
echo '<tr><td align=center>'.$data['id_CA'].'</td>';
//On nomme chaque ligne avec l'id correspondant
echo '<td align=right><input type="text" name="'.$i.'" value="'.$data['CA'].'"/></td></tr>';
$i++; //On incrémente l'index
}
echo '</table>';
//A la validation
if(isset($_POST['valider']))
{
$i=1; //On réinitialise l'index
while ($data = mysql_fetch_array($req))
{
//On cherche le CA pour chaque ID
$req = "SELECT CA WHERE id_CA='$i'";
mysql_query($req) or die ('Erreur sur : '.$requete.'<br/>'.mysql_error());
//On converti le post en valeur numérique
$CA=floatval($_POST['$i']);
if ($data['CA'] != $CA) // On compare la valeur du tableau avec celle de la base
{
//On sélectionne le CA correspondant à l'ID entrée et on l'update avec la valeur entrée
$req = "UPDATE tableca SET CA='$CA' WHERE id_CA='$i'";
mysql_query($req) or die ('Erreur sur : '.$requete.'<br/>'.mysql_error());
}
$i++; //On incrémente l'index
}
}
//On libère la mémoire mobilisée
mysql_free_result ($req);
//On ferme sql
mysql_close ();
?>
</div>
<!-- Fin Page_Principale -->
</div>
</body>
</html>
Sauf que là je bloque. Les changements ne sont pas pris en compte, la base SQL ne s'update pas.Je ne suis pas encore dans le sujet (il faudrait qu'une seule case soit modifiable et non pas toute) mais je n'y suis pas arrivé non plus.
Comme mentionné plus haut, je débute complètement. Du coup j'imagine que mon code est rempli d'erreurs. J'essaye de commenter au maximum pour m'aider à comprendre et à savoir ce que je veux mais n'hésitez pas à me corriger.
Merci de votre aide,
--Simon