繁体   English   中英

if(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代码在同一页上; 我将操作指向“站点/用户/登录”,因为在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="&nbsp;Log in&nbsp;" />

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM