我正在尝试制作一个在线代码编辑器,当您完成后,我想为用户提供一个将所有代码通过电子邮件发送给自己的选项,但每当我尝试访问网站时,都不会发送<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);
}
?>
所有表单元素(包括文本区域)都需要放置在开始和结束表单标签之间。
这里有几个重大问题...
<小时 />首先,你的表单元素(input
、select
等)实际上并不在一个表单中。 它们需要位于以下标记之间:
<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
语句已经检查的内容。