如果(isset($_POST[';submit';]))没有';不起作用


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="&nbsp;Log in&nbsp;" />
</form>

该表单与PHP代码位于同一页面上;我将操作指向"site/users/login",因为在HTML页面的头部,我设置了<base href="../../">

当我提交表单时,页面会重新加载,日志会显示"开始…",然后是"SESSION中没有任何内容",最后是"空表单"。

我做错了什么?感谢所有的帮助!

编辑:这是我的htaccess文件的内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^'.]+)$ $1.php [NC,L]

我认为它对您有效,因为您已登录($_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

还有一些点...,我们不知道会发生什么(包括也可能存在)。

如果这些部分中的任何一个执行这样的重定向,则可能是问题的原因。我们可以忽略ChromeHP,它是一个公开的库,不做这样的事情。

因此,至少db_connect.php,以及所有其他包含的文件(直接或通过其他包含文件),都应该扫描重定向代码。

如果您发现这样的重定向,请检查保留该代码是否合理,因为并非所有重定向都是坏的。但当然,应该分析自我重定向:知道任何发布的数据都会被忽略,它们真的有必要吗?

因此,用更合适的代码替换引起header()语句,您的问题就会得到解决。

附带说明:最好不要将HTML实体放在HTML元素的属性中,就像这里所说的那样:

 <input type="submit" name="submit" value="&nbsp;Log in&nbsp;" />

如果你需要间距,只需输入空白:

 <input type="submit" name="submit" value=" Log in " />

您在"site/users/login"之后忘记了".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="&nbsp;Log in&nbsp;" />
    </form>
</body>
</html>