Vous n'êtes pas identifié(e).
Bonjour,
décidément, je n'ai pas de chance avec mes variables de session...
Ce bug est trivial. Il n'y a pas de JavaScript cette fois ci...
J'ai ajouté des liens de navigation dans les derniers inscrits du genre "<< < > >>", premiers, précédents, suivants et derniers.
Pour savoir où j'en suis dans les derniers inscrits, j'ai une variable de session $_SESSION['courant'] qui contient l'id du membre courant.
Dans index.php, j'initialise cette variable de session avec le nombre d'inscrits:
// sélection de la base
mysql_select_db('ma_base',$db) or die('Erreur de selection '.mysql_error());
// On compte le nombre d'inscrits
$sql="select * FROM inscription";
$result=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
// Le membre courant est le nombre de membres
$_SESSION['courant']=mysql_num_rows($result);
?>
Une fois que l'utilisateur est loggé, on ne reviens jamais dans index.php et on va dans accueil.php:
derniers_inscrits.php m'affiche les 20 derniers inscrits dans l'ordre inverse (du plus récent au plus ancien) à partir de $_SESSION['courant'].
calc_inscrits.php, suivant la direction de la navigation, me calcule l'utilisateur courant:
Une fois le calcul effectué, on va directement à l'accueil.
Le bug: une fois le calcul effectué dans calc_inscrits.php, ça m'affiche bien la bonne valeur de la variable de session:
Dans calc_inscrits.php: 20
Par contre, lorsque je suis revenu dans accueil.php, ça m'affiche l'ancienne valeur, à savoir celle avec laquelle j'ai initialisé cette variable de session dans index.php:
Dans accueil.php: 29
(J'ai pour l'instant 29 inscrits).
Or, je ne reviens jamais dans index.php...
Et si je l'initialise avec une valeur arbitraire dans index.php (par exemple: 15), c'est toujours cette valeur qui est affichée:
Dans accueil.php: 15
Tout se passe comme si ma variable de session n'était pas modifiée dans calc_inscrits.php...
Merci pour votre aide !
Ralph303
Hors ligne
Hello,
Simplement, tu ne t'y prends pas de la bonne manière...
Pour commencer :
Actuellement ta requête te récupère tous les inscrits de ta base de manière systématique. Il y a une fonction MySql qui compte très bien pour toi et elle s'appelle COUNT() :
Avec un mysql_fetch_array() (http://fr2.php.net/manual/en/function.m … -array.php) tu auras facilement ton total.
Note : En plus tu fais un SELECT * ce qui est bouuuuhhh pas beau vilain !
Ensuite :
Visiblement tu calcule les bornes de l'intervalle d'affichage de tes membres. Encore une fois tu peux facilement rapatrier uniquement les lignes qui t'intéresse avec du SQL, c'est la clause LIMIT [enregistrement de départ], [Nombre de résultats à rapatrier]
Mais encore :
Tu as mis en place une pagination, je te recommande de passer en paramètre la page sur laquelle tu veux te rendre et de faire une fonction qui à partir de ce chiffre te permet de calculer tes bornes. (début et fin si nécessaire)
En conclusion :
Tu n'as pas besoin des variable de sessions pour faire ce que tu fais actuellement.
Les variables de sessions ne sont utilisées que lorsque tu ne peux pas faire autrement ou que le paramètre dont tu as besoin est utilisé partout dans le site et qu'il est lourdingue de le passer d'une page à l'autre systématiquement.
Or tu n'es clairement dans aucun de ces cas.
Si tu as des question sur comment faire ce que tu demande proprement, je me tiens à ton entière disposition
Bonne chance
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Merci d'avoir répondu si rapidement, Maskime !
En effet, mon SQL n'est pas optimisé...
Merci pour cette précision et ces explications.
Mais je suis qd même obligé d'utiliser une variable de session car je veux que le calcul se fasse lorsque je clique sur un lien...
Et je ne sais pas appeler une fonction de calcul en cliquant sur un lien autrement qu'avec JavaScript avec onclick.
Or, je crois qu'il faut utiliser le moins possible JavaScript... (J'ai récemment eu une mésaventure avec JavaScript sur ce forum, j'avais fait
compliqué alors qu'on pouvait faire simple.)
Et comment garder en mémoire la dernière page affichée sans variable de session ?
De plus, l'affichage de mes pages se fait avec un require('derniers_inscrits.php');
Or, je ne sais pas comment passer le résultat du calcul au script derniers_inscrits.php...
Et ce n'est qd même pas normal que cette variable de session ne sois pas modifiée dans calc_inscrits.php, même si je dois procéder autrement
et ne pas utiliser de variable de session...
Ralph303
Dernière modification par Ralph303 (28-12-2009 18:15:19)
Hors ligne
Hello,
Pour la variable de session, je ne dis pas, il y a un certainement un problème dans ton code, mais tu as rendu la chose tellement compliquée que je ne suis pas sûr de voir où pourrais être le problème.
Quoi qu'il en soit ton problème sur comment savoir sur quelle page tu te trouve n'en n'est pas un.
Je te donne les grandes ligne de la mécanique que tu dois appliquer pour faire ce que tu veux :
1. Compter le nombre de lignes totales que tu dois afficher.
2. A partir de ce chiffre et le nombre de lignes que tu veux afficher par page tu obtiens un nombre de pages total
3. Une fois que tu connais les 2 infos précédentes, si on te donne la page que l'on veut afficher tu peux déterminer les enregistrements à afficher.
L'astuce que tu ne vois pas est qu'il faut mettre le calcul des bornes de ton intervalle dans la page qui affiche les enregistrements.
Je te met un morceau de code ici, je te renvois à ma signature pour toutes réclamations :
// Ici je récupère le nombre total d'utilisateurs dans ta table
$sCountQuery = "SELECT COUNT(userid) as Total FROM inscription";
$rResult = mysql_query($sCountQuery) or die('Erreur SQL !'.$sCountQuery.'<br>'.mysql_error());
$aRow = mysql_fetch_array($rResult);
$iTotalResult = $aRow['Total'];
if($iTotalResult > 0){
// Ici je calcule le nombre de pages dont je vais avoir besoin pour afficher tous les utilisateurs
// en me basant sur le fait que je veux afficher "$iNbLinePerPage" lignes par page
$iNbPages = ceil($iTotalResult / $iNbLinePerPage); // Attention le ceil() est important parce qu'il te faut un entier or une division
// peut te donner un float
// Ici je vérifie que le numéro de la page que je recois en paramètre est valide
// => Ne jamais faire confiance aux informations provenant du navigateur !!! => GOLDEN RULE !!!
if( (isset($_GET['page']) === true) && (empty($_GET['page']) === false) ){
$iBrowserPage = $_GET['page'];
if( ($iBrowserPage > 0) && ($iBrowserPage < $iNbPages) ){
$iCurrentPage = $iBrowserPage;
}
}
// Ici je calcule l'enregistrement de départ de la page demandée
$iStartOffset = $iNbLinePerPage * ($iCurrentPage - 1);
// Et voici la requête SQL qui te permet de ramener uniquement ce dont tu as besoin dans tes informations.
$sResultQuery = '';
$sResultQuery .= 'SELECT userid, jesuis, journaiss, ';
$sResultQuery .= ' moisnaiss, anneenaiss, ville, ';
$sResultQuery .= ' pseudo, photo ';
$sResultQuery .= ' FROM inscription '
$sResultQuery .= ' WHERE 1 = 1 ';
$sResultQuery .= ' LIMIT ' . $iStartOffset . ', ' . $iNbLinePerPage;
$rResult = mysql_query($sResultQuery) or die('Erreur SQL !'.$sResultQuery.'<br>'.mysql_error());
//Une fois que tu as le résultat tu fais ce que tu veux ;)
}
else{
echo "Pas d'utilisateur à afficher.";
}
?>
Tu dois pouvoir mettre ce bout de code à peu près n'importe où dans ton code car le $_GET est accessible de n'importe où dans ton code (c'est pas pour rien que l'on appelle ça un tableau Super Global ) Et pas de SESSION
Si tu as des questions, pose les
Dernière modification par Maskime (29-12-2009 15:10:21)
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Ah ok ! Je ne savais pas que le $_GET était accessible n'importe où dans mon code...
Donc, je vais utiliser mes 80% de réflexion sur la base de ce que tu m'as dit...
Merci Maskime !
Hors ligne
Ok, j'ai utilisé ton code et ça marche !
Effectivement, pas besoin de variable de session, le $_GET suffit...
J'ai encore un petit pb concernant le calcul de l'offset, car j'affiche ma table du dernier membre inscrit au premier.
Mais ça, je peux le résoudre tout seul. Il me suffit de réfléchir un peu...
Enfin, pour le moment, j'ai beaucoup réfléchi et je suis fatigué.
Je verrai ce pb qd je serai reposé...
Merci encore pour ton aide, Maskime !
Hors ligne