PHP 处理页面中的表单不遵循其余文件的行

PHP 处理页面中的表单不遵循其余文件的行

我是一名网页开发爱好者。我 50 多岁了,从来没有真正从事过网页开发工作,但喜欢在业余时间做一些有趣的事情。话虽如此,我有一个由 Bluehost 托管的网站,是我用 PHP 从头开始​​编写的。实际上,我更喜欢功能性,而不是创建 UI。我不使用 CMS 或框架。

我的具体问题是这样的:我尝试遵循规范,因此我的根目录或 public_html 文件夹中有一个 .htaccess 文件。在这个文件中,我只有一行FallbackResource index.php

我尝试通过 index.php 文件处理所有“网站页面”,如下所示 >

// check url in users browser and bring here
    $path = ltrim($_SERVER['REQUEST_URI'], '/'); // Trim leading slash(es)

    if($path === "" || $path === "login" || $path === "home"){
        if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true){
            require_once '../my_stuff/dashboard.php';            
        }else{  
            require_once '../my_stuff/login.php';
        }
    }elseif($path === "register"){
        if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true){
            require_once '../my_stuff/dashboard.php';            
        }else{  
            require_once '../my_stuff/register.php';
        }
    }elseif($path === "dashboard"){
        if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true){
            require_once '../my_stuff/dashboard.php';            
        }else{  
            require_once '../my_stuff/login.php';
        }
    }elseif($path === "logout"){
        require_once '../my_stuff/logout.php';
    }elseif($path === "verify"){
        require_once '../my_stuff/verify.php';
    }elseif($path === "proc_reg.php"){
        require_once 'proc_reg.php';
    }else{
        header('HTTP/1.1 404 Not Found');
        echo 'page not found';
    }

html 根目录中仅有 index.php .htaccess 和我的 favicon.ico 文件。所有其他文件都从 html 根目录外部上方的文件夹加载。这样可以正常工作。当我的 html 中有链接时,它们看起来像“/about”或“/home”,它们也可以正常工作,重定向回 index.php。但是,我的所有表单处理页面都无法正确访问。我不喜欢将表单发送回自身,我喜欢单独处理它。我喜欢保持关注点分离。对于 index.php 文件中的包含,我使用 ../my_stuff/whatever_page 来获取我的其他文件,从 html 根目录返回到 my_stuff 文件夹。但是当我将这些 URL 包含在表单的“action”属性中时,这不起作用。至少在主机服务器上不起作用。当我在本地开发时,它工作正常。因此,我不得不将表单处理文件从 html 根目录上方的 my_stuff 移出,并将它们放在 html 根目录中的另一个文件夹中。我认为这很混乱,而且可能很危险。我确实将这行添加到我的 .htaccess 文件中 >Options -Indexes以提供一些帮助。但是,如果有人知道文件的确切名称,他们就可以找到它;例如 mysite/procs/this_form.php。不过,我确实在这些脚本的顶部有这几行。

if($_SERVER["REQUEST_METHOD"] !== "POST") {
    header('Location: ../');
    exit;  
}

有什么办法可以让我的处理页面回到 html 根目录之上,或者这只是常态?

答案1

对于 index.php 文件中的包含内容,我使用它们../my_stuff/whatever_page来获取其他文件,返回 html 根目录并进入 my_stuff 文件夹。但是当我将这些 URL 包含在表单的“action”属性中时,这种方法不起作用。

这些不是“URL”,而是文件系统路径。action属性的值应该是面向公众的 URL,就像/about/home(与您的示例相关)。

然后,您可以使用“路由器”(中的 if-elseif 块index.php)来路线请求的 URL,就像您对所有其他 URL 所做的那样。

例如按照您的例子...

在你的 HTML 中:

<form action="/form-submission" method="POST">
:

index.php

elseif($path === "form-submission" && $_SERVER["REQUEST_METHOD"] == "POST"){
    require_once '../my_stuff/whatever';

但是,如果有人知道文件的确切名称,他们就可以找到它;比如mysite/procs/this_form.php

任何人都可以向您的表单提交页面提交 POST 请求,就像任何人都可以向您的/about/home页面发出 GET 请求一样。您需要实施足够的验证和安全措施,才能避免出现问题。

我确实没有必要回复,因为我使用 Ajax 进行实时响应。

我不太清楚你的意思。AJAX 只是一个异步请求。因此,无论请求是从 HTML 同步提交还是从 JavaScript 异步提交,你仍然在向 发出 POST 请求/form-submission

相关内容