if(isset($ _ POST ['submit']))不起作用

时间:2016-01-09 14:01:13

标签: php html forms session post

我知道这里有很多问题都有相同的标题和问题,但我检查了所有的语法,我真的不知道为什么它不再起作用(前一段时间,它确实有效)。

<?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="../../">

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

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

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

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

3 个答案:

答案 0 :(得分:1)

我认为它对您有用,因为您已登录($_SESSION['username']$_SESSION['password']已填写)。

因此,请使用$_POST中的数据来登录用户($_POST['username']$_POST['pwrd'])。

答案 1 :(得分:1)

发布的数据没有到达您的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="&nbsp;Log in&nbsp;" />

如果您需要间距,只需输入普通空格:

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

答案 2 :(得分:0)

你在'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>
相关问题