PHP / HTML 表单 - 在 Docker 容器的同一页面上显示数据,不打印

PHP / HTML form - show data on the same page in Docker container, does not print

提问人:Brian Brown 提问时间:7/1/2023 最后编辑:Peter MortensenBrian Brown 更新时间:7/23/2023 访问量:215

问:

我想在Apache上有一个HTML/PHP简单的表单。我希望用户提交一些数据,然后这些数据应该在提交后显示在同一页面上。我想把它们都放在一个Docker容器里。

这可能是 Docker 问题,因为它适用于 localhost

我的 Ubuntu 系统上安装了 PHP。但是,提交表单后,我看不到我提供的数据。

文件索引:.html

<?php
$message = "";
if(isset($_POST['SubmitButton'])){ // Check if form was submitted
  $input = $_POST['inputText']; // Get input text
  $message = "Success! You entered: ".$input;
}
?>

<html>
<body>
<form action="" method="post">
<?php echo $message; ?>
  <input type="text" name="inputText"/>
  <input type="submit" name="SubmitButton"/>
</form>
</body>
</html>

Docker文件

FROM webdevops/php:8.2

RUN apt update -y && apt upgrade -y
RUN apt install -y apache2
RUN apt install -y apache2-utils
RUN sudo a2enmod php8.2

WORKDIR /var/www/html
EXPOSE 80

COPY index.php /var/www/html/post
CMD ["apache2ctl", "-D", "FOREGROUND"]
php html docker 阿帕奇

评论

0赞 Justinas 7/3/2023
也许您有一些不保留数据的跨媒体重定向?
0赞 Brian Brown 7/3/2023
@Justinas我不这么认为,因为它可以在本地主机上运行而不会出现任何问题
1赞 Justinas 7/3/2023
请进行以下操作:打开 DevTools,在“网络”选项卡中标记“保留请求”,然后提交表单。检查向后端发送了哪些数据以及发出了哪些请求。使用“网络”选项卡中的相关信息更新问题
1赞 Nico Haase 7/3/2023
您确定这是 Docker 问题吗?没有 docker 它会工作吗?您尝试过如何解决问题?你被困在哪里?
0赞 Drk 7/6/2023
您是否添加了语句来打印?echo$message

答:

5赞 Abdulla Nilam 7/3/2023 #1

错误

  1. 当文件名以 . 结尾时,PHP 不会执行它应该是.htmlindex.php

  2. 您正在使用 webdevops/php:8.2 的 PHP 映像,该映像已经具有 Apache 和 PHP。

    据我所知,这些行不通:

    RUN apt install -y apache2
    RUN apt install -y apache2-utils
    RUN sudo a2enmod php8.2
    
  3. 您正在将文件复制到一个名为不存在且似乎不需要的目录中post


试试这个:

文件索引:.php

<?php
$message = "";
if(isset($_POST['SubmitButton'])){ //check if form was submitted
  $input = $_POST['inputText']; //get input text
  $message = "Success! You entered: ".$input;
}
?>

<html>
<body>
<form action="" method="post">
<?php echo $message; ?>
  <input type="text" name="inputText"/>
  <input type="submit" name="SubmitButton"/>
</form>
</body>
</html>

Docker文件

FROM webdevops/php-apache:8.2

WORKDIR /var/www/html
COPY index.php ./

EXPOSE 80
CMD ["supervisord"]

评论

0赞 Brian Brown 7/8/2023
Cant connect to 127.0.0.1:7004
0赞 Abdulla Nilam 7/8/2023
什么?从何而来?127.0.0.1:70047004
0赞 Peter Mortensen 7/23/2023
为什么要监督?它应该做什么?
0赞 Peter Mortensen 7/23/2023
可能相关:Docker 的 supervisord 替代方案
-4赞 Sreeram Nair 7/6/2023 #2

我看到在您的表单标签中,action 属性为空 ()。这将提交到它当前所在的同一 URL。action=""

将其更改为将表单数据提交到 PHP 脚本。action="index.php"

评论

0赞 Nico Haase 7/6/2023
请在您的答案中添加更多解释,以便其他人可以从中学习。如果这在本地主机上有效,但在使用 Docker 时不再有效,是什么让您认为您的提示解决了问题?另外,是什么让你认为它毕竟存在?OP 尚未共享任何此类文件index.php
0赞 Sreeram Nair 7/6/2023
共享的 docker 文件,说 COPY index.php /var/www/html/post,所以我认为使用了 index.php
0赞 Nico Haase 7/6/2023
请通过编辑将所有说明添加到您的答案中
0赞 DarkBee 7/6/2023
index.php将是显示的默认页面,因此设置或将其留空不会有任何区别action="index.php"
1赞 NotTheDr01ds 7/23/2023
嗨,斯里拉姆·奈尔。您最近 11 个答案中的大部分或全部似乎可能全部或部分由 AI(例如 ChatGPT)编写。许多人也有评论表明他们在某些方面是错误的。请注意,这里不允许发布 AI 生成的内容。如果您使用 AI 工具来协助回答任何问题,我鼓励您将其删除。我们希望您能坚持下去,并通过发布您自己的优质内容继续成为我们社区的重要组成部分。谢谢!