0

我只是 PHP 和 Html 的初学者。我已经看到了很多与此相关的 SO 问题,但不知何故无法在我的最后解决一个非常简单的问题。所以,请帮忙。

以下代码似乎不起作用。当我运行此代码时,表单前总是有一条消息“现在似乎有问题。请稍后再试”。无论我是否按下提交按钮,都没有任何区别。

<h2 >Inquiry form</h2>

<?php
    if (isset($_POST['submit'])){

        echo "Thank You!";
    }
    else {
        echo "There seems to be a problem right now. Please try again after sometime";
    }                                   

?> 

<form name="input" method="POST" action="contact.php">
    <label for="Name">Name (required):</label>
    <br />
    <input type="text" name="Name" />
    <br />
    <div class="clear"></div>
    <label for="inputmail">Email(required):</label>
    <br />
    <input type="text" name="email" />
    <br />
    <div class="clear"></div>
    <label for="inputtelefon">Phone:</label>
    <br />
    <input type="text" name="phone" />
    <br />
    <div class="clear"></div>
    <label for="inputmessage">Message:</label>
    <br/>
    <textarea name="message" cols="28" rows="3" ></textarea>
    <div class="clear"></div>
    <div id="send">
        <input type="submit" value=" Submit " />
        <input type="reset" value="  Clear  "  />
    </div>
</form>

更改代码:

<h2 >Inquiry form</h2>

                                  <?php
                                  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                            //if ($_SERVER['REQUEST_METHOD'] == 'POST') {  This is not working as well
                                        echo "Thank You!";
                                    }
                                    else {
                                        echo "There seem to be a problem right now. Please try again after sometime";
                                    }
                             ?> 

                       <form name="input" method="POST" action="contact.php">
                            <label for="Name">Name (required):</label>
                            <br />
                            <input type="text" name="Name" />
                            <br />
                             <div class="clear"></div>
                             <label for="inputmail">Email(required):</label>
                            <br />
                            <input type="text" name="email" />
                            <br />
                            <div class="clear"></div>
                            <label for="inputtelefon">Phone:</label>
                            <br />
                            <input type="text" name="phone" />
                            <br />
                            <div class="clear"></div>
                            <label for="inputmessage">Message:</label>
                            <br/>
                            <textarea name="message" cols="28" rows="3" ></textarea>
                            <div class="clear"></div>
                  </div>
                  <div id="send">
                <input type="submit" value=" Submit " name="submit"/>
                </div>
            </form>
4

4 回答 4

7

那是因为您的提交按钮没有名称:

<input type="submit" value=" Submit " name="submit"/>

编辑

基于 RandomCoder 的评论(在 Marc B 的回答中)。

发现了这个类似的问题:isset($_POST['submit']) vs $_SERVER['REQUEST_METHOD']=='POST'

于 2013-02-25T18:29:16.333 回答
4

检查提交的方法无效。永远不要检查表单域的存在/不存在。这是不可靠的。您可能会更改字段名称,但忘记更新 PHP。改用这个:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   ...
}

它是 100% 可靠的,如果执行了 POST,它将始终是“真实的”。

于 2013-02-25T18:30:36.327 回答
1

看看你更新的 if 语句。意思是:如果表单已提交,则显示“thank you”,如果表单尚未提交,则显示“似乎有问题”。

这就是您总是看到“似乎有问题”的原因,因为当您查看表单而不提交它时,else您的 if 语句块会触发。

您应该删除该else块,因为它没有任何意义,所以它变成:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // form has been submitted, handle the data and say thanks...
    echo "Thank You!";
}

使用此方法而不是检查提交按钮会更好,因为如果用户按下回车键提交表单,Internet Explorer 不会将提交按钮作为 post 变量发送。

更多信息 -Why isset($_POST['submit'])很糟糕

于 2013-02-26T09:47:33.103 回答
0

我看到只有一个原因,即您没有定义名称提交给任何变量。有两种方法可以找到提交表单:

要么改变:

 <input type="submit" value=" Submit " />

 to

 <input type="submit" value=" Submit " name="submit"/>

或添加额外的行来做这样的事情

 <input type = "hidden" name="passed" />

并检查

 <?php
      if (isset($_POST['passed'])){
          echo "Thank You!";
      }else {
           echo "There seems to be a problem right now. Please try again after sometime";
      }                                   

 ?> 
于 2013-02-25T18:36:52.360 回答