【问题标题】:HTML form action doesn't find my PHP fileHTML 表单操作找不到我的 PHP 文件
【发布时间】:2022-02-01 22:31:25
【问题描述】:

我正在使用 HTML、PHP 和 MySQL 构建一个简单的消息发送服务。

guestbook       --- directory
 ㄴ addMessage.php
 ㄴ guestbook.php
...
index.php

在 index.php 中,我包含了 guestbook.php 以使用该文件中的功能。


    <?php include("./guestbook/guestbook.php") ?>

guestbook.php,我制作了一个简单的表单,允许仅为登录用户编写消息,并且数据将发送到addMessage.php,正如我在代码中所写的那样。

<div style="position:absolute; top: 15%; left:25%; width:50%;">

    <form action="addMessage.php" method="post">

        <div class="form-group">
            <label for="exampleFormControlTextarea1">Write some message!</label>
            <?php
            if (isset($_SESSION['id'])) {

                echo '<textarea class="form-control" name="message" id="exampleFormControlTextarea1" rows="3" placeholder="~~~~"></textarea>';
                echo '<button type="submit" class="btn btn-primary">write message</button>';

            } else {

                echo '<textarea class="form-control" id="exampleFormControlTextarea1" rows="3" placeholder="You should login first" readonly></textarea>';
                echo '<button type="submit" class="btn btn-primary" disabled>write message</button>';

            }
            
        ?>
        </div>

    </form>

</div>

addMessage.php,我只放了一行代码来检查它是否有效。

<?php

    // $conn = mysqli_connect("localhost", "alphatrox", "alphatrox", "cryptogame");

    // for test
    echo $_POST["message"];

?>

但是当我发送消息时,我遇到错误消息addMessage.php(URL 为http://localhost/addMessage.php。)即使我在同一目录中创建也不存在。

Not Found
The requested URL was not found on this server.

Apache/2.4.52 (Win64) OpenSSL/1.1.1m PHP/8.1.2 Server at localhost Port 80

你能告诉我我做错了什么吗? 我遇到了麻烦...

谢谢。

【问题讨论】:

  • 作为一个简单的修复方法,请尝试action="guestbook/addMessage.php"。如果可行,请考虑使用__DIR__ 或其他方式指向相对路径。例如,stackoverflow.com/a/32537649/296555
  • 或者更好的是,/guestbook/addMessage.php。使用 / 前缀路径将确保它从 Web 根目录开始。如果你省略它,那么它将尝试从浏览器当前 URL 中找到相对资源。
  • 附带说明,这些问题的常见解决方案是使用“前端控制器模式”,它通过 index.php 路由 所有 流量,然后将请求转发到另一个处理程序例如guestBook.php。设置起来可能有点复杂,但一旦实施,它确实有助于让你摆脱 require/include 地狱。用于自动加载的前端控制器模式(例如getcomposer.org/doc/01-basic-usage.md#autoloading)是纯粹的魔法。
  • 感谢大家通过cmets帮助我。我为你解决了这个问题。另外,我会熟悉前缀/...

标签: php html


【解决方案1】:

你好,我以为你把它放在文件夹“留言簿”中。 所以你的表单动作应该是action="/guestbook/addMessage.php"

解析为http://localhost/guestbook/addMessage.php

留言簿文件夹包含项目,始终调用您的网址 参考项目文件夹或根目录。

【讨论】:

  • 感谢您的回答!我解决了这个问题。但是和其他的cmet一样,我通过&lt;form action="/guestbook/addMessage.php" method="post"&gt;解决了这个问题。
【解决方案2】:

有时在我们编写代码时,我们会匆匆忙忙地做,并且会犯一些基本错误。 使用'' 代替"" 的目录链接、逗号分隔符、分号和其他时间会产生有时不容易找到的小错误。

<form action="guestbook/addMessage.php" method="POST"> 

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 1970-01-01
    • 2017-09-19
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多