会话-PHP

会话-PHP,php,session,Php,Session,对于我的应用程序,有三个级别的用户: 顶层(00) 中等“地区”级别 下层 构建的界面允许用户创建将分发到移动应用程序的消息 我让它工作得很好,但后来被要求添加中级。现在,尽管消息似乎更新正确,但我遇到了一个问题,在提交消息后,我没有显示“消息更新”和表单,而是收到了“您没有访问此页面的权限”消息 这种情况不会发生在中级/地区级别,仅发生在较低和较高级别。出于某些原因,对于这两个原因,在提交表单后,它没有正确地阅读$\u SESSION['store'](尽管在正常加载页面时,它会正常工作,

对于我的应用程序,有三个级别的用户:

  • 顶层(00)
  • 中等“地区”级别
  • 下层
构建的界面允许用户创建将分发到移动应用程序的消息

我让它工作得很好,但后来被要求添加中级。现在,尽管消息似乎更新正确,但我遇到了一个问题,在提交消息后,我没有显示“消息更新”和表单,而是收到了“您没有访问此页面的权限”消息

这种情况不会发生在中级/地区级别,仅发生在较低和较高级别。出于某些原因,对于这两个原因,在提交表单后,它没有正确地阅读
$\u SESSION['store']
(尽管在正常加载页面时,它会正常工作,而不是通过POST)

我非常感谢任何指导:

 <?php
session_start();

function format($input) {
$input = trim($input);
$input = stripcslashes($input);
$input = htmlspecialchars($input);
return $input;
}
 $con = new PDO("sqlite:managers.db");
$store = $_SESSION['store'];
$stores;
$file;
$district;


$file = "messages/" . $store . ".txt";

if(!file_exists($file)) {
$temp = fopen($file, "w"); // create file
fclose($temp);
}


if(strpos("d", $store) == 0) { 
$district = true;
$sql = "SELECT district FROM managers WHERE store = '$store'";
$statement = $con->query($sql);
$row = $statement->fetch();
$storesArray = explode(",", $row[0]);
}



if($_SERVER['REQUEST_METHOD'] == 'POST') {

$newMessage = format($_POST['message']);


$writer = fopen($file, "w");
fwrite($writer, $newMessage);
fclose($writer);


if($district) {
foreach($storesArray as $store) {
$fileName = "messages/d" . $store . ".txt";

if(!file_exists($fileName)) {
$temp = fopen($fileName, "w"); // create file
fclose($temp);
}

$writer = fopen($fileName, "w");
fwrite($writer, $newMessage);
fclose($writer);

}
}
}


$handler = fopen($file, "r");

$currentMessage = fread($handler, filesize($file));
fclose($handler);



?>


// some code omitted //



<?php 
if($store == "" || $store == null) {
echo "<p>You do not have permission to view this page</p>";
} else {


echo "<h2>Manage Messages";  if($store == "00") {
echo "<a href='admin.php'><input type='button' id='adminBack' value='Back' /></a></h2>";
} else {
echo "<a href='adminUI.php'><input type='button' id='adminBack' value='Back' /></a></h2>";
}

if($_SERVER['REQUEST_METHOD'] == 'POST') {
echo "<h2>Message Updated!</h2>";
}
echo "<form class='admin' class='col-md-6' method='post' action='manageMessages.php'>
<div class='form-group'>
<label for='message'> Message: </label> 
<textarea class='form-control' id='message' name='message' >$currentMessage</textarea>
<input type='submit' value='Post Message' />
</div>
</form>";

}
?>
 </div>
<!-- end page specific content -->

您的
$store
变量正在被foreach覆盖:

foreach($storesArray as $store) 
您必须为该foreach使用不同的名称,例如:

foreach($storesArray as $store2) 

可能问题在于没有为顶级/底层用户正确设置
$\u会话['store']
。我没有看到任何真正设置会话变量的代码。首先,我要看一下您的设置代码。对不起,这是在另一个(登录)页面上设置的。我将很快编辑这个问题。放置一个
var_转储($_SESSION['store'])位于已发布页面的顶部。然后通过post和NORMAL加载页面。在这两种情况下都是正确的还是都不正确?我想您的
$store
变量正在被您的foreach
foreach($storesArray as$store)
覆盖……您看到了吗?试着用一个不同的名字来命名你是绝对正确的,闪光灯。太谢谢你了!:)
foreach($storesArray as $store2)