我有一个index.php包含一个用于更改表单操作的JavaScript代码
<script>
window.onload=function() {
document.getElementsByName("myproject")[0].onchange=function() {
var path = this.value;
if (path) this.form.action=path+'/main.php';
}
}
</script>
这个脚本每次更改其值时都会更改我的表单操作,然后我还有一个
<form action = "" method = "POST"><table>
<td>Select Project: </td><td><select name="myproject" id="myproject">
<td>USERNAME: </td><td><input type="text" name="user" id="user"/></td>
<td>PASSWORD: </td><td><input type="password" name="pass" id="pass"/></td>
<option value="">Please Select</option>
<option value="Exam1">Exam1</option>
</select></td>
<input type = "submit" name="login"/>
</form>
我也有一个PHP代码。我已经
了<?php
session_start();
error_reporting(0);
$_SESSION['user'] = "";
$_SESSION['pass'] = "";
if ($_POST['login'])
{
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
?>
当我重定向到我的Exam1 / main.php时,我丢失了SESSION变量。我的Exam1 / main.php包含此代码以确定我是否获得了会话变量
<?php
session_start();
error_reporting(0);
$mainuser = $_SESSION['user'];
$mainpass = $_SESSION['pass'] ;
echo $mainpass.$mainuser;
?>
为什么我会丢失会话变量。
答案 0 :(得分:1)
您正在两次session_start()
我们
答案 1 :(得分:1)
您必须拥有index.php
main.php
中所拥有的PHP代码。您的表单操作为main.php
<?php
session_start();
error_reporting(0);
$_SESSION['user'] = "";
$_SESSION['pass'] = "";
if ($_POST['login'])
{
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
?>
由于重定向到main.php
$_POST
数据可用,因此只能分配给$_SESSION
答案 2 :(得分:0)
假设PHP与表单输入位于同一个文件中,这应该都可以。要检查的一些事情是确保你的Apache配置允许_SESSION数据,我知道有些主机默认关闭它,虽然没有好的。但/ / p>
还要确保在任何其他需要会话数据的脚本之前初始化session_start()。
如果情况可能并非如此,那么我在想的是你正在以某种方式重置变量。尝试删除:
$_SESSION['user'] = "";
$_SESSION['pass'] = "";
当使用实际信息设置时,这是半冗余的。
只是侧面提示,因为我相信您将使用此登录表单时请注意您的安全措施。连接数据库后,使用存储的$ _SESSION用户和密码(md5'ed)确认每个安全页面上的身份验证。
如果你想要一个例子我有一个我可以分享的脚本。
答案 3 :(得分:0)
试试这个:
更改if ($_POST['login'])
到if (isset($_POST['login']))
你也错过了关闭}
答案 4 :(得分:0)
这就是我所理解的
<?php
if ($_POST['login'])
{
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
}
?>
这是您在index.php中为会话变量分配值的位置。这只会在您提交表单而不更改选择的值时执行。因为表单最初不会对操作有任何价值。< / p>
<form action="">
因此它将被提交到同一页面并将$ _POST ['user']分配给$ _SESSION ['user']
否则, $ _ SESSION ['user'] 和 $ _ SESSION ['pass'] 没有分配值。
因此,如果您更改select中的值并在重定向到Exam1 / main.php时提交表单,则没有为 $ _ SESSION ['user'] 和 $ _ SESSION [ '通'] 强>
答案 5 :(得分:0)
您是否在以下地点使用并更改了$user
和$pass
的值:
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
我现在不知道它是错误还是设计,但是:
$_SESSION['a']=10;
echo "{$_SESSION['a']}<br>"; //will print 10
$a=20;
echo "{$_SESSION['a']}<br>"; //will print 20!
当我使用$_SESSION['id']
... 时,这对我来说是个大惊喜