2016-09-04 3 views
0

У меня есть страница index.php, где пользователи могут зарегистрироваться и войти. Я хочу показать приветственный админ после входа пользователя в систему. Я понял, что сеанс имеет значение null, что может привести к тому, что $_SESSION станет нулевым?Сессия всегда возвращает null

<?php 

session_start(); 

try { 
    $db = new PDO("mysql:host=127.0.0.1; dbname=blog", "root", ""); 
} catch (PDOException $ex) { 
    echo $ex->getMessage(); 
} 

$v = $db->prepare("select * from uyeler where uye_sifre=? and uye_ad=?"); 
var_dump($v); 
if ($_POST) { 

    $isim = $_POST["isim"]; 
    $sifre = $_POST["sifre"]; 

    $v->execute(array($sifre, $isim)); 
    $x = $v->fetchAll(PDO::FETCH_ASSOC); 
    $d = $v->rowCount(); 


    if ($d) { 
     $_SESSION["ad"] = $x["uye_ad"]; 
     $_SESSION["sife"] = $x["uye_sifre"]; 
     $_SESSION["durum"] = $x["uye_durum"]; 
     echo "Giriş başarılı"; 
    } else { 
     echo "Geçersiz Kullanıcı"; 
    } 

} else { 
    if ($_SESSION) { 
     var_dump($_SESSION); 
     echo "adam üye"; 
    } else { 

     echo '<form action="" method="post"> 


    <table cellpadding="5" cellspacing="5"> 
     <tr> 
      <td>Uye Ad</td> 
      <td><input type="text" name="isim" id=""></td> 
     </tr> 

     <tr> 
      <td>Uye Şifre</td> 
      <td><input type="password" name="sifre" id=""></td> 
     </tr> 
     <tr> 

      <td><input type="submit" id=""></td> 
     </tr> 

    </table> 
</form>'; 
    } 
} 
?> 

это выходной var_dump

wamp64\www\indeks.php:12: 
object(PDOStatement)[2] 
    public 'queryString' => string 'select * from uyeler where uye_sifre=? and uye_ad=?' (length=51) 
C:\wamp64\www\indeks.php:34: 
array (size=3) 
    'ad' => null 
    'sife' => null 
    'durum' => null 
+0

Какие ошибки вы получаете, когда вы проверили журнал ошибок ? Массив '$ _SESSION' был бы только нулевым, если' session_start() 'не вызывался до его использования, или если он потерпел неудачу, поскольку результат был начат до того, как могут быть установлены заголовки. В обоих случаях PHP определенно даст вам подробную ошибку, сообщающую вам все, что вам нужно знать, чтобы отладить проблему. Совместное использование этой информации об ошибках поможет сократить ее. – Sherif

+0

Я обновил тему –

+1

Ошибка не в сеансе, это возврат вашего запроса! – Provie9

ответ

0
  1. Выполнить запрос вручную, чтобы убедиться, что ваш запрос возвращается.
  2. fetchAll возвращает многомерную матрицу. Так исправить эти строки

    $_SESSION["ad"] = $x["uye_ad"]; 
    $_SESSION["sife"] = $x["uye_sifre"]; 
    $_SESSION["durum"] = $x["uye_durum"]; 
    

    к этому:

    $_SESSION["ad"] = $x[0]["uye_ad"]; 
    $_SESSION["sife"] = $x[0]["uye_sifre"]; 
    $_SESSION["durum"] = $x[0]["uye_durum"]; 
    

    $x является многомерным и выглядит следующим образом:

    $x = array(
    array('uye_ad'=>'any value', 'uye_sifre'=>'any value2', 'uye_durum'=>'any value3',) 
    ); 
    
+0

это работает, но как? –

+0

Потому что в этой строке '$ x = $ v-> fetchAll (PDO :: FETCH_ASSOC);' $ x - многомерный массив. Он выглядит следующим образом: 'array ('uye_ad' => 'any value', 'uye_sifre' => 'any value2', 'uye_durum' => 'any value3',));' –

0

Попробуйте это:

$v = $db->prepare("select * from uyeler where uye_sifre=:sifre and uye_ad=:isim"); 
$v->bindParam(':sifre', $sifre, PDO::PARAM_INT); 
$v->bindParam(':isim', $isim, PDO::PARAM_INT); 

$v->execute(); 

Для получения дополнительной информации, поиск PHP Docs

+0

дает мне этот выход Фатальная ошибка: вызов неопределенного метода PDOStatement :: bind_param() в –

+0

Я обновил его. Попробуй? – Haring10