为什么我的消息不发送文本区域


Why is my message not sending textarea?

我正在尝试制作一个在线代码编辑器,当您完成后,我想为用户提供一个将所有代码通过电子邮件发送给自己的选项,但每当我尝试访问网站时,都不会发送<textarea></textarea>标签中的代码。这是我的代码。告诉我你是否需要JavaScript和CSS。

<!DOCTYPE HTML>
<HTML lang = "en">
    <head>
        <meta charset = "UTF-8">
        <meta name = "author" content = "Adam S. Oates">
        <meta name = "description" content = "This HTML file was created to test new thigns I learn">
        <meta name = "title" content = "Online Code Editor">
        <title title = "Online Code Editor">
            Online Code Editor
        </title>
        <link rel = "apple-touch-icon" href = "">
        <link rel = "shortcut icon" href = "">
        <link rel = "stylesheet" type = "text/css" href = "main.css">
        <script type = "text/javascript" src = "main.js"></script>
    </head>
    <body>
        <header>
            Gigaboy <span id = "code"></span> Editor
        </header>
        <form action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method = "post">
            <textarea autocomplete = "off" placeholder = "Type HTML Here" id = "HTMLeditor" name = "HTMLeditor"></textarea>
            <a id="CSS"></a>
            <textarea autocomplete = "off" placeholder = "Type CSS Here" id = "CSSeditor" name = "CSSeditor"></textarea>
            <a id="JavaScript"></a>
            <textarea autocomplete = "off" placeholder = "Type JavaScript Here" id = "JSeditor" name = "JSeditor"></textarea>
            <span id = "see-result">View Result</span>
            <select id = "jqueryMode">
                <option value = "OFF">Disable JQuery</option>
                <option value = "ON">Enable JQuery</option>
            </select>
            <select id = "bootstrapMode">
                <option value = "OFF">Disable Bootstrap</option>
                <option value = "ON">Enable Bootstrap</option>
            </select>
            <select id = "gigaboyMode">
                <option value = "OFF">Disable GigaboyStyle.js</option>
                <option value = "ON">Enable GigaboyStyle.js</option>
            </select>
            <span id = "emailCode">
                    <input type = "email" name = "email" placeholder = "Send Code to You Email">
                    <input type = "submit" value = "Send">
            </span>
        </form>
    </body>
</html>
<?PHP
    if (!empty($_POST)) {
        $headers = "MIME-Version: 1.0'r'n";
        $headers .= "Content-type:text/html;charset=UTF-8'r'n";
        $msg = str_replace("'n", "<br>", str_replace("'r'n", "<br>", $_POST['HTMLeditor']));
        $msg = str_replace("'n", "<br>", str_replace("'r'n", "<br>", $_POST['CSSeditor']));
        $msg = str_replace("'n", "<br>", str_replace("'r'n", "<br>", $_POST['JSeditor']));
        $HTML = htmlspecialchars($_POST['HTMLeditor']);
        $CSS = htmlspecialchars($_POST['CSSeditor']);
        $JS = htmlspecialchars($_POST['JSeditor']);
        $email = $_POST['email'];
        $subject = "Code Made at Gigaboy Code Editor Online";
        $message = "HTML5 Code: <br><br>" . $HTML . "<br><br><br>CSS Code: <br><br>" . $CSS . "<br><br><br>JavaScript Code: <br><br>" . $JS;
        mail($email, $subject, $message, $headers);
    }
?>

所有表单元素(包括文本区域)都需要放置在开始和结束表单标签之间。

这里有几个重大问题...

<小时 />

首先,你的表单元素(inputselect等)实际上并不在一个表单中。 它们需要位于以下标记之间:

<form method = "post">
    <!-- form elements go in here -->
</form>

否则,form只会发布它所知道的内容,目前只是一个input type="email"和一个input type="submit",仅此而已。

<小时 />

其次,这并没有像你认为的那样做:

<input type = "submit" onclick = "<?PHP sendCode(); ?>" value = "Send">

这将在您的页面加载之前执行sendCode()。 而且,由于当时没有表单值,因此该函数不会执行任何操作。 然后这将简单地生成此标记:

<input type = "submit" onclick = "" value = "Send">

所以你基本上是在告诉提交按钮不要做任何事情(虽然不成功)。 然后,当您提交表单时,这将巧合地再次执行该功能,但在您认为它这样做时不会。

在这种情况下,我能给出的最好的建议是从头开始浏览一些PHP教程。 PHP 在页面发送到客户端之前就已经在服务器上运行。 然后,客户端代码在 PHP 完成后很长时间内在浏览器中运行。 他们不混合。

但是,要修复在这种情况下所拥有的问题,基本上您可以完全删除该onclick

<input type = "submit" value = "Send">

并完全删除函数符号:

<?php
if (!empty($_POST)) {
    // your code here
}
?>

考虑到您正在执行的操作的结构,这里不需要函数。 在将页面发送到浏览器之前,每次请求页面时都会执行此代码。 如果请求不包含任何 POST 数据,那么这正是此 if 语句已经检查的内容。