提交按钮以创建带有输入文本的 HTML 文件 [关闭]

Posted

技术标签:

【中文标题】提交按钮以创建带有输入文本的 HTML 文件 [关闭]【英文标题】:Submit button to create HTML file with text entered [closed] 【发布时间】:2016-06-27 02:57:20 【问题描述】:

我们在我工作的地方的厨师正试图找出一种简单(有点花哨)的方法来将菜单展示给员工查看。我已经建立了一个表单,因此他可以在周一至周五进入菜单,但我需要一些帮助来创建菜单。

我希望厨师能够访问这个网站(已经建立的表格),让他输入菜单的所有信息。一旦他输入了他点击提交的信息,它就会创建一个 html 文件,该文件已经被背景图像和字体所吸引,但我需要将他输入的文本转置到那里。

我从我目前拥有的表格中获取此信息,该表格会在输入数据后通过电子邮件发送给我们的人力资源部门。我知道这与 php 部分有关,我什至不确定这是否可能。

这是我的表单,我猜我只需要 php 信息

<head>
<title>Cafe Menu Creator</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link rel="stylesheet" type="text/css" href="cafe.css" />
</head>

<body>
<br />
<br />
<center><h1>Cafe Menu Creator</h1></center>
<div id="page-wrap">
    <div id="contact-area">
        <form method="post" action="cafe.php">
            <label for="Name">Monday:</label>
            <textarea name="Message_Monday" rows="20" cols="20" id="Message_Monday"></textarea>

            <label for="Name">Tuesday:</label>              
            <textarea name="Message_Tuesday" rows="20" cols="20" id="Message_Tuesday"></textarea>

            <label for="Name">Wednesday:</label>            
            <textarea name="Message_Wednesday" rows="20" cols="20" id="Message_Wednesday"></textarea>

            <label for="Name">Thursday:</label>
            <textarea name="Message_Thursday" rows="20" cols="20" id="Message_Thursday"></textarea>

            <label for="Name">Friday:</label>
            <textarea name="Message_Friday" rows="20" cols="20" id="Message_Friday"></textarea>

            <input type="submit" name="submit" value="Submit" class="submit-button" />
        </form>

        <div style="clear: both;"></div>



    </div>

</div>

</body>

</html>

PHP:

<?php



$MessageMonday = $_POST['Message_Monday'];
$MessageTuesday = $_POST['Message_Tuesday'];
$MessageWednesday= $_POST['Message_Wednesday'];
$MessageThursday = $_POST['Message_Thursday'];
$MessageFriday = $_POST['Message_Friday'];


ob_start();
?>
<div>
<html>
<body bgcolor=red>






</div>
<div><?php echo $MessageMonday; ?></div>
<div><?php echo $MessageTuesday; ?></div>
<div><?php echo $MessageWednesday; ?></div>
<div><?php echo $MessageThursday; ?></div>
<div><?php echo $MessageFriday; ?></div>



<?php
$html = ob_get_contents();
ob_end_clean();

$path = '/var/www/web1/web/';
$filename = "menu.html";

file_put_contents($path.$filename);
?>

【问题讨论】:

textarea 需要具有唯一的名称属性。 你编辑了,但这里有另一个$path = "\\server\c$\cafe;所以我们在编辑我在这里评论吗? 哈哈 哦,$filename = "menu"."html"; 仍然是错误的。如果你想创建menu.html 文件,那应该读作$filename = "menu.html";。并且您的路径没有斜杠。读作path/folderFILE.html。而不是path/folder/FILE.html 可能是因为您没有检查它们,并且可能是文件夹/路径和/或文件的权限问题。错误报告php.net/manual/en/function.error-reporting.php 另外,您的文本区域必须具有不同的名称属性,并且 POST 数组/变量区分大小写。您为它们使用相同的名称但不同的 ID,因此如果您不使用 JS,您的代码将失败。根据驱动器的不同,\\server 应读取为 c:\\folder\\ 等。您正在尝试访问虚拟机。 用我的更改更新了原始帖子。我已将其移至我的网络服务器,因此我将保留所有文件路径。 【参考方案1】:

我不会用我已经完成的调试重新输入我在 cmets 中输入的内容。

以下是最终代码的内容,您的 HTML 标记中有一些错误,我已修复。

HTML

<!doctype html>

<head>
<title>Cafe Menu Creator</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link rel="stylesheet" type="text/css" href="cafe.css" />

</head>

<body>
<br />
<br />
<center><h1>Cafe Menu Creator</h1></center>
<div id="page-wrap">
    <div id="contact-area">
        <form method="post" action="cafe.php">
            <label for="Name">Monday:</label>
            <textarea name="Message_Monday" rows="20" cols="20" id="Message_Monday"></textarea>

            <label for="Name">Tuesday:</label>              
            <textarea name="Message_Tuesday" rows="20" cols="20" id="Message_Tuesday"></textarea>

            <label for="Name">Wednesday:</label>            
            <textarea name="Message_Wednesday" rows="20" cols="20" id="Message_Wednesday"></textarea>

            <label for="Name">Thursday:</label>
            <textarea name="Message_Thursday" rows="20" cols="20" id="Message_Thursday"></textarea>

            <label for="Name">Friday:</label>
            <textarea name="Message_Friday" rows="20" cols="20" id="Message_Friday"></textarea>

            <input type="submit" name="submit" value="Submit" class="submit-button" />
        </form>

        <div style="clear: both;"></div>


    </div>

</div>

</body>

</html>

PHP

<?php

$MessageMonday = $_POST['Message_Monday'];
$MessageTuesday = $_POST['Message_Tuesday'];
$MessageWednesday= $_POST['Message_Wednesday'];
$MessageThursday = $_POST['Message_Thursday'];
$MessageFriday = $_POST['Message_Friday'];

ob_start();
?>
<html>

<body bgcolor="red">

<div>
Menu
</div>

<div><?php echo $MessageMonday; ?></div>
<div><?php echo $MessageTuesday; ?></div>
<div><?php echo $MessageWednesday; ?></div>
<div><?php echo $MessageThursday; ?></div>
<div><?php echo $MessageFriday; ?></div>

</body>
</html>

<?php
$html = ob_get_contents();
ob_end_clean();

$path = '/path/to/folder/';
$filename = "menu.html";

file_put_contents($path.$filename, $html);

?>

脚注:

如果您想避免使用 HTML(和/或 PHP)标签,例如 &lt;b&gt;&lt;/b&gt; 等,您可以对 POST 数组使用 strip_tags()

$MessageMonday = strip_tags($_POST['Message_Monday']);
$MessageTuesday = strip_tags($_POST['Message_Tuesday']);
$MessageWednesday= strip_tags($_POST['Message_Wednesday']);
$MessageThursday = strip_tags($_POST['Message_Thursday']);
$MessageFriday = strip_tags($_POST['Message_Friday']);

参考:

http://php.net/manual/en/function.strip-tags.php

但是,如果您确实想添加 HTML 标记以制作 粗体 文本(即时),您只需输入 &lt;b&gt;Today's menu&lt;/b&gt; 后跟任何其他有效的 HTML。

参考:

https://developer.mozilla.org/en/docs/Web/HTML/Element

甚至是一个 HTML 表格(动态):

<table border="1" >
  <tr>
    <td  colspan="2" bgcolor="#99CCFF">
      <p align="center"><b>Today's menu</b></td>
  </tr>
  <tr>
    <td  bgcolor="#FFFFFF">Fish and chips</td>
    <td  bgcolor="#FFFFFF">$3.95</td>
  </tr>
  <tr>
    <td  bgcolor="#FFFFFF">Hamburger</td>
    <td  bgcolor="#FFFFFF">$3.25</td>
  </tr>
  <tr>
    <td  bgcolor="#FFFFFF">Cheeseburger</td>
    <td  bgcolor="#FFFFFF">$3.50</td>
  </tr>
</table>

【讨论】:

【参考方案2】:

首先,我会将您的输入名称更改为独特的名称,例如 message_fridaymessage[] 而不仅仅是 message

这个 php 代码应该可以工作,你仍然需要对路径和文件名做一些修改并插入你自己的 html。

<?php
    $messageMonday = $_POST['message_monday'];
    $messageFriday = $_POST['message_friday'];

    $html = "";

    ob_start();
?>
    <div>Your html stuff</div>
    <div><?php echo $messageMonday; ?></div>
    . . .
<?php
    $html = ob_get_contents();
    ob_end_clean();

    $path = "/path/to/file/";
    $filename = "file_".rand(0,9999).".html";

    file_put_contents($path.$filename, $html);
?>

如果你愿意,你可以把它包装成一个返回新 URL 的函数:)

【讨论】:

我似乎无法让它工作。我现在用我的 php 文件内容更新了原始帖子。对不起,我对php一无所知。感谢您迄今为止的帮助! 文件需要以.php 扩展名结尾并在网络服务器或本地主机上运行...你是如何实现的? 此时它在我的 PC 上本地,直到我让它工作,然后我将移动它并将文件路径更改到它将保留的服务器。 你需要有一个 php 服务器运行,并让你的表单的方法指向 php 脚本。

以上是关于提交按钮以创建带有输入文本的 HTML 文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

HTML提交按钮:不同的值/按钮文本?

在按钮单击时将文本添加到现有输入字段

如何将 Button 更改为输入文本?

即带有文件输入的javascript表单提交

带有单独提交和上传按钮的 Django 应用程序

如何在颤动中显示带有提交按钮和隐藏输入字段的html表单