PHP Session变量没有传递

时间:2017-03-26 08:25:53

标签: php

我需要传递一个名为' square'的变量。在我的php文件之间,一切正常,直到我转到动作文件从我的数据库中检索数据:

//plan.php

<?php
    include("config.php");
    session_start();

    $loggeduser = $_SESSION['user'];

    if (!isset($_SESSION['user']))
    {
        header("Location: login.php");
    }

    // Get selected square
    $selsquare = $_GET["square"];

?>


<script>
$(document).ready(function(){
 fetchUser(); 
 function fetchUser() 
 {
  var action = "Load";
  $.ajax({
   url : "action.php?square=$selsquare", 
   method:"POST", 
   data:{action:action}, 
   success:function(data){
    $('#result').html(data); 
   }
  });
 }

</script>

这是我的action.php文件

<?php
//Database connection by using PHP PDO
$username = 'root';
$password = '';
$connection = new PDO( 'mysql:host=localhost;dbname=db', $username, $password ); 
$selsquare = $_GET["square"];

if(isset($_POST["action"])) 
{

 if($_POST["action"] == "Load") 
 {
  $statement = $connection->prepare("SELECT * FROM plans WHERE square = '$selsquare' ");
  $statement->execute();
  $result = $statement->fetchAll();
  $output = '';
  $output .= '
   <table class="table table-bordered">
    <tr>
     <th width="10%">ID</th>
     <th width="10%">Square</th>
     <th width="40%">Plan</th>
     <th width="10%">Update</th>
     <th width="10%">Delete</th>
    </tr>
  ';
  if($statement->rowCount() > 0)
  {
   foreach($result as $row)
   {
    $output .= '
    <tr>
     <td>'.$row["id"].'</td>
     <td>'.$row["square"].'</td>
     <td>'.$row["plan"].'</td>
     <td><button type="button" id="'.$row["id"].'" class="btn btn-warning btn-xs update">Update</button></td>
     <td><button type="button" id="'.$row["id"].'" class="btn btn-danger btn-xs delete">Delete</button></td>
    </tr>
    ';
   }
  }
  else
  {
   $output .= '
    <tr>
     <td align="center">Data not Found</td>
    </tr>
   ';
  }
  $output .= '</table>';
  echo $output;
 }

?>

我需要检索所有square = $ selsquare的数据,但它不起作用。 selsquare在plan.php中工作,但在action.php中没有    请帮我弄清楚什么是错的

3 个答案:

答案 0 :(得分:1)

你没有正确地做到这一点。在你的ajax方法中,传递数据的方法是post,在你的action.php文件中你将它作为get变量提取。

<script>
$(document).ready(function(){
 fetchUser(); 
 function fetchUser() 
 {
  var action = "Load";
  var square = "<?php echo $selsquare ?>";
  $.ajax({
   url : "action.php", 
   method:"POST", 
   data:{action:action, square:square}, 
   success:function(data){
    $('#result').html(data); 
   }
  });
 }
</script>

现在在action.php文件

中获取square作为post变量

我没有测试过代码,但应该可以使用。

答案 1 :(得分:0)

默认情况下,PHP会话需要cookie来识别它们。您正在尝试运行2个单独的PHP脚本(包括Ajax调用的脚本),因此每个脚本都需要访问cookie。

默认情况下,Ajax不发送cookie。这是一项相对较新的功能,但目前所有浏览器都支持此功能。

首先,您需要将属性withCredentials设置为true。这将允许传递cookie。

请参阅http://api.jquery.com/jQuery.ajax/

$.ajax({
    url: a_cross_domain_url,
    xhrFields: {
        withCredentials: true
    }
});

在PHP中,您还需要包含如下语句:

header("Access-Control-Allow-Credentials: true");

在您的回复脚本中。

或者,您可以指示PHP接受会话ID并让Ajax将其作为查询字符串发送。

答案 2 :(得分:0)

您正在从Javascript发送POST,而在您的PHP中,您正在阅读$_GET

<script>
$(document).ready(function(){
 fetchUser(); 
 function fetchUser() 
 {

  var square_js = '<?php echo $selsquare; ?> ';
  $.ajax({
   url : "action.php?square=$selsquare", 
   method:"GET", 
   data:{square:square_js}, 
   success:function(data){
    $('#result').html(data); 
   }
  });
 }

</script>

如果您的方块的值为ABCDEF,那么在您的PHP中,您将以这种方式获得请求

print_r($_GET);

Array{
"square" => "ABCDEF"
}

在双引号中传递字符串的推荐方法是使用{}

url : "action.php?square=$selsquare", 

应该是

url : "action.php?square={$selsquare}",