Executer enregistrement sur un pagination

Eléphanteau du PHP | 16 Messages

05 mars 2012, 10:44

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.

ViPHP
ViPHP | 2577 Messages

05 mars 2012, 10:54

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.

Eléphanteau du PHP | 16 Messages

05 mars 2012, 16:25

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.

Mammouth du PHP | 2278 Messages

05 mars 2012, 16:51

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?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 16 Messages

05 mars 2012, 17:03

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
++

Mammouth du PHP | 2278 Messages

05 mars 2012, 17:15

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
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 16 Messages

06 mars 2012, 09:12

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. ++

Mammouth du PHP | 2278 Messages

06 mars 2012, 10:08

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.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 16 Messages

06 mars 2012, 11:56

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.
++

ViPHP
ViPHP | 2577 Messages

06 mars 2012, 12:43

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

Mammouth du PHP | 2278 Messages

06 mars 2012, 14:44

Ç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>
";
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 16 Messages

06 mars 2012, 15:09

Re-coucou,
Je vais essayer de comprendre tout cela et de l’appliquer sur mon code.
Merci de vos aides et exemples.
++