2010-12-23 7 views
0

Okay, mein Code sollte die Seite ID mit $ _GET ['pid'] greifen und überprüfen, ob es gleich $ _SESSION ['Seite'] ist. Wenn es die $ _SESSION ['page'] behält, zerstöre die $ _SESSION ['page'] nicht.PHP Session Probleme

Aber aus irgendeinem Grund, wenn ich die Funktion von einer anderen Seite mit einem include() aufrufen, hat die $ _SESSION ['page'] einen anderen Wert als eine andere Seite, wenn neu geladen? Was verursacht dieses Problem und wie kann ich es beheben?

Hier ist mein unset $ _SESSION ['Seite'] Code.

<?php 
ob_start(); 
session_start(); 

if(isset($_GET['pid']) && is_numeric($_GET['pid'])) { 
    if(isset($_SESSION['page']) && $_SESSION['page'] !== $_GET['pid']){ 
     unset($_SESSION['page']); 
    } 

    $page = mysqli_real_escape_string($mysqli, htmlentities(strip_tags($_GET['pid']))); 
    $_SESSION['page'] = $page; 
} 

ob_flush(); 
?> 

Ich bezeichne diese Funktion von einem anderen Skript

<?php 
ob_start(); 
session_start(); 
function getRatingText(){ 
    $dbc = mysqli_connect("localhost", "db", "pass", "members"); 
    $sql1 = "SELECT COUNT(ab_g.u_ab_id) FROM ab_g INNER JOIN u ON ab_g.user_id = u.user_id WHERE u_ab_id = '" . $_SESSION['page'] . "' AND u.active IS NULL AND u.deletion = 0"; 
    $result = mysqli_query($dbc,$sql1); 

    if (!mysqli_query($dbc, $sql1)) { 
      trigger_error(mysqli_error($dbc)); 
      return; 
    } else { 
     while($row = mysqli_fetch_array($result)) { 
      $tr[] = $row[0]; 
     } 
    } 

    if(isset($tr) && count($tr) != 0){ $rat = array_sum($tr); } 

    $sql2 = "SELECT g.rate_points FROM g INNER JOIN ab_g ON g.id = ab_g.rate_id INNER JOIN u ON ab_g.user_id = u.user_id WHERE ab_g.u_ab_id = '" . $_SESSION['page'] . "' AND u.active IS NULL AND u.deletion = 0"; 
    $result = mysqli_query($dbc, $sql2); 

    if(!mysqli_query($dbc, $sql2)) { 
     trigger_error(mysqli_error($dbc)); 
     return; 
    } else { 
     while($row = mysqli_fetch_array($result)) { 
      $trp[] = $row[0]; 
     } 
    } 

    if(isset($trp) && count($trp) != 0){ $tot = array_sum($trp); } 

    if (!empty($tot) && !empty($rat)){ 
     $avg = round($tot/$rat, 1); 
     $percent = round(($avg/5) * 100, 1); 
     $votes = $rat; 
     if($rat == 1){ 
      echo $avg . "/5 (" . $votes . " rating casted)"; 
     } else { 
      echo $avg . "/5 (" . $votes . " casted)"; 
     } 

     if($avg <= 5){ $rate = '5 star'; } 

     if($avg <= 4){ $rate = '4 star'; } 

     if($avg <= 3){ $rate = '3 star'; } 

     if($avg <= 2){ $rate = '2 star'; } 

     if($avg <= 1){ $rate = '1 star'; } 

     echo $rate; 

    } else { 
     echo 'not rating'; 
    } 
    return TRUE; 
} 

ob_flush(); 
?> 



ich dieses Problem gelöst, indem die an der Unterseitesession_write_close();innerhalb der Funktion Skript setzt. vor ob_flush().

+0

Sie haben session_start in Ihrer Datei? http://php.net/manual/en/function.session-start.php –

+0

@Haim Evgi natürlich – HELP

+0

Wann ist die '$ _SESSION ['page']' anders, wenn Sie mit einem gültigen 'pid' auf die Seite zugreifen oder nicht? –

Antwort

1

try unset($_SESSION['page']); Ausführung, wenn die pid nicht gültig ist:

if(isset($_GET['pid']) && is_numeric($_GET['pid'])) { 
    .... 
} else { 
    unset($_SESSION['page']); 
} 
+0

Ich bekomme immer noch das gleiche Problem. – HELP

+0

@PHPFREAK wo Sie die PID (in der ersten Code-Box Ihrer Frage) –

+0

@ The Scrum Meister, aus irgendeinem Grund, wenn ich 'ob_flush();' von der Hauptseite Fußzeile begann es zu arbeiten, ist es ein gutes Idee, dass ich 'ob_flush();' entfernen. Was ist Ihre Eingabe beim Entfernen von 'ob_flush();' – HELP

0

ob_start() and ob_flush() sollten nur verwendet werden, wenn Sie Probleme mit HTTP-Header mit haben.