Переменная POST не работает в SESSION

Я хочу передать значение переменных login.php POST $user_key и $user_id в другой файл statusdata.php, для которого я использовал сеанс. В statusdata.php я хочу использовать это значение переменной сеанса в SQL-запросе файла statusdata.php.

Чтобы добиться этого в login.php, сначала я передаю значение переменной POST $_POST["user_key"] и $_POST["id"] в переменные $user_key и $user_id соответственно, затем я передаю значение переменной $user_key и $user_id в переменную сеанса $_SESSION["key"] и $_SESSION["id"] соответственно, затем в statusdata.php я вызываю переменную сеанса и передаю их значение в переменные $user_key и $user_id из statusdata.php

Теперь Проблема в значении переменной POST $_POST["user_key"] & $_POST["id"] не собираются в сеанс statusdata.php, но если я даю прямые значения $user_key и $user_id в login.php, тогда сеанс работает нормально, но не с переменной POST

Опять же, я хочу прояснить, что переменная POST получает значения от пользователя через приложение для Android, которое просит id и key аутентифицировать пользователя из login.php, а затем перейти на другой экран и получить данные, связанные с введенными id и key с помощью statusdata.php.

помогите мне получить значение переменной post из login.php в сеансе, чтобы его можно было использовать в statusdata.php

login.php

<?php

// Start the session
session_start();

require "conn.php";

if (isset($_POST["id"])) {
  $user_id = mysqli_real_escape_string($conn,$_POST["id"]);
}

if (isset($_POST["user_key"])) {
  $user_key = mysqli_real_escape_string($conn,$_POST["user_key"]);
}

/* USING THESE DIRECT VALUE IN PLACE OF POST VARIABLE IS WORKING FINE IN SESSION FOR BOTH `login.php` and `statusdata.php` which indicate there is no problem with `statusdata.php` but using POST variable is working fine for `login.php` as authenticating user with `id` and `key` but value of POST variable is not going to session in `statusdata.php`.  

$user_key = "8c9333343c6c4222418edb1d7c9f84d051610526085960a1732c7c3d763fff64ec7f5220998434c896dda243ae777d0fb213f36b9b19f7e4a244d5c993b8dfed";
$user_id = "96";
*/

$mysql_qry = "select * from applications where application_key = '".$user_key."' and application_id = ".$user_id." ;";

$result = mysqli_query($conn, $mysql_qry);
if (mysqli_num_rows($result) > 0){
    $_SESSION["key"] = $user_key;
    $_SESSION["id"] = $user_id;
    echo "Login Success";
} else {
    echo "Login Not Success";   
}

?>

statusdata.php

<?php
// Start the session
session_start();

require "conn.php";

$user_key = "-1";
if (isset($_SESSION["key"])) {
  $user_key = $_SESSION["key"];
}

$user_id = "-1";
if (isset($_SESSION["id"])) {
  $user_id = $_SESSION["id"];
}

 //creating a query
 $stmt = $conn->prepare("SELECT applications.application_id, applications.applicant_name, applications.applicant_aadhaar, applications.applicant_phone, applications.subject, applications.date, applications.description, applications.chairperson_remark, applications.status, officer_accounts.name_of_officer, applications.officer_remark, applications.last_update_on 
FROM applications INNER JOIN officer_accounts ON applications.account_id = officer_accounts.account_id 
WHERE applications.application_id = ? AND applications.application_key = ? ;");

 $stmt->bind_param('ss',$user_id,$user_key);

 //executing the query 
 $stmt->execute();

 //binding results to the query 
 $stmt->bind_result($id, $name, $aadhaar, $phone, $subject, $date, $description, $chairperson, $status, $officername, $officerremark, $lastupdate);

 $applications = array(); 

 //traversing through all the result 
 while($stmt->fetch()){
 $temp = array();
 $temp['applications.application_id'] = $id; 
 $temp['applications.applicant_name'] = $name; 
 $temp['applications.applicant_aadhaar'] = $aadhaar; 
 $temp['applications.applicant_phone'] = $phone; 
 $temp['applications.subject'] = $subject;
 $temp['applications.date'] = $date;
 $temp['applications.description'] = $description;
 $temp['applications.chairperson_remark'] = $chairperson;
 $temp['applications.status'] = $status;
 $temp['officer_accounts.name_of_officer'] = $officername;
 $temp['applications.officer_remark'] = $officerremark;
 $temp['applications.last_update_on'] = $lastupdate;
 array_push($applications, $temp);
 }

 //displaying the result in json format 
 echo json_encode($applications);

 // remove all session variables
session_unset(); 

// destroy the session 
session_destroy(); 

?>

ПРИМЕЧАНИЕ - Я беру вывод SQL-запроса statusdata.php в формате JSON, так как в конце я извлекаю его в android.

Пожалуйста, помогите мне, я пробовал все, что предлагают другие похожие вопросы, но ничего не помогает

создание отчетов об ошибках и проверка ошибок в запросе - это только начало.

Funk Forty Niner 24.07.2018 16:34

здесь тоже нет HTML

Funk Forty Niner 24.07.2018 16:35

это PHP-скрипт для Android-приложения. HTML не требуется. Я уже упоминал об этом.

Tanishq Shastri 24.07.2018 16:36

в любом случае см. мой первый комментарий. Вы не проверяете ошибки и предполагаете, что все работает как есть.

Funk Forty Niner 24.07.2018 16:39

Я уже пробовал проверять ошибки, но я не понимаю, почему переменная post не входит в statusdata.php

Tanishq Shastri 24.07.2018 16:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
73
3

Ответы 3

У вас возникла проблема с вашим оператором SQL:

$mysql_qry = "select * from applications where application_key = '".$user_key."' and 
application_id = '".$user_id."' ;";

Измените это на:

$mysql_qry = "select * from applications where application_key = '".$user_key."' and 
application_id = ".$user_id." ;";

Существует высокая вероятность того, что тип данных application_id является целым числом. Попробуйте запустить его в командной строке MySQL. Если он продолжится, он покажет вам ошибку!

Сообщение bhai отлично работает для login.php, я хочу использовать значение переменной post в statusdata.php

Tanishq Shastri 24.07.2018 16:59

Вы проверили инструкцию SQL, как я уже упоминал?

Chayan Bansal 24.07.2018 17:00

Не полный ответ, но ряд улучшений скриптов:

login.php:

<?php

// Start the session
session_start();

require "conn.php";

if (isset($_POST["id"])) {
  $user_id = $conn->real_escape_string($_POST["id"]);
}

if (isset($_POST["user_key"])) {
  $user_key = $conn->real_escape_string($_POST["user_key"]);
}

// check output is as expected
echo "ID:" . $user_id;
echo "Key:" . $user_key;

/* USING THESE DIRECT VALUE IN PLACE OF POST VARIABLE IS WORKING FINE IN SESSION FOR BOTH `login.php` and `statusdata.php` which indicate there is no problem with `statusdata.php` but using POST variable is working fine for `login.php` as authenticating user with `id` and `key` but value of POST variable is not going to session in `statusdata.php`.  

$user_key = "8c9333343c6c4222418edb1d7c9f84d051610526085960a1732c7c3d763fff64ec7f5220998434c896dda243ae777d0fb213f36b9b19f7e4a244d5c993b8dfed";
$user_id = "96";
*/

$mysql_qry = <<<EOF
SELECT * from applications
WHERE application_key = "{$user_key}" and application_id = "{$user_id}"
EOF;

$result = $conn->query($mysql_qry);
if ($result->num_rows() > 0) {
    $_SESSION["key"] = $user_key;
    $_SESSION["id"] = $user_id;
    echo "Login Success";
} else {
    echo "Login Not Success";   
}

?>

Statusdata.php:

<?php
// Start the session
session_start();

require "conn.php";

// use ternary operators, you can even try ?: operator
$user_key = isset($_SESSION["key"]) ? $_SESSION["key"] : '-1';
$user_id = isset($_SESSION["id"]) ? $_SESSION["id"] : '-1';

// use heredocs for creating a query, they let you format your query neatly
// also try using shorter names 
$query = <<<EOF
SELECT app.application_id, app.applicant_name, 
    app.applicant_aadhaar, app.applicant_phone, 
    app.subject, app.date, app.description, 
    app.chairperson_remark, app.status, 
    oa.name_of_officer, app.officer_remark, 
    app.last_update_on 
FROM applications app
INNER JOIN officer_accounts oa
ON app.account_id = oa.account_id 
WHERE app.application_id = ? AND app.application_key = ? ;
EOF;

$stmt = $conn->prepare($query);
$stmt->bind_param('ss',$user_id,$user_key);    
//executing the query 
$stmt->execute();

$applications = array(); 
$result = $stmt->get_result();

// get the rows, use fetch_object or fetch_array
while ($row = $result->fetch_object()) {
    $applications[] = $row;
}

//displaying the result in json format 
echo json_encode($applications);

// remove all session variables
session_unset(); 

// destroy the session 
session_destroy(); 

?>

попробуйте напечатать значение $ user_key и $ user_id в первом скрипте, чтобы убедиться, что mysqli_escape_string не испортил их. Также повторите значения во втором скрипте, чтобы увидеть, получены ли они из $ _SESSION, хорошо

vogomatix 24.07.2018 17:26

Снова происходит то же самое, что я упоминал в сообщении о предоставлении прямого значения идентификатору и ключу в login.php, тогда echo $ user_key и $ user_id работают как в login.php, так и в statusdata.php, но с использованием POST вместо прямого значение, которое сработало для login.php, но это значение не работает в statusdata.php

Tanishq Shastri 24.07.2018 17:44

Я думаю, ваша проблема связана с оператором if, который вы поставили перед присвоением значений $_SESSION. Вы можете проверить, есть ли у вас в базе данных данные, соответствующие вашему запросу, иначе вы никогда не получите эти два значения сеанса в вашем файле statusdata.php. Вы можете проверить мой ответ, присвоив значения $_SESSION без оператора if, и попытаться получить к ним доступ снова.

пробовал обоими способами с if и без if нет разницы проблема все еще существует

Tanishq Shastri 24.07.2018 22:26

Другие вопросы по теме