【问题标题】:JQuery/AJAX & PHP - Error with isset() when using .load() functionJQuery/AJAX 和 PHP - 使用 .load() 函数时 isset() 出错
【发布时间】:2018-07-28 11:02:18
【问题描述】:

我的网站上有一个注册页面,我想对其实施 PHP 和 AJAX 验证。我将展示我的代码模板(我的代码要大得多)以尝试解释问题。

registration.php

<!DOCUMENT html>
<html>
 <head>
  <script>
   $(document).ready(function(){
    $("#signupForm").submit(function(event){
     event.preventDefault();
     var firstNameInput = $("#firstName").val();
     var lastNameInput = $("#firstName").val();
     $(".messageForm").load("inculdes/signup.script.php", {
      firstName: firstNameInput,
      lastName: lastNameInput
     });
    });
   });
  </script>
 </head>
 <body>
  <form id="signupForm" action="includes/signup.script.php" method="POST">
   <input id="firstName" type="text" name="firstName">
   <input id="firstName" type="text" name="firstName">
   <button id="submit" name="submit" type="submit">Submit</button>
   <div class="messageForm"></div>
  </form>
 </body>
</html>

signup.script.php

 <?php
  if (isset($_POST['submit'])) {
   include "dbconn.script.php";

   $firstName = $_POST['firstName'];
   $lastName = $_POST['lastName'];

   //Validators for inputs in PHP with various error messages (1-15) and database INSERT and SELECT functions.
   ...

  } else {
     echo "<span>Error 16</span>";
     exit();
    }
  }
 ?>

 <script>
  // JQuery validator for inputs and CSS style changers based on errors
  ...
 </script>

我的问题是当我单击提交按钮时,我收到错误消息“错误 16”,所以我的函数跳过整个 PHP 脚本并且不会将数据插入数据库。我得出的结论是这个问题是因为变量$_POST['submit']没有设置,因为当我将第一行代码更改为if (!isset($_POST[submit'']))时,它就像魅力一样,但我不想失去阻止用户输入signup.script.php的能力在浏览器的 URL 字段中并运行它。如何纠正这个工作?我看过的教程有这段代码,在这种情况下它可以正常工作。

附:如果需要解决这个问题,我会扩展我的代码,因为我想节省空间,所以我给出了它的简写版本。

【问题讨论】:

  • 抱歉,这些是我现在的打字错误,我的原始代码中没有这些错误。我在这里更正了它们。
  • 您根本不发送submit 的请求。您可以在此处添加:{ firstName: firstNameInput, lastName: lastNameInput, submit: 1 } - 检查isset($_POST['firstName'])
  • “抱歉,这些是我现在的打字错误” - 请不要为 SO 重写代码。对您的实际代码进行真正的复制/粘贴。
  • inculdes 这也只是一个错字吗?这个词拼写为“包括”。
  • ^ ...这就是您需要发布实际代码的原因,因此我们不会坐下来调试实际上并不存在的错误。

标签: javascript php jquery ajax forms


【解决方案1】:

您根本不随请求发送“提交”。 你可以在这里添加它:

$(".messageForm").load("inculdes/signup.script.php", { 
   firstName: firstNameInput, 
   lastName: lastNameInput, 
   submit: 1 
});

或检查isset($_POST['firstName'])

旁注:如果没有通过load() 传入的对象,它将是一个GET 请求。值得记住...

请求方法

如果数据作为对象提供,则使用 POST 方法;否则,假定为 GET。

The Docs

【讨论】:

  • 因此请在浏览器中检查您的控制台/网络日志。点击提交的那一刻,是 GET 还是 POST 请求?
  • 根据我在他们的帖子下留下的几个 cmets,最好在 Jeff 那里再次检查 OP 的代码。
  • @FunkFortyNiner 是的,我知道还有更多问题,可能只是传输代码时的拼写错误。我们不知道。我指出的一个问题似乎是关键的非打字错误。
  • @Jeff 这家伙在开始时进行了编辑,我指出了他们修复的错别字,然后我删除了我的 cmets。很难说我们将把自己扔在这里 LOL!
  • 感谢您的帮助!在load() 函数的末尾添加submit 使它像魅力一样工作!如果我早点问,我不会花 30 个小时来寻找解决方案。
【解决方案2】:

根据jQuery.load() 的jQuery 文档(这是一个简写的jQuery.ajax 方法),如果这是$_GET 而不是$_POST,这听起来很相似...最好使用类似的东西@987654322 @ 与 method: 'POST' 结合使用 - 或检查 PHP 中的 $_GET

【讨论】:

  • 来自文档:The POST method is used if data is provided as an object
  • @Jeff 确实,submit 的缺席字段可能是罪魁祸首。
【解决方案3】:

亲爱的,请仔细检查您的 JavaScript 代码

event.preventDefault(); // Preventing default form submission

$(".messageForm").load("inculdes/signup.script.php", {
      firstName: firstNameInput,
      lastName: lastNameInput
});

仅将 firstName 和 lastName 发布到 signup.script.php

您正在尝试检查isset($_POST['submit']) 直到您在帖子中通过“提交”,例如您已经通过的名字和姓氏,这肯定是错误的,如下所示

$(".messageForm").load("inculdes/signup.script.php", {
      firstName: firstNameInput,
      lastName: lastNameInput,
      submit: 'yes'
});

希望对你有帮助

【讨论】:

  • 这就是解决方案。非常感谢。
猜你喜欢
  • 2011-01-12
  • 2013-01-17
  • 1970-01-01
  • 2010-10-15
  • 2012-11-05
  • 1970-01-01
  • 2022-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多