jsGrid: как передать дополнительные переменные от javascript до php, используя ajax - PullRequest
1 голос
/ 18 февраля 2020

Я использую jsGrid для своего проекта. Посмотрите здесь для исходного исходного кода

Я хочу передать дополнительную переменную вызов $ user_session для использования для mysql запроса выбора в выборке. php, но не удалось. Вот то, что я пытался.

<script>

var user_session = "<?php echo $user_session; ?>"; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//......

 controller: {
  loadData: function(){
   return $.ajax({
    type: "GET",
    url: "fetch_data.php",
    data: {user_session:user_session} //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   });
  },

 //......

Вот выборка. php file

<?php

if($method == 'GET')
{
 $user_session = $_GET['user_session']; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 $query = "SELECT * FROM sample_data WHERE first_name=? ORDER BY id DESC";
 $statement = $connect->prepare($query);
 $statement->execute($user_session); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 $result = $statement->fetchAll();
 foreach($result as $row)
 {
  $output[] = array(
   'id'    => $row['id'],   
   'first_name'  => $row['first_name'],
   'last_name'   => $row['last_name'],
   'age'    => $row['age'],
   'gender'   => $row['gender']
  );
 }
 header("Content-Type: application/json");
 echo json_encode($output);
}
//......
?>

Как правильно это сделать?

Ответы [ 3 ]

0 голосов
/ 19 февраля 2020

Я могу сделать таким образом.

<script>

//......

 controller: {
  loadData: function(filter){
    var user_session = "<?php echo $user_session; ?>"; //<<<<<<<<<<<<<<<<<<<<<<<<<<<
   return $.ajax({
    type: "GET",
    url: "fetch_data.php",
    data: {filter,
           user_session:user_session //<<<<<<<<<<<<<<<<<<<<<<<<<<<
          },
   });
  },

 //......
</script>

В процессе. php Я делаю это.

<?php

if($method == 'GET')
{
 $user_session = $_GET['user_session'];//<<<<<<<<<<<<<<<<<<<<<<<<<<<

 $query = "SELECT * FROM sample_data WHERE first_name=? ORDER BY id DESC";
 $statement = $connect->prepare($query);
 $statement->execute([$user_session]); //<<<<<<<<<<<<<<<<<<<<<<<<<<<
 $result = $statement->fetchAll();
 foreach($result as $row)
 {
  $output[] = array(
   'id'    => $row['id'],   
   'first_name'  => $row['first_name'],
   'last_name'   => $row['last_name'],
   'age'    => $row['age'],
   'gender'   => $row['gender']
  );
 }
 header("Content-Type: application/json");
 echo json_encode($output);
}
//......
?>

Для проблемы безопасности, упомянутой @ Андреа Голин , я отправлю другой вопрос.
Спасибо.

0 голосов
/ 19 февраля 2020

Наконец-то я нашел лучший способ.
Я могу напрямую вызвать $ user_session внутри fetch. php.

<?php
require('user_session.php'); //<<<<<<<<<<<<<<<<<<<<<<<<<<<
require('includes/db.php');

$method = $_SERVER['REQUEST_METHOD'];

if($method == 'GET')
{
 $query = "SELECT * FROM sample_data WHERE first_name=? ORDER BY id DESC";
 $statement = $conn->prepare($query);
 $statement->execute([$user_session]); //<<<<<<<<<<<<<<<<<<<<<<<<<<<
 $result = $statement->fetchAll();
 foreach($result as $row)
 {
  $output[] = array(
   'ChildID'    => $row['ChildID'],
   'Name'  => $row['Name'],
   'BirthDate'   => $row['BirthDate'],
   'Gender'   => $row['Gender'],
   'StudyorWorking'   => $row['StudyorWorking'],
   'CourseorOccupation'   => $row['CourseorOccupation'],
   'Married'   => $row['Married']
  );
 }
 header("Content-Type: application/json");
 echo json_encode($output);
}
?>
0 голосов
/ 18 февраля 2020

Прежде всего, любой может открыть консоль разработчика в браузере и начать фаззинг своего идентификатора сессии. Пока вы правильно готовите свой запрос, обезвреживая инъекцию sql, он не защищает вас от IDOR, или я могу перечислить ваших пользователей, просто повторяя запросы к вашему приложению.

Если вы действительно хотите пройти Ваш идентификатор сеанса на стороне клиента, может быть, вы могли бы подумать об использовании функции повара ie, так как он не так легко редактируется обычным пользователем.

...