mysql HTML字段不会通过AJAX发布到PHP

pxy2qtax  于 2023-11-16  发布在  Mysql
关注(0)|答案(2)|浏览(138)

我开始为我的应用程序使用PHP登录脚本的基本启动,从here克隆。当试图在注册页面上添加元素时,signup.php数据在经过AJAX处理后不会传递给PHP。我非常熟悉PHP,AJAX是一个不同的故事-我是一个新手。
我添加了一个POST解析器来输出到主注册页面,看看PHP接收到了什么。除了我添加的那个,所有其他输入都被接收到了。如错误所示:
第一个月
x1c 0d1x的数据
正如你在这里看到的,POST结果显示在弹出窗口的下面,我想看看POST到PHP user.php的是什么。很明显,我添加的name元素没有被路由到正确的PHP文件。当然,PHP显示的错误解释说,由于它没有被POST,所以找不到name。

signup.php,添加的行是<input name="name" id="name" type="text" class="form-control" placeholder="John Smith" autofocus>。在文件的最后我添加了一个验证,以确保表单在发布到signup.js之前已经填写完毕。我不相信这个问题是在这个php文件上。

  1. if (isset($_SESSION['username'])) {
  2. session_start();
  3. session_destroy();
  4. }
  5. ?>
  6. <!DOCTYPE html>
  7. <html lang="en">
  8. <head>
  9. <meta charset="utf-8">
  10. <title>Signup</title>
  11. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  12. <!-- Bootstrap -->
  13. <link href="../css/bootstrap.css" rel="stylesheet" media="screen">
  14. <link href="../css/main.css" rel="stylesheet" media="screen">
  15. </head>
  16. <body>
  17. <div class="container">
  18. <form class="form-signup" id="usersignup" name="usersignup" method="post" action="createuser.php">
  19. <h2 class="form-signup-heading">Register</h2>
  20. <input name="newuser" id="newuser" type="text" class="form-control" placeholder="Username" autofocus>
  21. <input name="name" id="name" type="text" class="form-control" placeholder="John Smith" autofocus>
  22. <input name="email" id="email" type="text" class="form-control" placeholder="Email">
  23. <br>
  24. <input name="password1" id="password1" type="password" class="form-control" placeholder="Password">
  25. <input name="password2" id="password2" type="password" class="form-control" placeholder="Repeat Password">
  26. <button name="Submit" id="submit" class="btn btn-lg btn-primary btn-block" type="submit">Sign up</button>
  27. <div id="message"></div>
  28. </form>
  29. </div> <!-- /container -->
  30. <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
  31. <script src="//code.jquery.com/jquery.js"></script>
  32. <!-- Include all compiled plugins (below), or include individual files as needed -->
  33. <script type="text/javascript" src="js/bootstrap.js"></script>
  34. <script src="js/signup.js"></script>
  35. <script src="http://jqueryvalidation.org/files/dist/jquery.validate.min.js"></script>
  36. <script src="http://jqueryvalidation.org/files/dist/additional-methods.min.js"></script>
  37. <script>
  38. $( "#usersignup" ).validate({
  39. rules: {
  40. name: {
  41. required: true
  42. },
  43. email: {
  44. email: true,
  45. required: true
  46. },
  47. password1: {
  48. required: true,
  49. minlength: 4
  50. },
  51. password2: {
  52. equalTo: "#password1"
  53. }
  54. }
  55. });
  56. </script>
  57. </body>
  58. </html>

字符串

signup.js,**这就是我认为问题所在。**很可能是因为我不懂AJAX。这里我唯一改变的是IF语句中的子句和数据对象&name="+name的结尾。即使在将此添加到post-configureuser.php之后,PHP也不会接收该变量。

  1. $(document).ready(function(){
  2. $("#submit").click(function(){
  3. var username = $("#newuser").val();
  4. var name = $("#name").val();
  5. var password = $("#password1").val();
  6. var password2 = $("#password2").val();
  7. var email = $("#email").val();
  8. if((username == "") || (name == "") || (password == "") || (email == "")) {
  9. $("#message").html("<div class=\"alert alert-danger alert-dismissable\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>Please ensure that name, username and password are all filled.</div>");
  10. }
  11. else {
  12. $.ajax({
  13. type: "POST",
  14. url: "createuser.php",
  15. data: "newuser="+username+&password1="+password+"&password2="+password2+"&email="+email+"&name="+name,
  16. success: function(html){
  17. var text = $(html).text();
  18. //Pulls hidden div that includes "true" in the success response
  19. var response = text.substr(text.length - 4);
  20. if(response == "true"){
  21. $("#message").html(html);
  22. $('#submit').hide();
  23. }
  24. else {
  25. $("#message").html(html);
  26. $('#submit').show();
  27. }
  28. },
  29. beforeSend: function()
  30. {
  31. $("#message").html("<p class='text-center'><img src='images/ajax-loader.gif'></p>")
  32. }
  33. });
  34. }
  35. return false;
  36. });
  37. });


我不相信这个问题是在这个PHP文件中,但我以前错了。我添加了$name = $_POST['name'];,我添加了:

  1. foreach ($_POST as $key => $value){
  2. echo "{$key} = {$value}\r\n";

  1. <?php
  2. require 'includes/functions.php';
  3. include_once 'config.php';
  4. //Pull username, generate new ID and hash password
  5. $newid = uniqid(rand(), false);
  6. $newuser = $_POST['newuser'];
  7. $newpw = password_hash($_POST['password1'], PASSWORD_DEFAULT);
  8. $pw1 = $_POST['password1'];
  9. $pw2 = $_POST['password2'];
  10. $name = $_POST['name'];
  11. //Enables moderator verification (overrides user self-verification emails)
  12. if (isset($admin_email)) {
  13. $newemail = $admin_email;
  14. } else {
  15. $newemail = $_POST['email'];
  16. }
  17. //Validation rules
  18. if ($pw1 != $pw2) {
  19. echo '<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>Password fields must match</div><div id="returnVal" style="display:none;">false</div>';
  20. } elseif (strlen($pw1) < 4) {
  21. echo '<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>Password must be at least 4 characters</div><div id="returnVal" style="display:none;">false</div>';
  22. } elseif (!filter_var($newemail, FILTER_VALIDATE_EMAIL) == true) {
  23. echo '<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>Must provide a valid email address</div><div id="returnVal" style="display:none;">false</div>';
  24. } else {
  25. //Validation passed
  26. if (isset($_POST['newuser']) && !empty(str_replace(' ', '', $_POST['newuser'])) && isset($_POST['password1']) && !empty(str_replace(' ', '', $_POST['password1']))) {
  27. //Tries inserting into database and add response to variable
  28. $a = new NewUserForm;
  29. $response = $a->createUser($newuser, $newid, $newemail, $newpw);
  30. //Success
  31. if ($response == 'true') {
  32. echo '<div class="alert alert-success"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>'. $signupthanks .'</div><div id="returnVal" style="display:none;">true</div>';
  33. //Send verification email
  34. $m = new MailSender;
  35. $m->sendMail($newemail, $newuser, $newid, 'Verify');
  36. } else {
  37. //Failure
  38. mySqlErrors($response);
  39. }
  40. } else {
  41. //Validation error from empty form variables
  42. echo 'An error occurred on the form... try again';
  43. }
  44. foreach ($_POST as $key => $value){
  45. echo "{$key} = {$value}\r\n";
  46. }
  47. };


为了使它非常清楚,我的问题仍然是为什么我添加的字段没有进入最终的PHP文件。
同样要说明的是,这段代码在没有尝试添加额外字段的情况下运行得很好。经过验证,这段代码是可用的。一旦我尝试添加我的name字段,代码就会中断。
感谢您提供的任何帮助。

kuuvgm7e

kuuvgm7e1#

我做了一个虚拟的测试脚本松散的基础上你提供了什么。
提示提供代码时-请指定每个部分的实际文件名。
这是“signup.js”文件的一部分,其中注解掉了数据定义并添加了新定义。
一个更好的方法是如下所示构建数据。

  1. $.ajax({
  2. type: "POST",
  3. url: "createuser.php",
  4. // data: "newuser=" + username + & password1 = "+password+" & password2 = "+password2+" & email = "+email+" & name = "+name,
  5. data: {
  6. 'newuser': username,
  7. 'password1': password,
  8. 'password2': password2,
  9. 'email': email,
  10. 'name': name
  11. },

字符串
使用我运行的代码-我将其设置为var_dump($_POST),它将POST数据显示在提交按钮下的表单上。
给予一个机会。
下面是我在表单中输入数据后得到的结果(结果是我为测试而输入的值,我已经删除了您的验证以使其不碍事)

  1. array (size=5)
  2. 'newuser' => string 'my username' (length=11)
  3. 'password1' => string 'my password' (length=11)
  4. 'password2' => string 'my password' (length=11)
  5. 'email' => string 'my email' (length=8)
  6. 'name' => string 'my name' (length=7)

展开查看全部
2nc8po8w

2nc8po8w2#

Placeholder不是“默认值”。你不能期望它们作为内容发送。这就是为什么你在PHP中得到警告。

另一个问题是字符串连接:引号丢失。
它应该是"newuser="+username+"&password1="+password,而不是你现在拥有的:"newuser="+username+&password1="+password
注意&password1之前的引用。
您可能应该使用一个更好的编辑器,因为您应该根据语法突出显示来捕捉这一点。
也就是说,这有很多问题。
首先,不要使用uniqid(rand(), false)来生成ID,而应该依赖MySQL的AUTO_INCREMENT功能。
然后是JS。你为什么要用jQuery来做这个?!JS现在有Fetch API,这比jQuery的方法要上级。还有FormData抽象,它简化了表单处理。

  1. document.querySelector('usersignup').addEventListener('submit', function (event){
  2. fetch('createuser.php', {
  3. method: 'POST',
  4. body: new FormData(event.target)
  5. }).then(function (response) {
  6. return resonse.text())
  7. }).then(function(html) {
  8. document.querySelector('#message').innerHTML = html;
  9. })
  10. }, false);

字符串
不过,您必须添加polyfill以兼容旧版本的IE。
还有.

展开查看全部

相关问题