2012-08-23 8 views
1

Merci à tous les utilisateurs de stackoverflow, j'ai maîtrisé la plupart des aspects du contrôle de base de données (sqlite) en utilisant php en quelques jours !!! Et réussi à construire un cms de base crud. Je suis en train de faire des améliorations mineures et je suis resté sur 'enregistrer le tri de la base de données dans une session'. Lorsque je clique sur la page et que je reviens, la session n'est pas enregistrée. J'ai été si loin et cela semble être une pierre d'achoppement frustrante. C'est ce que j'ai:enregistrer le tri de base de données dans une session

 session_start(); 
     $_SESSION['sort'] = $_GET['sort']; 
     $savedsort = $_SESSION['sort']; // store session data 

if(!empty($_GET['sort']) && ctype_alnum(trim($_GET['sort']))) 
$sort = trim($_GET['sort']);?> ///if page is empty 

    //links to sort data 
<h2><?php echo $savedsort;?></h2> 
     <table border="0" align="center" cellpadding="8" cellspacing="0" id="show"><tr><th width="5"><a href="?sort=id">ID</a></th><th>IMG</th><th><a href="?sort=name">NAME</a></th> 
     <th width="10"><a href="?sort=cat">CAT</a></th></tr> 

    //query string 
    ///////////////////////////////////////sort columns //////////////////////////////// 
    if($sort == $savedsort){ 
    $result = $db->query("SELECT * FROM '$table1' ORDER BY '$savedsort' "); 
    } 
    else{$result = $db->query("SELECT * FROM '$table1' ORDER BY id ");} 
    ////////////////////////////////////////////////////////////////////////////////////// 
    foreach($result as $row){ 

... tout pointeur grandement apprécié. Merci d'avance.

Savès en variable de session maintenant, merci mais ne sera pas mise à jour chaîne de requête

session_start(); 
if (isset($_GET['srt'])) 
{ $_SESSION['srt'] = $_GET['srt']; } 
$srt = $_SESSION['srt']; 
<tr><th width="5"><a href="?srt=id">ID</a></th><th>IMG</th><th><a href="?srt=name">NAME</a></th><th width="10"><a href="?srt=menu">CAT</a></th>........ 

$srtd = $db->query("SELECT * FROM '$table1' ORDER BY '$srt' "); ////////////////////////////////////////////////////////////////////////////////‌​////// foreach($srtd as $row){ $id=$row['id']; 

mais cette méthode fonctionne: est le code ci-dessus ok?

///////////////////////////////////////sort columns //////////////////////////////// 
if ($srt=='name'){$srtd = $db->query("SELECT * FROM '$table1' ORDER BY name ");} 
elseif($srt=='id'){$srtd = $db->query("SELECT * FROM '$table1' ORDER BY id ");} 
elseif($srt=='menu'){$srtd = $db->query("SELECT * FROM '$table1' ORDER BY menu ");} 
else{$srtd = $db->query("SELECT * FROM '$table1' ORDER BY id ");} 
////////////////////////////////////////////////////////////////////////////////////// 

Merci pour Nick ;-) La chose étrange est que je guillemets simples dans cette requête et il fonctionne $dropdown = $db->query("SELECT * FROM '$table2' WHERE menu = '$menu'"); mais je vais utiliser les tiques dos à partir de maintenant

+1

Chaque fois que vous visitez cette page, vous affectez la variable '$ _SESSION ['sort']'. Si '$ _GET ['sort']' ne sera pas défini, votre variable de session sera également nulle. Vous devez donc vérifier que vous devez affecter une variable ou non. – Leri

Répondre

3

Vous assiging $_SESSION['sort'] = $_GET['sort']; chaque fois que vous visitez la page, et si $_GET['sort'] n'est pas défini, il va juste changer $_SESSION['sort'] à une valeur nulle.

Modifier à:

if (isset($_GET['sort'])) { 
    $_SESSION['sort'] = $_GET['sort']; 
} 

et il devrait fonctionner

Edit:

Votre requête doit être mis à jour:

SELECT * FROM `$table1` ORDER BY `$srt` 

Notez l'utilisation de dos tiques ` au lieu de guillemets simples. Les marques de retour sont utilisées pour les noms de tables, les citations sont utilisées pour les chaînes.

+0

Sauvegarde dans la variable de session maintenant, merci mais ne mettra pas à jour la chaîne de requête ;-( session_start(); if (isset ($ _ GET ['srt'])) { $ _SESSION ['srt'] = $ _GET [' srt ']; } $ srt = $ _SESSION [' srt ']; ID IMGNAMECAT ........ $ srtd = $ db-> query ("SELECT * FR OM '$ table1' ORDRE PAR '$ srt' "); /////////////////////////////////////////////// /////////////////////////////////// foreach ($ srtd as $ row) { $ id = $ row ['id']; $ name = $ row ['nom']; –

+0

désolé, je ne peux pas lire ce code. Modifiez votre question pour l'inclure. – Nick

+0

Voir ma modification ci-dessus. – Nick

Questions connexes