Page 1 sur 1
Executer enregistrement sur un pagination
Posté : 05 mars 2012, 10:44
par ruca
Bonjour à tous,
je débute en PHP et je viens ici demander votre aide, j'explique mon problème.
Suite à une autre question sur ce forum j'ai réussi à adapter un code
http://www.lephpfacile.com/howto/6-comm ... age-en-php
qui me permets de mettre ma requête PHP avec 80 enregistrements (sa peut aller très haut avec les enregistrements) en pages de 25 enregistrements par page affichés,
le problème est que si je modifie un enregistrement et je passe à une autre page les modifications sont perdues.
Comme je peut faire pour qu'un enregistrement se fasse quand je change de page?
J'ai essayé mais pas réussi à trouver.
Merci de votre aide et à plus tard.
Re: Executer enregistrement sur un pagination
Posté : 05 mars 2012, 10:54
par Mazarini
Il faut définir le mode opératoire pour faire des modifications. Il me semble que tu veux faire des modifications sur le mode d'une feuille de calcul Excel, ce qui n'est pas le plus simple.
Si tu débutes en PHP, il est plus simple de mettre un lien ou un bouton en face de chaque ligne d'afficher une page de modification de la ligne. Tu conserves la page en cours dans des variables de session pour revenir à la liste une fois la modification effectuée.
Re: Executer enregistrement sur un pagination
Posté : 05 mars 2012, 16:25
par ruca
Re-bonjour,
Tu conserves la page en cours dans des variables de session pour revenir à la liste une fois la modification effectuée.
Comment est-ce que je peut faire cela?
Merci de ton aide.
Re: Executer enregistrement sur un pagination
Posté : 05 mars 2012, 16:51
par sirakawa
Il faut définir le mode opératoire pour faire des modifications. Il me semble que tu veux faire des modifications sur le mode d'une feuille de calcul Excel, ce qui n'est pas le plus simple.
Si tu débutes en PHP, il est plus simple de mettre un lien ou un bouton en face de chaque ligne d'afficher une page de modification de la ligne. Tu conserves la page en cours dans des variables de session pour revenir à la liste une fois la modification effectuée.
Il reste du travail de traduction à effectuer.
L'objectif, semble-t-il, est d'afficher le contenu d'une table Mysql (ou autre, même combat) en permettant de modifier les valeurs (ou certaines des valeurs) affichées, et en mettant la table à jour lorsqu'on passe à la page suivante.
Question à 1000 Euros:
Peut-on revenir à la page précédente, et, si oui, doit-on y afficher les valeurs modifiées?
Question banco:
Doit-on être capable d'annuler et de revenir aux valeurs antérieures?
Re: Executer enregistrement sur un pagination
Posté : 05 mars 2012, 17:03
par ruca
Salut sirakawa,
L'objectif, semble-t-il, est d'afficher le contenu d'une table Mysql (ou autre, même combat) en permettant de modifier les valeurs (ou certaines des valeurs) affichées, et en mettant la table à jour lorsqu'on passe à la page suivante.
C'est tout à fait cela.
Question à 1000 Euros:
Peut-on revenir à la page précédente, et, si oui, doit-on y afficher les valeurs modifiées?
Oui justement c'est le but recherché, de se balader dans les pages disponibles en enregistrant à chaque fois les modifs s'il en a.
Question banco:
Doit-on être capable d'annuler et de revenir aux valeurs antérieures?
Pour l'instant je le fais pas donc je pense qu'il n'est pas utile de le faire à moins que ce soit simple
Merci de ton aide
++
Re: Executer enregistrement sur un pagination
Posté : 05 mars 2012, 17:15
par sirakawa
IL faudrait peut-être travailler côté mysql
avec table innodb
start transaction;
savepoint tr;
insert into....
et:
commit; ou rollback to tr;
cf
http://dev.mysql.com/doc/refman/5.0/fr/commit.html
Re: Executer enregistrement sur un pagination
Posté : 06 mars 2012, 09:12
par ruca
Hello,
c'est gentil mais un peu trop dur pour moi. J'y ai fait un tour mais... me suis perdu.
Merci quand même.
Bonne journée. ++
Re: Executer enregistrement sur un pagination
Posté : 06 mars 2012, 10:08
par sirakawa
Question oubliée par moi:
Quand une page est affichée, les éléments sont afichés ligne par ligne.
Il y a au moins deux possiblités:
1) traiter les lignes au coup par coup : chaque ligne est munie de deux boutons
ENREGISTRER : enregistrer les modifs dans la table et réafficher la page avec les modifications
ANNULER : il y a deux niveaux possibles d'annulation : avant enregistrement ou après, mais, vu par l'utilisateur, il peut s'agir d'un seul bouton, quoique la programmation en soit unpeu compliquée.
2) traiter la page dans son ensemble (moins gourmand)
ENREGISTRER / ANNULER en restant sur la même page
ENREGISTRER/ ANNULER et PAGE SUIVANTE quand on toune la page et on ne verra les modifs qu'en faisant marche arrière, chacun de ces boutons agissant sur l'ensemble de la page.
Non, rollback c'était pour gérer les annulations et c'est assez simple quand on a interprété la doc:
start transaction;
savepoint retour;
insert ou autre commande Mysql;
à ce point, la table contient l'enregistrement, et on a deux choix: COMMIT enregistrement définitif; ROLLBACK retour à l'état où on se trouvait au moment du savepoint.
Re: Executer enregistrement sur un pagination
Posté : 06 mars 2012, 11:56
par ruca
Coucou sirakawa,
Merci de ta réponse, alors pour l'instant je traite ma page avec un bouton ENREGISTRER ET ANNULER pour l'ensemble de la page mais le problème est que de un si je suis en page 2 et j'enregistre je reviens à la page 1 et il me charge tous les contacts alors que j'avais un tri suite à un formulaire.
Donc je me suis dis que si j'ajoute une fonction d'enregistrement et ensuite changement de page cela fonctionnerais.
Je suis à court d'idées. Merci de tes lumières.
++
Re: Executer enregistrement sur un pagination
Posté : 06 mars 2012, 12:43
par Mazarini
Ce que j'imagine, c'est une page avec plusieurs lignes affichées, un lien précédent, un lien suivant et un bouton enregistré.
Il faut mettre un champs caché (numéro de page en input hidden) dans le formulaire pour conserver le numéro de page. les liens suivants et précédent ont un numéro de page en paramètre.
Pour le traitement :
Code : Tout sélectionner
Si action du bouton "enregistrer"
- mise à jour mysql
- $page = en fonction du champ hidden
sinon
si numéro de page transmis (via lien suivant ou précédent)
$page = page transmises
sinon
$page = 1
fin si
fin si
Affichage de la page suivant $page
Re: Executer enregistrement sur un pagination
Posté : 06 mars 2012, 14:44
par sirakawa
Ça veut dire qu'il faut mémoriser d'une page à l'autre les éléments conditionnant le tri:
J'ai la flemme d'expliquer avec des mots:
<?PHP
// la page par défaut est la page 1
$num_page = (isset($_POST['num_page'])) ? $_POST['num_page']: 1;
//il faudrait peut-être mettre des vérifications sur le critère
$critere = $_POST['critere'];
// enregistrements à partir de $limite_inf qui vaut 0 pour la page 1 (contrainte de mysql)
$limite_inf = 25*($num_page-1);
// enregistrements jusqu'à $limite_sup (+25 par exemple)
$decalage = 25;
// à adapter, tout ce qui suit étant lié à une base qui existe chez moi
mysql_connect('localhost','rossignol', '97!=Uyh_yter');
mysql_select_db ('dicos');
if ($num_page > 1) // mise à jour puisqu'on n'est pas en page 1
{
// 2ème ligne juste pour comprendre pourquoi on démarre à 2
$clefs = array_keys($_POST); // ce tableau contient les id des champs
//print_r($clefs); éventuellement mettre un print_r($_POST); et comparer les deux
$i = 2;
for ($i = 2; $i < 27; $i++)
{
$clef = $clefs[$i];
$valeur = $_POST[$clef];
// ici tu modifies ta table en te servant de $clef qui est la valeur de $id dans la table,
//et de $valeur qui est la valeur, ce que je ne fais pas
print "<br> qq ch";
print_r($valeur);
}
}
$requete = "SELECT * from `dico2` where categorie = '$critere' limit $limite_inf, $decalage";
$num_page += 1;
$res = mysql_query($requete);
print "
<form method ='post' action ='test.php'>
<input type = 'hidden' name = 'critere' value ='$critere' />
<input type='text' name = 'num_page' value ='$num_page' />";
$inputs = "";
while ($ligne = mysql_fetch_array($res, MYSQL_ASSOC))
{
$id = $ligne['id'];
$graphie = $ligne['graphie'];
$inputs .= "
<input type = 'text' readonly = 'readonly'value ='$id' /> <!--pour vérifier -->
<input type = 'text' name = '$id' value = '$graphie' /><br />";
}
print"
$inputs
<button type ='submit'> Page suivante (et enregistrer les changements éventuels)</button>
<button type = 'reset'>Annuler modifications</button>
</form>
";
?>
Re: Executer enregistrement sur un pagination
Posté : 06 mars 2012, 15:09
par ruca
Re-coucou,
Je vais essayer de comprendre tout cela et de l’appliquer sur mon code.
Merci de vos aides et exemples.
++