使用 <input type ="button"> 提交表单

Posted

技术标签:

【中文标题】使用 <input type ="button"> 提交表单【英文标题】:Submitting a form using <input type ="button"> 【发布时间】:2012-03-30 11:28:29 【问题描述】:

我在这方面遇到了一点麻烦,看不出我做错了什么。我有这个表格:

<div class="user">

    <form name="userDetails" id="userDetails" method="post" >
        <input type="text" name="firstName" id="firstName" class="firstName"  placeholder="first name " />
        <input type="text" name="lastName" id="lastName" class="lastName"  placeholder="last name " />
        <input type="text" name="address" id="address" class="address"  placeholder="First line of Address " />
        <input type="text" name="postcode" id="postcode" class="postcode"  placeholder="Postcode " />
        <input type="text" name="email" id="email" class="email"  placeholder="E-Mail " />
        <input type="text" name="phone" id="phone" class="phone"  placeholder="Phone " />

        <input type="button" id="submitDetails" class="submitDetails" name="submitDetails" value="Submit Your Details" />

    </form>

</div>

因此,当用户单击按钮时,它应该提交表单,然后让这个 php 对表单进行操作(我知道 sql 不是准备好的语句并且容易受到注入,但这将在稍后完成):

 <div class="overallSummary">

  <?php
    $fName = $_POST['firstName'];
    $lName = $_POST['lastName'];
    $address = $_POST['address'];
    $pc = $_POST['postcode'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];

    $userSQL = "INSERT INTO user (forename, surname, address, postcode, email, phone) VALUES ('$fName', '$lName', '$address', '$pc', '$email', '$phone')";


    $result = mysql_query($userSQL) or die(mysql_error());

   ?>
  </div>

但是,当我检查我的表时,没有信息被插入到数据库中。请记住,这段代码都在同一个文档中,因此我没有在表单声明中使用 action="file.type" 。这是因为我不确定 ajax 在这里是否合适。

非常感谢任何帮助,谢谢。

编辑

我可以做的是使用 ajax 和 jQuery 来监听按钮点击事件:

$(document).ready(function() 
  $(".submitDetails").click(function(e) 
      e.preventDefault();
       var userData = $("#?").val();
       var dataToSend = '?=' + eNameData;

    $.ajax(                
        url: "userDetailTest.php", 
        type: "POST",
        data: dataToSend,     
        cache: false,
        success: function(php_output)
        
         $(".overallSummary").html(php_output);
               
    );
  );
);

这里的想法是在单击按钮时使用此 ajax 并调用 ajax 函数,但我不确定将什么作为 ID 放入变量“userData”以及将什么添加到“dataToSend”变量中让它与我的表单一起使用。

【问题讨论】:

表单中没有操作属性 我已在我的问题中指定了这一点。 【参考方案1】:

你基本上回答了你自己的问题。您需要将操作放在指向处理表单的脚本的表单中。从这个开始,如果您以后决定使用 AJAX,您可以随时修改代码来实现它。

【讨论】:

【参考方案2】:

您仍然需要采取行动。如果 PHP 在同一页面上,您可以使用以下内容:

action="<?php echo $_SERVER['PHP_SELF']"

【讨论】:

【参考方案3】:

实际上要提交表单,您的input 类型 需要是submit,而不是button

使用button 标签也可以。

<input type="submit" id="submitDetails" class="submitDetails" name="submitDetails" value="Submit Your Details" />

除非您有一些触发表单提交的 javascript 代码。

根据规范,action 属性也是必需的,但即使没有它,大多数浏览器也会假定 action URL 是当前页面。

编辑:如果您想在不重新加载页面的情况下提交表单数据,您必须使用 ajax,或者将整个表单放在 iframe 下。 (请改为使用 ajax)。

否则点击input[type=button] 将不会真正做任何事情。

用户数据是表单中的实际数据,您可以使用以下方法捕获它:

$(document).ready(function() 
  $(".submitDetails").click(function(e) 
      e.preventDefault();

    // See Teez answer, I wasn't aware of this.
    var dataToSend = $("#userDetails").serializeArray();

    $.ajax(                
        url: "userDetailTest.php", 
        type: "POST",
        data: dataToSend,     
        cache: false,
        success: function(php_output)
        
         $(".overallSummary").html(php_output);
            
    );
  );
);

【讨论】:

我需要使用“按钮”,因为我不想刷新页面。 那么使用 Ajax 是必需的,而不是一个选项。 (是的,iframe 仍然存在,我知道)。 谢谢,我想可能是这样。那你能告诉我如何使用ajax函数传递输入的数据吗?【参考方案4】:

前面的三个答案需要结合起来给出一个答案,因为在一个可行的 HTML 表单中实际上缺少两件事,即操作和提交:

<form action="mytarget.php" method="post"/>
....add input fields...
<input type="submit" value="Submit"/>
</form>

【讨论】:

感谢您的回复。但是我需要使用“按钮”..查看我的编辑。 好吧,你不是在问“为什么这个表单不提交”,而是“我如何使用 Ajax 提交它”。正如有人提到的那样 - 你需要整个表单的 ID - #userDetails 请参阅@Nathan 的回复 - 应该这样做。【参考方案5】:

在表单上添加操作并使用提交。

<form action="pass_data_here.php" method="post">

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

此外,为了简化调试,您可以先回显这些字段,然后再将它们保存到数据库。这样,您就可以随意处理数据,而无需访问数据库管理表。

编辑:既然你真的想要一个按钮,那么这个 ajax 可能会有用

$('.submitDetails').click(function(e) 
            e.preventDefault();

              var dataString =  "";
              //this will get all the data of your form separated by &
              $("form input:text").each(function(index, element) 
                    dataString += $(this).attr("id")+"="+$(this).val()+"&";
                );
            dataString = '?' + dataString; //added the needed ?

            $.ajax(                
                url: "userDetailTest.php", 
                type: "POST",
                data: dataString,     
                cache: false,
                success: function(php_output)
                
                 $(".overallSummary").html(php_output);
                    
                );

            );//end submitDetails

【讨论】:

感谢您的回复,但是我需要使用“按钮”,请检查我的编辑。你知道如何应用正确的ajax函数吗? 你可以试试我编辑的那个。请注意,我使用每个输入文本的“id”作为数据的名称。 另外,Tezzs 的回答在传递数据 json 字符串方面似乎更好【参考方案6】:

有以下几种方式:

不想刷新页面就用下面的:

 var dataToSend = $('userDetails').serializeArray();

或者尝试使用下面的代码通过 jquery 提交表单:

$("userDetails").submit(function()
  // do your stuff
  $.post(
    "post.php",
    // add all stuff for inserting data 
  );

);

以下链接对您有很大帮助:

http://www.ryancoughlin.com/2008/11/04/use-jquery-to-submit-form/

【讨论】:

兄弟,您忘记用引号将“userDetails”括起来并在代码示例中使用#。【参考方案7】:

您可以使用 和一些 JavaScript 代码提交表单

只需按照以下步骤操作:

1.在输入标签中添加事件监听器onclick="functionName('buttonId','formName')"

2.在Script中编写如下函数

function functionName(butVal, formVal)

document.getElementById(formVal).submit();

或者如果您想在 PHP POST 方法中访问它...请按照以下步骤操作

1.在输入标签中添加事件监听器onclick="functionName('buttonId','formName')"

2.在Script中编写如下函数

function functionName(butVal, formVal)

document.getElementById(butVal).type="submit";
document.getElementById(formVal).submit();

这里,我把输入类型按钮改成提交了。

所以,可以在POST方法中接收。

如果需要进行任何验证,仍然可以在更改js函数中的类型之前执行

【讨论】:

以上是关于使用 <input type ="button"> 提交表单的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 实现 <input type="text"> 的 onchange?

<button> 与 <input type="button" />。使用哪个?

我可以使用 <input type="button" /> 提交表单值吗?

<input type="file" /> 的 HTML 助手

使用 JQuery 检测对 <input type="text"> 的所有更改(立即)

防止 ESC 从 Chrome 上的 <input type="search"> 清除文本(或添加按钮以清除文本而不使用 type="search"