我发现每次提交表单时都会重置会话值。摘录如下:
<? 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']
重置会话吗?或者配置中是否有任何内容?
答案 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;?>" />