简单的 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 提交表单不起作用的主要内容,如果未能解决你的问题,请参考以下文章

js提交不起作用不将表单数据发送到php

使用 Jquery 验证插件提交 Ajax 表单不起作用

提交表单时测试值是不是为数字不起作用

提交ajax表单并停留在同一页面上不起作用

将表单提交到电子邮件并重定向不起作用

添加产品表单不起作用,HTML 和 PHP