0

我有一个简单的联系人,我希望通过一个函数“发布”,但我似乎无法让它工作?

当我将操作发送到外部“send.php”文件但我希望将所有内容保存在一个文件中时,该表单有效。

<form action="send()" id="contactform" method="POST">
<p>Name<input type="text" name="name">
  Email
  <input type="text" name="email">
  Phone
  <input type="text" name="phone">
</p>
<p>Message
  <textarea name="message" rows="6" cols="25"></textarea>
  <br />
<input type="submit" value="Send">
</p>
</form>

<?php
function send()
{
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent=" From: $name \n  Phone: $phone \n Email: $email \n Message: $message";
$recipient = "email@email.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You!";
}
?>
4

8 回答 8

5

您不能从<form>标签调用 php 代码。通常,您将此作为“回发”处理回同一页面,并检查是否设置了表单变量以确定回发是否发生:

<form action="" id="contactform" method="POST">

然后在您的代码中:

if (isset($_POST['name']))
    send();
于 2012-07-31T12:57:14.443 回答
1

PHP 不是这样工作的:)

要快速修复代码,您可以执行以下操作:

  1. 获取send()函数的内容
  2. 将其剪切并粘贴到一个新的 .php 文件中(随意命名)
  3. 替换action="send()"action="file_you_just_created.php"
  4. 测试一下

基本上,HTML 表单根本不知道 PHP 代码是否存在,也无法直接引用它。

于 2012-07-31T12:56:24.677 回答
1

action 字段将是呈现的 html 的一部分。这意味着,它是“客户端”的静态或属性。根据规范,它也应该是一个有效的绝对或相对地址。如果您将其留空,它将在大多数(不是全部)情况下工作,但它不会正确验证。

PHP 代码在您的网页所在的服务器上运行。这意味着,它在您获得任何东西之前运行,然后您的浏览器接收 html 代码。因此,提交代码后需要再次运行,因此需要一个页面来运行它。

想象你在一家餐馆。首先,您向服务员点了一些食物。这将是您尝试进入 X 网页。然后在厨房准备食物。这将是正在执行的 PHP 代码。食物准备好后,服务员会为您送上。这是您下载信息,接收html代码。您甚至可以根据需要更改它(javascript),但这超出了您的问题范围。专注于 OP,修改食物的安排(做一些客户端的事情)会修改它已经在厨房里做的事情吗?不,它不能。唯一的选择是告诉服务员您想要的食物变化(填写表格)并礼貌地告诉他去厨房并要求它们(这是,将变化发送到哪里)。可能是一个愚蠢的例子,但它说明了这一点。

Didn't put code as other's code should fix your problem doubtlessly, I just wanted to explain WHY your code didn't work so you understand html/PHP better.

于 2012-07-31T13:12:20.337 回答
0

form将标签更改为

<form action="" ... >
    ...
</form>

然后send()在其声明后调用 if$_POST['message']设置。

action属性只是告诉浏览器应该将信息发送到哪个网页;它与告诉它到达那里后要运行哪个函数无关。

于 2012-07-31T12:55:43.377 回答
0

HTML 表单的 action 标签不能用于执行 PHP 代码。该操作必须是一个 PHP 页面,其中包含将执行以读取 POST 变量的代码。

于 2012-07-31T12:56:25.967 回答
0
<form action="?" id="contactform" method="POST">
<p>Name<input type="text" name="name">
  Email
  <input type="text" name="email">
  Phone
  <input type="text" name="phone">
</p>
<p>Message
  <textarea name="message" rows="6" cols="25"></textarea>
  <br />
<input type="submit" value="Send">
</p>
</form>

<?php
if ($_POST) {
   send();
}

function send()
{
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent=" From: $name \n  Phone: $phone \n Email: $email \n Message: $message";
$recipient = "ma9ics@gmail.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You!";
}
?>
于 2012-07-31T12:57:41.443 回答
0
<form action="" id="contactform" method="POST">
<p>Name<input type="text" name="name">
  Email
  <input type="text" name="email">
  Phone
  <input type="text" name="phone">
</p>
<p>Message
  <textarea name="message" rows="6" cols="25"></textarea>
  <br />
<input type="submit" value="Send" name="submit">
</p>
</form>

<?php
if (isset ($_POST["submit"]))
{
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];
    $formcontent=" From: $name \n  Phone: $phone \n Email: $email \n Message: $message";
    $recipient = "ma9ics@gmail.com";
    $subject = "Contact Form";
    $mailheader = "From: $email \r\n";
    mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
    echo "Thank You!";
}
?>
于 2012-07-31T12:57:47.047 回答
0

这样做:

<form action="" id="contactform" method="POST">

或更好(有效):

<form action="<?php echo $_SERVER['SCRIPT_FILENAME'] ?>" id="contactform" method="POST">

要在脚本检查中捕获发布数据的数据:

<?php 
if (isset($_POST['submit'])) {
    // you should also check if field was filled (strict coding)
    if (isset($_POST['email'])) $email = $_POST['email'];
    ...
}
于 2012-07-31T12:58:47.270 回答