简单的 PHP 提交表单不起作用
Posted
技术标签:
【中文标题】简单的 PHP 提交表单不起作用【英文标题】:Simple PHP submit form not working 【发布时间】:2014-01-18 14:39:42 【问题描述】:只是制作一个简单的提交表单,似乎无法正常工作。
它甚至不会报告奇怪的错误。
检查了 php.ini,一切似乎都很好。
html:
<form id="submit-form" action="receiving.php" method="POST">
<h3>Submit a Link</h3>
<fieldset>
<table>
<tr>
<td><label for="name">You</label></td>
<td><input id="name" name="name" type="text" placeholder="Your Twitter or Blog ect." /></td>
</tr>
<tr>
<td><label for="submit-links">Link(s)</label></td>
<td><input id="sumbit-links" name="submit-links" type="text" placeholder="" required="" /></td>
</tr>
<tr>
<td><input name="submit" type="submit" value="SUBMIT" /></td>
</tr>
</table>
</fieldset>
</form>
receiving.php:
<?php
error_reporting(-1);
$name = $_POST['name'];
$submit-links = $_POST['submit-links'];
if(isset($_POST['submit']))
$from_add = "submit@webdesignrepo.com";
$to_add = "ben@webdesignrepo.com";
$subject = "Your Subject Name";
$message = "Name:$name \n Sites: $submit-links";
$headers = 'From: submit@webdesignrepo.com' . "\r\n" .
'Reply-To: ben@webdesignrepo.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion()
if(mail($to_add,$subject,$message,$headers))
$msg = "Mail sent";
print "<p>Thanks $name</p>";
?>
任何帮助将不胜感激:)
【问题讨论】:
你做了什么来解决这个问题? 您还缺少'X-Mailer: PHP/' . phpversion()
之后的分号,顺便说一下,您不应该使用(出于安全目的)但是...如果您绝对想使用它,像这样添加它'X-Mailer: PHP/' . phpversion();
这个$msg = "Mail sent";
不会打印任何东西,顺便说一句。你会看到一个空白屏幕。
应该报告 Jeremy 发现的错误。尝试查看源代码以查看错误是否隐藏?
替换 $submit-links = $_POST['submit-links']; by $submit->links = $_POST['submit-links'];
【参考方案1】:
$submit-links
不是有效的变量名。将所有实例切换到$submit_links
【讨论】:
谢谢,我认为这很简单:)【参考方案2】:您的表单存在一些问题,我在发布此答案之前对其进行了测试。
正如Jeremy Miller
在他的回答中指出的那样 (+1
Jeremy btw),在变量中使用连字符是无效的,请改用下划线。
'X-Mailer: PHP/' . phpversion()
后面还缺少一个结束分号,顺便说一下,你不应该使用(出于安全目的)但是......如果你绝对想使用它,像这样添加它@ 987654324@ - 请参阅下面的EDIT(建议性用法)。
这个$msg = "Mail sent";
不会在成功提交后打印消息“Mail sent
”,因为您只是将变量分配给文本;你需要echo it
我在下面添加;这不是一个错误,但如果你不打算使用它,为什么会有它。 (眨眼)。
HTML 表单
<form id="submit-form" action="receiving.php" method="POST">
<h3>Submit a Link</h3>
<fieldset>
<table>
<tr>
<td><label for="name">You</label></td>
<td><input id="name" name="name" type="text" placeholder="Your Twitter or Blog ect." /></td>
</tr>
<tr>
<td><label for="submit_links">Link(s)</label></td>
<td><input id="sumbit_links" name="submit_links" type="text" placeholder="" required="" /></td>
</tr>
<tr>
<td><input name="submit" type="submit" value="SUBMIT" /></td>
</tr>
</table>
</fieldset>
</form>
PHP
<?php
error_reporting(-1);
$name = $_POST['name'];
$submit_links = $_POST['submit_links'];
if(isset($_POST['submit']))
$from_add = "submit@webdesignrepo.com";
$to_add = "ben@webdesignrepo.com";
$subject = "Your Subject Name";
$message = "Name:$name \n Sites: $submit_links";
$headers = 'From: submit@webdesignrepo.com' . "\r\n" .
'Reply-To: ben@webdesignrepo.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to_add,$subject,$message,$headers))
$msg = "Mail sent";
echo $msg;
print "<p>Thanks $name</p>" ;
?>
编辑(建议性用法)
我建议你使用下面的 PHP,因为你现在的条件语句会抛出以下错误,如果直接访问 PHP 文件,可能会发生这种情况。
另外,使用'X-Mailer: PHP/' . phpversion()
可以让人们知道您使用的是哪个 PHP 版本。
我得到了很好的授权,使用它是一个安全漏洞。他的名字我现在忘记了,但我会在我记得的时候加上它。
注意:未定义的索引:第 4 行中的名称...
注意:未定义的索引:第 5 行的 submit_links in...
我已经在if(isset($_POST['submit']))
条件语句中设置了变量。
<?php
error_reporting(-1);
if(isset($_POST['submit']))
$name = $_POST['name'];
$submit_links = $_POST['submit_links'];
$from_add = "submit@webdesignrepo.com";
$to_add = "ben@webdesignrepo.com";
$subject = "Your Subject Name";
$message = "Name:$name \n Sites: $submit_links";
$headers = 'From: submit@webdesignrepo.com' . "\r\n" .
'Reply-To: ben@webdesignrepo.com' . "\r\n";
if(mail($to_add,$subject,$message,$headers))
$msg = "Mail sent";
echo $msg;
print "<p>Thanks $name</p>" ;
// else conditional statement for if(isset($_POST['submit']))
else
echo "Sorry, you cannot do that from here. Please fill in the form first.";
?>
【讨论】:
这太好了,感谢您抽出宝贵时间来研究这个问题 :) 现在可以完美运行了!有没有一种简单的方法可以让它在表单中打印Thanks $name 文本(并删除表单输入)?很抱歉打扰您,我刚开始使用 PHP,再次感谢 不客气。至于没有表单输入的打印,我怀疑是否可以这样做,因为$name
需要从表单中引用开始。然而,我认为您可能会问,既然我已经重新阅读了您的评论,那么如果您希望在用户填写表单并按下提交按钮后表单保持不变,那么您需要输入首先是您的 PHP,然后是您的表单/HTML 代码(不混合在一起)并使用 action=""
而不是您现在拥有的,如果这就是您的意思。 @mildrenben
我只是想让它保持在同一页面上。当您点击提交时,它会用谢谢替换表单输入,$name 不是必需的。这没什么大不了的,如果不能完成,我将只是设置 PHP 页面的样式并有一个指向索引的链接。 @弗雷德-ii-
啊,好的,我现在明白了。你肯定需要使用 Ajax。 @mildrenben
是的,其他人在 Reddit 上提到了 AJAX。不用担心,感谢您的帮助。【参考方案3】:
操作可能是错误的。
例如,如果您的htaccess
重定向到https.www
而不是http
,您将不会在以下示例中看到$_POST
:
<?php $formAction = 'http://somedomain.com/receiving.php'; ?>
<form method="post" action="<?php echo $formAction; ?>" >
//$_POST will be empty
但如果你使用它会起作用
<?php $formAction = 'https://www.somedomain.com/receiving.php'; ?>
<form method="post" action="<?php echo $formAction; ?>" >
//$_POST will contain variables
【讨论】:
以上是关于简单的 PHP 提交表单不起作用的主要内容,如果未能解决你的问题,请参考以下文章