![](/img/trans.png)
[英]isset($_POST['submit']) doesn't work but $_SERVER[“REQUEST_METHOD”] == “POST” does
[英]if(isset($_POST['submit'])) doesn't work
我知道这里有很多标题和问题都相同的问题,但是我检查了所有语法,但我真的不知道为什么它不再起作用了(前一段时间,它确实起作用了)。
<?php
include_once("../../database/db_connect.php");
include '../../chromephp-master/ChromePhp.php';
date_default_timezone_set('Europe/Amsterdam');
session_start();
ChromePhp::log('Start...');
if(!isset($_SESSION['username']) && !isset($_SESSION['password'])) {
ChromePhp::log('Nothing in the SESSION.');
if(isset($_POST['submit'])){
ChromePhp::log('Lets have a look at the data...');
(...)
ChromePhp::log('Login successful!');
header('Location: news.php');
} else {
ChromePhp::log('Empty form.');
}
} else {
header('Location: news.php');
}
?>
我的表格如下:
<form method="post" action="site/users/login" >
<input type="text" name="username" value="Gebruikersnaam" /><br /><br />
<input type="password" name="pwrd" value="Wachtwoord" /><br /><br />
<input type="submit" name="submit" value=" Log in " />
</form>
表单与PHP代码在同一页上; 我将操作指向“站点/用户/登录”,因为在HTML页面的顶部设置了<base href="../../">
。
当我提交表单时,页面将重新加载,并且日志显示“开始...”,然后显示“ SESSION中没有内容”。 最后是“空表格”。
我究竟做错了什么? 感谢所有帮助!
编辑:这是我的htaccess文件的内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
我认为这对您$_SESSION['username']
因为您已经登录(填写了$_SESSION['username']
和$_SESSION['password']
)。
因此,请使用$_POST
数据登录用户( $_POST['username']
和$_POST['pwrd']
)。
有几种可能的原因导致发布的数据未到达您的PHP页面。
一种可能是.htaccess文件具有负责这种效果的规则。 但是在问题中发布了内容之后,事实显然并非如此。
另一个可能是脚本将重定向发送到(最终)同一页面,从而丢失了发布的数据。 在评论中提及您后,您注意到浏览器在提交后立即重新加载了页面,这显然是寻找原因的候选原因。
重定向通常使用以下代码完成:
header("location: some-URL");
...并且当然在参数包含自引用时,如下所示:
header('Location: '.$_SERVER['PHP_SELF']);
您发布的代码不包含这样的语句,至少没有一个解释行为的语句,但是其中包含一些脚本:
../../database/db_connect.php
../../chromephp-master/ChromePhp.php
还有一些点...
,我们不知道会发生什么(包括可能在那里)。
如果这些部件中的任何一个执行了这样的重定向,则可能是问题的原因。 我们可以忽略ChromePhp ,它是一个公开可用的库,不会执行此类操作。
因此,至少应扫描db_connect.php以及所有其他包含的文件(直接或通过其他包含的文件)以查找重定向的代码。
如果找到这样的重定向,请检查保留该代码是否合理-因为并非所有重定向都不好。 但是可以肯定的是,应该对自我重定向进行分析:知道是否会忽略任何发布的数据,它们是否真的必要?
因此,用更合适的代码替换引起原因的header()
语句,即可解决您的问题。
附带说明一下:最好不要将HTML实体放在HTML元素的value属性内,就像在这里:
<input type="submit" name="submit" value=" Log in " />
如果需要间距,只需输入空格:
<input type="submit" name="submit" value=" Log in " />
您在“站点/用户/登录”之后忘记了“ .php”。
我已经在较简单的版本中尝试过您的代码并成功。 像这样的代码:
<?php
if( isset($_POST['submit']) ){
echo $_POST['submit'];
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
<base href="../../">
</head>
<body>
<form method="post" action="algorithm/debug_login.php" >
<input type="text" name="username" value="Gebruikersnaam" /><br /><br />
<input type="password" name="pwrd" value="Wachtwoord" /><br /><br />
<input type="submit" name="submit" value=" Log in " />
</form>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.