PHP / checkbox et pagination , petit souci
Fermé
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
-
26 sept. 2008 à 16:50
Mikey_UFC - 25 janv. 2011 à 10:05
Mikey_UFC - 25 janv. 2011 à 10:05
A voir également:
- PHP / checkbox et pagination , petit souci
- Easy php - Télécharger - Divers Web & Internet
- Petit 1 comme ² ✓ - Forum Windows
- Excel trier du plus grand au plus petit - Guide
- Pagination powerpoint - Guide
- Petit colis distribution - Forum Réseaux sociaux
12 réponses
généralement, les checkbox sont pour des formulaires<form>.. ou pour du javascript<script src= >.. (ou les deux..)
j'utiliserais les cookies javascript pour stocké l'état des checkbox,
puis un lien/évènement javascript pour la validation final qui enverra l'état des checkbox au serveur
pour le checkbox :
<input type="checkbox" name=".." onchange="changeCheck(this)" ..
pour l'envoi : (l'un des choix)
lien: <a href="javascript:ValidCheck()" ..
évènement: <.. onclick="ValidCheck()" ..
changement de page: <body onunload="return ValidCheck()" ..
pour le rechargement :
<body onload="autoCheck()" ..
"Cela me parait super complexe mais je pense que ce n'est qu'une simple petite manipulation pour vous ."
je ne crois pas !
sinon, je simplifierais tous avec un formulaire dont les seuls champs sont les checkbox, et tous les liens qui n'annule pas deviendront des boutons, ou des liens javascript : <a href="javascript:validSubmit('actionLien')" ...
j'utiliserais les cookies javascript pour stocké l'état des checkbox,
puis un lien/évènement javascript pour la validation final qui enverra l'état des checkbox au serveur
pour le checkbox :
<input type="checkbox" name=".." onchange="changeCheck(this)" ..
pour l'envoi : (l'un des choix)
lien: <a href="javascript:ValidCheck()" ..
évènement: <.. onclick="ValidCheck()" ..
changement de page: <body onunload="return ValidCheck()" ..
pour le rechargement :
<body onload="autoCheck()" ..
"Cela me parait super complexe mais je pense que ce n'est qu'une simple petite manipulation pour vous ."
je ne crois pas !
sinon, je simplifierais tous avec un formulaire dont les seuls champs sont les checkbox, et tous les liens qui n'annule pas deviendront des boutons, ou des liens javascript : <a href="javascript:validSubmit('actionLien')" ...
comme je le disait, tu à 2 choix :
1- soit tu fait un grand formulaire (<form name=nomForm>),
et tu remplace les liens par :
1.1- des <input type=submit name=typeAction value="nomAction">
ou
1.2- des <a href="javascript:forms['nomForm'].action='maPage';forms['nomForm'].submit()">NomAction</a>
puis tu traite l'actualisation de tes checkbox en PHP..
2- sinon, tu fait en Javascript
(le transfert et l'actualisation des checkbox se fait en javascript, le PHP seras là que pour traiter le choix au dernier moment)
voici un exemple de <script> qui mémorise tous les <input> pour les restituer sur la page suivante qui aurait le même <script> (mais pas obligatoirement les mêmes <input>)
<html>
<head>
<script language="javascript"><!--
//transformation des liens, et mise en forme des Inputs
function transformLink()
{ //recherche des liens : modification pour mémoriser les <input>
var links= document.links
for(var i=0; i<links.length; i++)
{ if(links[i].href)
links[i].href="javascript:redirLink('"+links[i].href+"')";
}
//restauration des choix de la page précédentes
var params= location.search.substr(1).split('&')
for(var i=0; i<params.length; i++)
{ //séparation des éléments : "nom=valeur"
var param= params[i].split('=');
if( param.length<2 )
param[1]= param[0]; //!!
saveParams(param[0], unescape(param.slice(1).join('=')) )
}
//lance le OnLoad précédent (si il existait)
if(transformLink.saveLoader)
transformLink.saveLoader();
}
//sauvegarde le OnLoad précédent
transformLink.saveLoader= window.onload;
//affecte le nouveau OnLoad
window.onload= transformLink;
//mémorise un 'choix' (nom=valeur)
function saveParams(nom, valeur)
{ var isSet= false;
//parcour tous les éléments ayant le nom donnée pour y affecté la valeur
var elmts= document.getElementsByName(nom)
for(var j=0; j<elmts.length; j++)
{ switch(elmts[j].type.toLowerCase()) //selon le type
{ case 'checkbox':
if(elmts[j].value==valeur)
elmts[j].checked= isSet=true;
break;
case 'radio':
if(elmts[j].value==valeur)
elmts[j].checked= isSet=true;
break;
default :
elmts[j].value= valeur;
isSet= true
}
}
//si il n'existant pas, créer le nouveau élement <input type=hidden>
if(!isSet)
{ var newInput= document.createElement('input');
newInput.type= "hidden";
newInput.name= nom;
newInput.value= valeur;
document.body.appendChild(newInput); //rajoute l'élément
}
}
//utliser pour valider le liens tout en ajoutant les autres <input>
function redirLink(lienURL)
{ //affectation les nouveaux 'choix' retrouvé sur l'URL du lien (cf. location.search)
var params= lienURL.split('#')[0].split('?').slice(1).join('?').split('&')
for(var i=0; i<params.length; i++)
{ //séparation des éléments : "nom=valeur"
var param= params[i].split('=');
if( param.length<2 )
param[1]= param[0]; //!!
saveParams(param[0], unescape(param.slice(1).join('=')) )
}
//cherche l'Ancre du lien
var ancre= lienURL.split('#').slice(1).join('#')
//fait la liste des 'choix' de tous les <input>
var addParm= "";
var inputs= document.getElementsByTagName('input') //sauf <textarea> et <input type=file>
for(var i=0; i<inputs.length; i++)
{ if(inputs[i].name)
{ switch(inputs[i].type.toLowerCase()) //selon le type
{ case 'checkbox':
if(inputs[i].checked)
addParm+='&'+inputs[i].name+'='+escape(inputs[i].value);
break;
case 'radio':
if(inputs[i].checked)
addParm+='&'+inputs[i].name+'='+escape(inputs[i].value);
break;
default :
addParm+='&'+inputs[i].name+'='+escape(inputs[i].value);
}
}
}
//recalcule le nouveau lien (transmet les <input> en mode Get)
lienURL= lienURL.split('#')[0].split('?')[0]+(addParm?'?'+addParm.substr(1):'')+(ancre?'#'+ancre:'')
//redirige la page..
location= lienURL;
}
// -->
</script>
</head>
<body>
<noscript>attention, votre naviguateur ne supporte pas les scripts !!</noscript>
<input type=Checkbox name=toto value=5>
<input type=Checkbox name=toto value="">
<input type=Checkbox name=tutu>
<input type=submit >
<a href="?k=12#6">12</a>
<a href="?k=15">15</a>
</body>
</html>
1- soit tu fait un grand formulaire (<form name=nomForm>),
et tu remplace les liens par :
1.1- des <input type=submit name=typeAction value="nomAction">
ou
1.2- des <a href="javascript:forms['nomForm'].action='maPage';forms['nomForm'].submit()">NomAction</a>
puis tu traite l'actualisation de tes checkbox en PHP..
2- sinon, tu fait en Javascript
(le transfert et l'actualisation des checkbox se fait en javascript, le PHP seras là que pour traiter le choix au dernier moment)
voici un exemple de <script> qui mémorise tous les <input> pour les restituer sur la page suivante qui aurait le même <script> (mais pas obligatoirement les mêmes <input>)
<html>
<head>
<script language="javascript"><!--
//transformation des liens, et mise en forme des Inputs
function transformLink()
{ //recherche des liens : modification pour mémoriser les <input>
var links= document.links
for(var i=0; i<links.length; i++)
{ if(links[i].href)
links[i].href="javascript:redirLink('"+links[i].href+"')";
}
//restauration des choix de la page précédentes
var params= location.search.substr(1).split('&')
for(var i=0; i<params.length; i++)
{ //séparation des éléments : "nom=valeur"
var param= params[i].split('=');
if( param.length<2 )
param[1]= param[0]; //!!
saveParams(param[0], unescape(param.slice(1).join('=')) )
}
//lance le OnLoad précédent (si il existait)
if(transformLink.saveLoader)
transformLink.saveLoader();
}
//sauvegarde le OnLoad précédent
transformLink.saveLoader= window.onload;
//affecte le nouveau OnLoad
window.onload= transformLink;
//mémorise un 'choix' (nom=valeur)
function saveParams(nom, valeur)
{ var isSet= false;
//parcour tous les éléments ayant le nom donnée pour y affecté la valeur
var elmts= document.getElementsByName(nom)
for(var j=0; j<elmts.length; j++)
{ switch(elmts[j].type.toLowerCase()) //selon le type
{ case 'checkbox':
if(elmts[j].value==valeur)
elmts[j].checked= isSet=true;
break;
case 'radio':
if(elmts[j].value==valeur)
elmts[j].checked= isSet=true;
break;
default :
elmts[j].value= valeur;
isSet= true
}
}
//si il n'existant pas, créer le nouveau élement <input type=hidden>
if(!isSet)
{ var newInput= document.createElement('input');
newInput.type= "hidden";
newInput.name= nom;
newInput.value= valeur;
document.body.appendChild(newInput); //rajoute l'élément
}
}
//utliser pour valider le liens tout en ajoutant les autres <input>
function redirLink(lienURL)
{ //affectation les nouveaux 'choix' retrouvé sur l'URL du lien (cf. location.search)
var params= lienURL.split('#')[0].split('?').slice(1).join('?').split('&')
for(var i=0; i<params.length; i++)
{ //séparation des éléments : "nom=valeur"
var param= params[i].split('=');
if( param.length<2 )
param[1]= param[0]; //!!
saveParams(param[0], unescape(param.slice(1).join('=')) )
}
//cherche l'Ancre du lien
var ancre= lienURL.split('#').slice(1).join('#')
//fait la liste des 'choix' de tous les <input>
var addParm= "";
var inputs= document.getElementsByTagName('input') //sauf <textarea> et <input type=file>
for(var i=0; i<inputs.length; i++)
{ if(inputs[i].name)
{ switch(inputs[i].type.toLowerCase()) //selon le type
{ case 'checkbox':
if(inputs[i].checked)
addParm+='&'+inputs[i].name+'='+escape(inputs[i].value);
break;
case 'radio':
if(inputs[i].checked)
addParm+='&'+inputs[i].name+'='+escape(inputs[i].value);
break;
default :
addParm+='&'+inputs[i].name+'='+escape(inputs[i].value);
}
}
}
//recalcule le nouveau lien (transmet les <input> en mode Get)
lienURL= lienURL.split('#')[0].split('?')[0]+(addParm?'?'+addParm.substr(1):'')+(ancre?'#'+ancre:'')
//redirige la page..
location= lienURL;
}
// -->
</script>
</head>
<body>
<noscript>attention, votre naviguateur ne supporte pas les scripts !!</noscript>
<input type=Checkbox name=toto value=5>
<input type=Checkbox name=toto value="">
<input type=Checkbox name=tutu>
<input type=submit >
<a href="?k=12#6">12</a>
<a href="?k=15">15</a>
</body>
</html>
Mikey_UFC
Messages postés
312
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
2 août 2010
1
26 sept. 2008 à 17:11
26 sept. 2008 à 17:11
Tout dépend comment tu changes de page, tu peux faire un submit et donc mettre les valeurs dans des champs cachés (hidden) à chaque page ou utiliser les variables de session.
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
26 sept. 2008 à 17:16
26 sept. 2008 à 17:16
le nombre de page n'est pas défini, les valeurs des choix a selectionner sont dynamiques !
bref , comment utiliser les sessions ?
comment recuperer et concatener a chake page le resultat de mes choix ?
??? Merci
bref , comment utiliser les sessions ?
comment recuperer et concatener a chake page le resultat de mes choix ?
??? Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mikey_UFC
Messages postés
312
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
2 août 2010
1
26 sept. 2008 à 17:17
26 sept. 2008 à 17:17
" Le nombre de page n'est pas défini, les valeurs des choix a selectionner sont dynamiques " => ça ne répond pas à ma question => comment tu changes de page ?
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
26 sept. 2008 à 17:23
26 sept. 2008 à 17:23
Tout dépend comment tu changes de page, tu peux faire un submit et donc mettre les valeurs dans des champs cachés (hidden) à chaque page ou utiliser les variables de session.
je croyais que ceci etait une affirmation ...
C'est une pagination du Style Digg, le nombre de resultat est découpé et en bas de ma page se trouve la pagination avec des liens .
je croyais que ceci etait une affirmation ...
C'est une pagination du Style Digg, le nombre de resultat est découpé et en bas de ma page se trouve la pagination avec des liens .
Mikey_UFC
Messages postés
312
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
2 août 2010
1
26 sept. 2008 à 17:39
26 sept. 2008 à 17:39
Si tu dois récupérer des valeurs, à priori ça veut dire que l'utilisateur remplit un formulaire :
donc pour récupérer les valeurs, il te faut un submit.
tu peux par exemple, quand tu cliques sur un lien, modifier dynamiquement via javascript l'url à laquelle ton formulaire doit être envoyer par celle où tu veux être redirigé et ensuite tu envoies ton formulaire.
tes liens auront un attribut OnClick de la forme :
Après tu as toujours les 2 solutions pour stocker tes valeurs, champs cachés ou variable de session
donc pour récupérer les valeurs, il te faut un submit.
tu peux par exemple, quand tu cliques sur un lien, modifier dynamiquement via javascript l'url à laquelle ton formulaire doit être envoyer par celle où tu veux être redirigé et ensuite tu envoies ton formulaire.
tes liens auront un attribut OnClick de la forme :
OnClick=monForm.action=NewURL;monForm.submit();
Après tu as toujours les 2 solutions pour stocker tes valeurs, champs cachés ou variable de session
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
29 sept. 2008 à 11:04
29 sept. 2008 à 11:04
je n'ai pas de submit !
je change de page juste a l'aide d'une fonction pagination dont voici le code :
je change de page juste a l'aide d'une fonction pagination dont voici le code :
<?php include('bdd.php'); require_once('config.php'); function pagination($total,$courante) { /* on définit quelques variables dont on aura besoin */ $prec = $courante - 1; // numéro de la page précédente $suiv = $courante + 1; // numéro de la page suivante $avder = $total - 1; // avant dernière page $adjacentes = 3; // nombre de pages à afficher de chaque côté de la page courante /* On commence la pagination que l'on stocke dans la variable à retourner pagination() pourra ainsi être appelée plusieurs fois, en haut et en bas d'une page par exemple */ $pagination = ""; // s'il n'ya pas au moins deux pages, on n'affiche rien if($total > 1) // il y a au moins deux pages { // on commence par stocker dans $pagination le <div> d'ouverture $pagination .= "<div class=\"pagination\">\n"; // on affiche d'abord le bouton précédent if ($courante == 2) // si on est sur la page 2, le bouton précédent renvoit sur la page initiale, il est inutile de mettre ?page=1 sinon on se retrouve avec un duplicate content $pagination.= "<a href=\"liste.php\">« préc</a>"; elseif ($courante > 2) // si la page actuelle est supérieure à 2 le bouton précédent renvoit sur la page dont le numéro est immédiatement inférieur $pagination.= "<a href=\"liste.php?page=$prec&total_pages=$total\">« préc</a>"; else // sinon on est sur la page 1 : on désactive le bouton précédent. on est nécessairement sur la page 1 car on a fait le traitement des pages dans liste.php, pas besoin de mettre elseif ($courante==1) $pagination.= "<span class=\"desactive\">« préc</span>"; /** On affiche maintenant les pages. On cherchera à afficher au maximum 11 numéros de page en général, et 12 dans le cas 1 où il n'y a pas de troncature : - dans un 1er cas, il n'y a pas assez de pages pour "tronquer la pagination" : on affiche toutes les pages - dans le 2ème cas, il y a trop de pages : la troncature s'effectue selon la page sur laquelle on est positionnée */ // CAS 1 : il n'y a pas assez de pages pour tronquer, on les affiche toutes (voir figure 1) if ($total < 7 + ($adjacentes * 2)) { /* on AJOUTE la page 1. On la traite séparément pour avoir liste.php au lieu de liste.php?page=1 et ainsi éviter le duplicate content cette ligne équivaut à : if ($courante == 1) $pagination.= "<span class=\"courante\">1</span>"; else $pagination.= "<a href=\"liste.php\">1</a>"; */ $pagination.= ($courante == 1) ? "<span class=\"courante\">1</span>" : "<a href=\"liste.php\">1</a>"; // pour les pages restantes on utilise une simple boucle for for ($compteur = 2; $compteur <= $total; $compteur++) { if ($compteur == $courante) // on affiche la page courante différemment pour la mettre en évidence $pagination.= "<span class=\"courante\">$compteur</span>"; else $pagination.= "<a href=\"liste.php?page=$compteur&total_pages=$total\">$compteur</a>"; } } // CAS 2 : on a assez de pages pour tronquer en fonction de la page actuelle elseif($total > 5 + ($adjacentes * 2)) { /* on est placé dans la partie proche des premières pages, on tronque donc la fin de la pagination. l'affichage sera 9 pages à gauche ... 2 pages à droite (voir figure 2) */ if($courante < 1 + ($adjacentes * 2)) { // on affiche la page 1 comme vu précédemment $pagination.= ($courante == 1) ? "<span class=\"courante\">1</span>" : "<a href=\"liste.php\">1</a>"; // puis les huit pages suivantes for ($compteur = 2; $compteur < 4 + ($adjacentes * 2); $compteur++) { if ($compteur == $courante) $pagination.= "<span class=\"courante\">$compteur</span>"; else $pagination.= "<a href=\"liste.php?page=$compteur&total_pages=$total\">$compteur</a>"; } // les ... pour marquer la troncature $pagination.= " ... "; // et enfin les deux dernières pages $pagination.= "<a href=\"liste.php?page=$avder&total_pages=$total\">$avder</a>"; $pagination.= "<a href=\"liste.php?page=$total&total_pages=$total\">$total</a>"; } /* on est placé dans la partie centrale de notre pagination, on tronque donc le début et la fin de la pagination. l'affichage sera 2 pages à gauche ... 7 pages au centre ... 2 pages à droite (voir figure 3) */ elseif($total - ($adjacentes * 2) > $courante && $courante > ($adjacentes * 2)) { // on affiche les deux premières pages $pagination.= "<a href=\"liste.php\">1</a>"; $pagination.= "<a href=\"liste.php?page=2\">2</a>"; // les ... pour marquer la troncature $pagination.= " ... "; // puis sept pages : les trois précédent la page courante, la page courante, puis les trois lui succédant for ($compteur = $courante - $adjacentes; $compteur <= $courante + $adjacentes; $compteur++) { if ($compteur == $courante) $pagination.= "<span class=\"courante\">$compteur</span>"; else $pagination.= "<a href=\"liste.php?page=$compteur&total_pages=$total\">$compteur</a>"; } // les ... pour marquer la troncature $pagination.= " ... "; // et enfin les deux dernière spages $pagination.= "<a href=\"liste.php?page=$avder&total_pages=$total\">$avder</a>"; $pagination.= "<a href=\"liste.php?page=$total&total_pages=$total\">$total</a>"; } /* sinon on est placé dans la partie de droite, on tronque donc le début de la pagination. l'affichage sera 2 pages à gauche ... 9 pages à droite (voir figure 4) */ else { // on affiche les deux premières pages $pagination.= "<a href=\"liste.php\">1</a>"; $pagination.= "<a href=\"liste.php?page=2\">2</a>"; // les ... pour marquer la troncature $pagination.= " ... "; // et enfin les neuf dernières pages for ($compteur = $total - (2 + ($adjacentes * 2)); $compteur <= $total; $compteur++) { if ($compteur == $courante) $pagination.= "<span class=\"courante\">$compteur</span>"; else $pagination.= "<a href=\"liste.php?page=$compteur&total_pages=$total\">$compteur</a>"; } } } // pour finir on affiche le bouton suivant if ($courante < $compteur - 1) $pagination.= "<a href=\"liste.php?page=$suiv&total_pages=$total\">suiv »</a>\n"; else $pagination.= "<span class=\"desactive\">suiv »</span>\n"; $pagination.= "</div>\n"; } // et on retourne $pagination au programme appelant la fonction return ($pagination); } ?>
Mikey_UFC
Messages postés
312
Date d'inscription
jeudi 8 mars 2007
Statut
Membre
Dernière intervention
2 août 2010
1
29 sept. 2008 à 19:07
29 sept. 2008 à 19:07
Ben les submit, tu les mets dans tes liens avec : OnClick=monForm.action=NewURL;monForm.submit(); et tu vires le href.
Sachant qu'il te faudra une fonction appelée sur toutes les pages qui traitera tes checkbox.
Sachant qu'il te faudra une fonction appelée sur toutes les pages qui traitera tes checkbox.
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
30 sept. 2008 à 12:14
30 sept. 2008 à 12:14
je suis désolé, je n'ai strictement rien compri ... n'y a t'il pas un moyen de mettre en session ces checkbox a chake page visitée ?
Cela me parait super complexe mais je pense que ce n'est qu'une simple petite manipulation pour vous .
D'avance, Merci
Cela me parait super complexe mais je pense que ce n'est qu'une simple petite manipulation pour vous .
D'avance, Merci
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
30 sept. 2008 à 14:00
30 sept. 2008 à 14:00
up
dubuducu
Messages postés
391
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
19 mai 2010
4
1 oct. 2008 à 11:44
1 oct. 2008 à 11:44
merci beaucoup d'avoir pri le temps de me repondre mais je ne maitrise pas du tout le javascript*. jme n'ai strictement rien pigé !
je ne vois pas comment procéder.
je déprime
je ne vois pas comment procéder.
je déprime