我可以将表单操作发送到公共文件夹外的php文件吗?

时间:2015-10-22 12:34:13

标签: php html forms

this tutorial创建安全登录系统之后,我遇到了这个问题。

在第7部分:创建HTML页面,第1部分创建登录表单(index.php),它使用:

<form action="includes/process_login.php" method="post" name="login_form">

虽然早先在教程中指出(第3部分,第8部分,第1部分,第1段):

  

在生产环境中,您可能希望找到此文件   以及Web服务器文档之外的所有其他包含文件   根。如果你这样做,我们强烈建议你这样做,你会的   需要时根据需要更改include或require语句   应用程序可以找到包含文件。

所以我的include文件夹不在/ var / www / html / mysite /或/ var / www / html /中,但在/ var / www /中,我的表格变成了:

<form action="../../includes/process_login.php" method="post" name="login_form">

(适用于php包括)。但是这个没有用,我得到了这个错误:

  

http://localhost/includes/process_login.php请求的网址   在此服务器上找不到/includes/process_login.php。

为什么我的包含在/ var / www / html /中? 我使用

检查了所有的/ var / www /文件夹
grep -rnw . -e 'process_login.php'

并且这是该字符串的唯一出现(使用../../)。我错过了什么?

1 个答案:

答案 0 :(得分:1)

我找到了一种解决方法,包括一个只包含另一个文件的文件,它是公用文件夹中的第一个,第二个是隐藏文件夹。

表格:

<form action="process_login.php" method="post" name="login_form">

第一个文件(public_folder / mysite / process_login.php):

<?php
include '../../includes/process_login.php';

第二个文件(../../ includes / process_login.php):

<?php
include_once 'db_connect.php';
include_once 'functions.php';

sec_session_start(); // Our custom secure way of starting a PHP session.

if (isset($_POST['email'], $_POST['p'])) {
    $email = $_POST['email'];
    $pwd = $_POST['p']; // The hashed password.

    if (login($email, $pwd, $conn) == true) {
        // Login success 
        header('Location: ../coisas/protected_page.php');
    } else {
        // Login failed 
        header('Location: ../coisas/index.php?error=1');
    }
} else {
    // The correct POST variables were not sent to this page. 
    echo 'Invalid Request';
}

无论如何,我仍然想知道为什么需要这样做。