garder une Session

Eléphant du PHP | 85 Messages

12 oct. 2006, 22:38

Bonjour,
moi j'ai un script qui affiche des données sur plusieurs page,
<?php
session_start();
if (isset($_POST['login'])) {
$login= $_POST['login'];
$_SESSION['login'] = $login;
}

?>
, mais il ne m'affiche que la 1ere page, (j'ai un système comme celui de skyblog 1|2|3|4|... ).
comment faire pour garder la trace de la session pour l administrateur dans les autres page admin.php?page=2, admin.php?page=3,.... ?
. ds la page admin.php j ai ce script :
if($page_en_cours > 0)
{
for($i = 0; $i < $page_en_cours; $i++)
{
$p = $i + 1;
$barre_nav .= "<a href=\"". $url . $i ."\" title=\"page ". $p ."\">". $p ."</a> | ";
}
}

Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 oct. 2006, 23:08

Modération : Pas de questions dans la FAQ !!
c'est pourtant écrit
Et pense à utiliser les balises
 pour encadrer le code
[/color]

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 85 Messages

13 oct. 2006, 01:07

dsl ,
mais c ça ta reponse !

Mammouth du PHP | 19672 Messages

13 oct. 2006, 08:03

dsl ,
mais c ça ta reponse !
Non, sa réponse est un avertissement de modération, la lecture des règles du forum n'est pas facultative. On est tous disposés à aider ceux qui le demandent à condition que chacun y mette un peu du sien.

Quant à ta question, est-ce qu'il ne manquerait pas un session_start() quelque part ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 85 Messages

15 oct. 2006, 16:52

Cyrano,
Dsl,
Normalement, j'utilise ton script d'affichage page par page.
J'ai lis pa mals de tutoriaux, mais y a pas une explication exacte qui a une relation avec ce genre de script ?page=1, ?page=2 ..
SVP, si vous avez une une solution pour mon probleme n'hesiter pas de me le dire,
je ve que lorsque l'administrateur se logue, sa session sera enregistré pour toutes les pages, dans mon cas, l'admin visite seulement la 1ere page, apres , il reçoit le message de login ou mot de passe vide ...
Merci

Eléphant du PHP | 85 Messages

15 oct. 2006, 16:58

Bon voilà mon script complet pour bien comprendre :
<?php
session_start(); 

if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
{

include ("connexion.php");
$login=$_POST['login'];
$password=$_POST['password'];


$identification = "SELECT COUNT(*) FROM `admin` where login='".$login."' and motpasse='".$password."'"; 
$req_id = mysql_query($identification) or die (mysql_error ()); 


if (mysql_result ($req_id, 0) == 0) 
{
?>
<h3><font color="#FF0000">Login ou mot de passe invalide </font> 
<a href="idAdmin.php">Retour</a></h3>
<?php

}
else
{
$_SESSION['login'] = $login;

if ( isset ($_SESSION['login']) ) {
$nom = $_SESSION['login'].' est le nom de la session';
 }
else {
$nom = "mais votre nom a été effacé";
}

/* Paramètres de pagination */ 
$nb_nouv_par_page = 2;             /* Nombre de nouvelles qui seront affichées sur chaque page */ 
$url = "./admin.php?page="; 

/* On détermine quelle est la page qui est actuellement affichée */ 
$page_en_cours    = isset($_GET['page']) ? $_GET['page'] : 0; 
$page_affichee    = ($page_en_cours + 1); 

/* Requête pour compter les nouvelles présentes dans notre base de données */ 
$sql_nb = "SELECT COUNT(*) FROM `bien` "; 

/* Exécution de la requête et récupération du résultat */ 
$resultat_1 = mysql_query($sql_nb); 
$nb_nouvelles = mysql_result($resultat_1, 0); 

/* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */ 
$nb_pages = ceil($nb_nouvelles / $nb_nouv_par_page); 

if($nb_pages > 0) 
{ 
    /* On définit une variable qui contiendra les données de navigation */ 
    $barre_nav = ""; 
    /* Nous avons au moins une page : avons nous besoin d'une barre de navigation ? */ 
    if($nb_pages > 1) 
    { 
	        if($page_en_cours > 0) 
        { 
		   for($i = 0; $i < $page_en_cours; $i++) 
            { 
                $p = $i + 1; 
                $barre_nav .= "<a href=\"". $url . $i ."\" title=\"page ". $p ."\">". $p ."</a> | "; 
            } 
        } 
		
        $barre_nav .= "<strong>". $page_affichee ."</strong>"; 
        /* Enfin on affiche (s'il y a lieu) les liens vers les pages suivantes */ 
        if(($page_affichee) < $nb_pages) 
        { 
            /* Il reste encore d'autres pages à afficher */ 
            $nb_suivantes = $nb_pages - ($page_affichee); 
            for($j = ($page_affichee); $j < $nb_pages; $j++) 
            {   
				$p = $j + 1; 
                $barre_nav .= " | <a href=\"". $url . $j ."\" title=\"page ". $p ."\">". $p ."</a>"; 
            } 
        } 
         
        /* On peut définir en plus la situation dans une autre variable à afficher ailleurs */ 
        $page_affichee = "Page ". $page_affichee ." sur un total de ". $nb_pages ." pages."; 
    } 
    else 
    { 
        /* Nous n'avons qu'une seule page, on peut se contenter d'afficher juste page 1/1 */ 
        $barre_nav .= "page 1/1"; 
    } 
	
    $debut = $page_en_cours * $nb_nouv_par_page; 
	$sql_n = "SELECT num, etat, typeb, surface, ville,prix,com,img_nom FROM bien LIMIT ". $debut .", ". $nb_nouv_par_page .";"; 
    $nouvelles = mysql_query($sql_n) or die (mysql_error ()); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" /> 
<title>Administration</title> 
<script language="javascript">
function ouvre_popup(url) {
popup=window.open(url,"nom_popup","menubar=no, status=no, scrollbars=no, menubar=no, width=400, height=300");
}
// Si la popup n'est pas la fenêtre active, on met le focus dessus pour qu'elle s'affiche en avant-plan
if (self.focus) {
popup.focus();
}
</script>




<style type="text/css"> 
/* <![CDATA[ */  
body { 
    color: #000; 
    background-color: #efefef; 
    font-family: verdana, helvetica, sans-serif; 
    font-size: 80% !important; 
} 
p.situation { 
    text-align: right; 
    padding: 1em; 
} 
p.navigation { 
    text-align: center; 
    font-size: 0.85em; 
    text-decoration: underline; 
} 
p.date_nouv { 
    float: right; 
    font-size: 0.85em; 
} 
/* ]]> */ 
</style> 
</head> 
<body> 
<p class="situation"><?php echo($page_affichee); ?></p> 
<table border=1 bordercolor="#CCCCCC"align="center">
<tr bgcolor="#666666" >
<td  width="100"><FONT  color="#FFFFFF">Numero :</FONT></td>
</tr>
<?php 
    while($nouv = mysql_fetch_assoc($nouvelles)) 
    { 
?> 

<tr bgcolor="#CCCCCC" bordercolor="#0099CC">
<td><?php echo($nouv['num']); ?></td>
</tr>
<?php
}
?>
</table>
    <?php 
	
	/* on libère la mémoire */ 
    mysql_free_result($resultat_1); 
    mysql_free_result($nouvelles); 
?> 
<p class="navigation"><?php echo($barre_nav); ?></p> 
<?php 
} 
else 
{ 
    /**  
    Nous n'avons aucune page, on peut alors afficher un message autre  
    sans devoir nous préoccuper de la navigation 
     */ 
?> 
<h3>Aucun bien n'a encore été ajouté</h3> 
<hr /> 
<?php 
} 
}
}

else
{

?>
<h3><font color="#FF0000">Veuillez saisir le Login et le mot de passe </font>
<a href="idAdmin.php">Retour</a></h3>
<?php
}
?> 
</body> 
</html> 

Merci a vous tous[/code]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2006, 18:31

C'est à cause de ce 1er test :
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
Lorsque tu changes de page les variables POST n'exisent plus tu te retrouves donc à chaque fois dans le "else".

modifie le script en y ajoutant une condition sur l'existence de la variable de session.
if ( (isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) || isset($_SESSION['login']))
Ajuste le reste du script... par exemple la requête n'est plus obligatoire si la variable de session existe.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 85 Messages

15 oct. 2006, 19:15

Merci bcp pour ton aide,
ça marche mais j'ai ajouté d autres ligne :

Code : Tout sélectionner

<?php session_start(); if (!empty($_POST['login'])) { $login=$_POST['login']; $password=$_POST['password']; } else { $login=$_SESSION['login']; $password=$_SESSION['password']; }
et en bas dans le okAdmin :

Code : Tout sélectionner

$_SESSION['login'] = $login; $_SESSION['password'] = $password;
[/code]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2006, 19:19

En principe on ne place pas de mot de passe en session.
Le passe ne doit servir qu'a l'identification.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 85 Messages

15 oct. 2006, 19:49

T as raison,
mais pour $login et $password, je les ai stocke ds $_SESSION, car ils vont me servir dans la requette

select count(*) .... where login=$login et motpasse=$password.
tu me comprend mnt?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2006, 20:32

oui je m'en doutais un peu...
Mais
Ajuste le reste du script... par exemple la requête n'est plus obligatoire si la variable de session existe.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute