Выбрать конкретную строку в MySQL - PullRequest
0 голосов
/ 31 мая 2018

Я хочу получить определенную строку из таблицы в моей БД, т.е. только то, что относится к пользователю, вошедшему в систему. Для этого я использую следующий скрипт:

<?php
 include('./classes/DB.php');
 include('./classes/Login.php');

$connect = mysqli_connect("localhost", "root", "", "gaming");  
$playerid = Login::isLoggedIn();

$sql = "SELECT * FROM games";// WHERE player_id =" .$playerid;  
$result = mysqli_query($connect, $sql);  
$json_array = array();  

while($row = mysqli_fetch_assoc($result))  
    {  
        if ($row['player_id']==$playerid) {
            $json_array[] = $row;  
        }
   }  

echo json_encode($json_array); 
?>

Login.php:

<?php 

class Login {

public static function isLoggedIn() {

    if (isset($_COOKIE['CHEZA'])) {
        if (DB::query('SELECT user_id FROM login_tokens WHERE token=:token',    array(':token'=>sha1($_COOKIE['CHEZA'])))) {
            $userid = DB::query('SELECT user_id FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['CHEZA'])))[0]['user_id'];
            if (isset($_COOKIE['CHEZACHEZA'])) {
                    return $userid;
            } else {
                $cstrong = True;
                $token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong));
                DB::query('INSERT INTO login_tokens VALUES (\'\', :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$userid));
                DB::query('DELETE FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['CHEZA'])));
                setcookie("CHEZA", $token, time() + 60 * 60 * 24 * 7, '/', NULL, NULL, TRUE);
                setcookie("CHEZACHEZA", '1', time() + 60 * 60 * 24 * 3, '/', NULL, NULL, TRUE);
                return $userid;
            }
        }
    }
    return false;
}
}
?>

Я получаю желаемый ответ в своем браузере, но когда я использую клиент REST, все, что я получаю, это пустой массив [].Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Попробуйте изменить ваш php-код, добавив проверку isset перед запуском запроса и логического кода:

<?php
 include('./classes/DB.php');
 include('./classes/Login.php');

$connect = mysqli_connect("localhost", "root", "", "gaming");  
$playerid = Login::isLoggedIn();

if(isset($playerid)){
 $sql = "SELECT * FROM games WHERE player_id =" .$playerid;  
$result = mysqli_query($connect, $sql);  
$json_array = array();  

while($row = mysqli_fetch_assoc($result))  
    {  
        if ($row['player_id']==$playerid) {
            $json_array[] = $row;  
        }
   }  

echo json_encode($json_array); 
}

?>

, если он не работает, попробуйте добавитьprint_r($playerid) и проверьте, получаете ли вы логин идентификатор пользователя.

0 голосов
/ 31 мая 2018
$playerid = Login::isLoggedIn();

не установлено, проверьте его.

РЕДАКТИРОВАТЬ

Теперь код isLoggedIn() опубликован: вы уверены, что ваш клиент REST отправляетпеченье ЧЕЗА?Я не думаю, что это хорошая идея использовать куки в вызове REST.Я нашел полезным это чтение: https://softwareengineering.stackexchange.com/questions/141019/should-cookies-be-used-in-a-restful-api

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...