2014-12-07 77 views
-1

这是我做的,设置变量不是所有的PHP会话变量被设置

<?PHP 
session_start(); 
?> 
<?PHP 
$user_name = $_POST['username']; 
$first_name = $_POST['FirstName']; 
$last_name = $_POST['LastName']; 
$_SESSION['FirstName']=$first_name; 
$_SESSION['LastName']=$last_name; 
$_SESSION['UserName']=$user_name; 

用于测试目的,我在这个文件打印出来之前,我设置会话变量,所以我知道我得到的值从形式。 但是当我去和另一个打印出这样的

<?PHP 
echo $_SESSION['UserName']; 
echo $_SESSION['FirstName']; 
echo $_SESSION['LastName']; 

崩溃,注释掉一些打印后,我发现,它不仅是设置用户名之一,其他人都莫名其妙地失去了

这是从我的形式 登录 用户名:  密码: 

这是我走到哪里提交时

$user_name = $_POST["username"]; 
$password = $_POST["password"]; 
$_SESSION["UserName"]=$user_name; 
$_SESSION["Password"]=$password; 

这是我尝试打印出来

<?PHP 
echo "username: " 
echo $_SESSION["UserName"]; //this one works 
?> 
<br> 
<?PHP 
echo "password: " 
echo $_SESSION["Password"]; //does not work 
?> 

我会话变量在只有一个页面的这样

顶部声明
<?PHP 
session_start(); 
$_SESSION["UserName"]; 
$_SESSION["Password"]; 
?> 
+2

只是确保你有'在session_start();'所有 – Ghost 2014-12-07 03:52:18

+0

这些网页的显示形式的html代码和你是否确定其他2有数据并且不是空的? – Darren 2014-12-07 03:57:18

+1

正如@Ghost所说的,正如你所说的那样*“正在设置用户名一个,其他人则以某种方式丢失”* - 很可能你的表单的元素不包含name属性,并且/或者存在拼写错误或lettercase不匹配。用户名和用户名或用户名不一样。显示与这些相关的完整代码。我怀疑你的表单的元素没有经过都是小写字母。 – 2014-12-07 04:01:59

回答

4

只是确保你有session_start();在所有这些页面的 - 鬼

除鬼的评论,这可能是因为你的表单元素不包含name属性,和/或有一个错字,或大小写不匹配。
UsernameusernameUsername是不一样的。(PHP)变量区分大小写。

被设置用户名之一,其他人都莫名其妙地失去了

要阐述我的意见,我怀疑你的表单元素都在小写或没有被命名。

我愿意打赌,如果你改变

$first_name = $_POST['FirstName']; // FirstName is not the same as firstname 
$last_name = $_POST['LastName']; // LastName is not the same as lastname 

$first_name = $_POST['firstname']; 
$last_name = $_POST['lastname']; 

,它将开始为你工作。因为,那些是两个没有通过。

但是,为了100%确定,您需要发布您的表单的代码,但是我的答案只是一定的。

你的表格应包含:

<input type="text" name="firstname"> 

<input type="text" name="lastname"> 

添加error reporting到您的文件(S)的顶部,这将有助于发现错误,如果你的系统的设置不自动设置,这反过来将很可能是“未定义的索引...”。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

旁注:错误报告只应在分期完成,并且从不生产。


现在,如果仍然无法正常工作,那么您的缓存问题。可以使用session_destroy()。您也可以取消设置会话,然后重新开始。

有关这些的更多信息,请访问:


编辑:

关注这个,它会工作,经测试。之后你可以修改它。

第一页:

<html> 
<body> 
<form action="page2.php" method="post"> 
Username: <br><input type="text" name="username"><br> 
First name: <br><input type="text" name="firstname"><br> 
Last name: <br><input type="text" name="lastname"><br> 
<input type="submit" name = 'submit' value= 'Login'> 
</form> 
</body> 
</html> 

使page2.php

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

session_start(); 
$username = $_POST['username']; 
$firstname = $_POST['firstname']; 
$lastname = $_POST['lastname']; 

$_SESSION['username'] = $_POST['username']; 
$_SESSION['firstname'] = $_POST['firstname']; 
$_SESSION['lastname'] = $_POST['lastname']; 

echo "Username: " . $_SESSION['username'] . "<br>"; 
echo "First name: " . $_SESSION['firstname'] . "<br>"; 
echo "Last name: " . $_SESSION['lastname'] . "<br>"; 
?> 
+1

这应该涵盖所有的基地。 “它崩溃”真的很模糊。很可能这只是'未定义索引'的另一种情况:' – Ghost 2014-12-07 04:18:23

+1

@Ghost确实含糊不清。但我认为你是对的,“未定义指数”。 – 2014-12-07 04:21:06

+1

@鬼好吧,我要去啦啦啦。保持堡垒严密; *干杯* – 2014-12-07 04:43:37