简单的PHP提交表单无法工作

7

我正在制作一个简单的提交表单,但似乎无法使其正常工作。

这甚至不会报告错误,这很奇怪。

已检查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>";
?>

非常感谢您的帮助:)

你已经做了哪些排除故障的工作? - John Conde
1
你还缺少一个分号来结束 'X-Mailer: PHP/' . phpversion(),顺便说一下,出于安全考虑,你不应该使用它,但是如果你非常想使用它,可以像这样添加:'X-Mailer: PHP/' . phpversion(); - Funk Forty Niner
而且这个 $msg = "Mail sent"; 不会打印任何东西。你会得到一个空白屏幕。 - Funk Forty Niner
它应该报告Jeremy发现的错误。尝试查看源代码以查看错误是否隐藏? - halfer
将以下代码中的:$submit-links = $_POST['submit-links']; 替换为 $submit->links = $_POST['submit-links']; - Awlad Liton
3个回答

6

$submit-links不是一个有效的变量名。请将所有实例更改为$submit_links


谢谢,我以为这会是件简单的事情 :) - mildrenben

4

在发布这个回答之前,我进行了测试,发现你的表单有一些问题。

正如Jeremy Miller在他的回答中指出的那样(顺便说一句,Jeremy +1),在变量中使用连字符是无效的,应该使用下划线代替。

此外,在'X-Mailer: PHP/' . phpversion()之后缺少一个分号,顺便说一句,出于安全考虑,你不应该使用它,但是如果你绝对想使用它,可以像这样添加'X-Mailer: PHP/' . phpversion();——请参见下面的编辑(建议性用法)。

这个$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行

注意:未定义索引:submit_links...第5行

我已经将变量设置在您的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.";
}

?>

太好了,感谢您花费这么多时间来研究它 :) 现在它完美地工作了!有没有一种简单的方法在表单中打印感谢$ name文本(并删除表单输入)?抱歉打扰您,我刚开始学习PHP,再次感谢。 - mildrenben
不用谢。至于不使用表单输入打印,我怀疑这是不可能的,因为$name需要从表单中获取引用才能开始。但是我认为你现在可能在问的是,如果你希望用户填写表单并按下提交按钮后保持表单不变,则需要先放置PHP代码,然后将表单/HTML代码放在其下(不要混合在一起),并使用action =“”而不是你现在所拥有的内容,如果这就是你的意思。@mildrenben - Funk Forty Niner
我只是希望它留在同一页上。当您点击提交时,它将用感谢替换表单输入,$name不是必需的。如果无法完成,也没关系,我只需为PHP页面设置样式,并添加一个返回主页的链接即可。@Fred-ii- - mildrenben
啊,好的,我现在明白了。你需要使用Ajax,我很确定。@mildrenben - Funk Forty Niner
是的,Reddit 上还有其他人提到了 AJAX。不用担心,感谢你的帮助。 - mildrenben
不用谢。你可以通过Google搜索“ajax form php”来获取许多结果。我建议你尝试从问题和答案中找到“工作演示”,这就是我在找到喜欢的东西时所做的,然后我只需集成所需部分,或使用整个内容然后修改表单和PHP以适应自己的需求。@mildrenben - Funk Forty Niner

0
动作可能是错误的。 例如,如果您的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接