【发布时间】: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帮助我。我为你解决了这个问题。另外,我会熟悉前缀
/...