使用$ _SERVER ['PHP_SELF']重置会话吗?

时间:2011-01-14 18:22:45

标签: php

我发现每次提交表单时都会重置会话值。摘录如下:

 <? php session_start(); ?>
<html>
<head>
</head>
<body>
<?php
if($_SESSION['idi']=="")
{
$_SESSION['idi'] = $_GET['id6'];
$_SESSION['class1'] = $_GET['class6'];
$_SESSION['section1'] = $_GET['section6'];
}
echo $_SESSION['idi'].' '.$_SESSION['class1'].' '.$_SESSION['section1'].'<br>';
print session_id(); 
?>
<form method="post" action="">
<table>
<tr>
    <td> <label> CLASS NAME </label>
    <td><input type="text" name="class_name" value="<?php echo $_SESSION['class1'] ;?>"></td>
</tr>
<tr>
    <td><label> SECTION </label>
    <td><input type="text" name="section" value="<?php echo $_SESSION['section1'] ;?>"></td>
</tr>
<tr>
    <td>
        <input type="submit" value="UPDATE" name="update1" >
    </td>
</tr>
</table>
</form>
<?php
    if(isset($_POST['update1'])){
        $class_name = $_POST['class_name'];
        $section = $_POST['section'];
        update_data($_SESSION['idi'],$_POST['class_name'],$_POST['section']);
        echo 'did='.$_SESSION['idi'].' class1='.$_SESSION['class1'].' section1='.$_SESSION['section1'].'<br>';
    }

function update_data($id1,$class1,$section1)
    {
        echo'suresh <br>';
        echo $id1.' '.$class1.' '.$section1.'<br>';
        $dbc = mysqli_connect('localhost','root','','cce')
                    or die('Error connecting to MySQL server');

        $query = "SELECT * FROM class";
        $result = mysqli_query($dbc,$query)
                    or die("Error connecting to database1");

        //while($row = mysqli_fetch_array($result))
        //{
            echo'TEST<br>';
            $query="UPDATE class SET class_name='".$class1."', class_section='".$section1."' WHERE id = '".$id1."'";
            $result = mysqli_query($dbc,$query)
                    or die("Error connecting to database2");
            echo'TEST2<br>';
        //}
        mysqli_close($dbc); 
    }
?>
</body>
</html>

问题是每次我提交表单时,我都希望看到相同的会话值打印出来。但是一旦我点击提交,该值就会消失并且不会打印任何内容...... 但是,如果每次提交表格时,我以“THEN”形式执行操作=“”$_SESSION['abc']的值仍为相同,99。

这是为什么? $_SERVER['PHP_SELF']重置会话吗?或者配置中是否有任何内容?

5 个答案:

答案 0 :(得分:3)

当您使用action=""时,表单重定向到的网址是当前位置栏中的确切网址。但是,如果您使用$_SERVER['PHP_SELF'],则会删除所有变量,因此$ _GET ['id']为空。

也应该是echo $_SERVER['PHP_SELF'];echo "{$_SERVER['PHP_SELF']}";

答案 1 :(得分:1)

PHP_SELF不包含GET变量;你需要明确指定它们(再加上你的引号):

<form action="<?php echo $_SERVER['PHP_SELF']."?id=".urlencode($_GET['id']); ?>" method="POST">

答案 2 :(得分:0)

您的示例未关闭<form>代码 - 您是否正在关闭<form>代码?

答案 3 :(得分:0)

如果我正确地阅读此内容,您将表单提交到此页面,对吧?当它返回到此页面时,它会在session_start();上运行,并尽职尽责地重新启动会话。至少这是我阅读this的方式。

您可以尝试将session_start();移至if声明的内部。这样,它只会在没有看到特定会话变量的情况下重启会话。

或者,您可以使用命名会话并通过cookie,POST或GET变量传递它。

答案 4 :(得分:0)

PHP_SELF与会话无关。你的代码肯定有问题。

我要做的是:

$Value = '';
if(isset($_GET['myValue']) {
    $Value = $_GET['myValue'];
}
if(!empty($_POST)&&isset($_POST['myValue']) {
    //Do stuff here
}

<form action="<? php echo "$_SERVER['PHP_SELF']"; ?>" method="POST">
<input type="hidden" name="myValue" value="<?php echo $Value;?>" />