在创建用户时保持为null

Keep getting null on create user

本文关键字:null 创建 用户      更新时间:2023-09-26

大家好,我有这个php-jquery ajax创建用户表单,它将创建细节传递给php脚本,但我在post变量上一直为null。任何帮助都将不胜感激!低于的代码

Html:

<form method="post" action="" id="createForm">
<input type="text" name="createUser" class="form-control" placeholder="Brugernavn*" id="createUser">
 <input type="email" name="createUserEmail" class="form-control" placeholder="Email*" id="createUserEmail">
<input type="password" name="createUserPass" id="createUserPass" class="form-control" placeholder="Kodeord*" id="createUserPass">
<input type="password" name="confirmUserPass" id="confirmUserPass" class="form-control" placeholder="Bekræft Kodeord*" id="createUserPass">
<h4 id="newsletterText">Vil du have vores nyhedsbrev?</h4>
<select name="newsletter" id="newsletter" class="form-control"><option value="yes">Ja tak!</option><option value="nej" selected="">Nej tak</option></select>
<input type="submit" name="submitCreateUser" class="btn btn-success" id="submitCreateUser" value="Opret!">
    </form>

jquery:

$(document).ready(function(){
 $("#submitCreateUser").click(function(){
 var username = $("#createUser").val();
   var email = $("#createUserEmail").val();
    var pass = $("#createUserPass").val();
      var cPass = $("#createUserPassC").val();
        var newsletter = $("#newsletter").val();
   $.ajax({
 type: "POST",
 url: "createuserajax.php",
 data: "username="+username+"&email="+email+"&pass="+pass+"&cPass="+cPass,
 success: function(html){
  if(html=='true')
  {
alert(username);

 }
 else
  {
  }
 },
 }
  );
});
});

PHP:

 <?php
 $username = $_POST['username'];
 $email = $_POST['email'];
 $password = $_POST['pass'];

var_dump($username);
 $securePassword = md5(($password));
    $sqlInsertUser = "INSERT INTO users (username,email,password) VALUES ('$username','$email','$securePassword')";
    $result = mysqli_query($con,$sqlInsertUser);

正如adeneo所说,您的html表单很可能在进行ajax调用之前以标准方式提交,因为您没有阻止默认行为。请尝试以下操作:


或者,您可以删除<input type="submit" name="submitCreateUser" class="btn btn-success" id="submitCreateUser" value="Opret!">,并将id="submitCreateUser"赋予其他元素,如自定义按钮或链接。当您单击类型为submitinput标签时,默认情况下,它将以正常方式提交随附的表格。这种情况发生在点击处理程序听到点击之前,因此在代码调用ajax之前提交表单。使用不同的元素点击,这不会发生

别忘了要想实现这一点,php文件必须回显将在html变量中返回的内容,否则html永远不会为真,也不会发生任何事情。

问题的一部分是您的输入元素,特别是用于密码和密码检查的输入元素都有两个独立的id标记,第一个是重复的,第二个是完全不同的id。同样在jquery中,当您尝试获取id检查值时,您使用另一个不同的id。

下面是一个测试页面,它解决了所有这些问题,并按预期工作:

http://dodsoftware.com/sotests/createuserajax.html

测试php代码:

<?php
  if( isset($_POST) )
  {
     $username = $_POST['username'];
     $email = $_POST['email'];
     $password = $_POST['pass'];
     echo   'username --'.$username.', email --'.$email.', password --'.$password;
  }
?>

html代码:

<form method="post" action="" id="createForm">
  <input type="text" name="createUser" class="form-control" placeholder="Brugernavn*" id="createUser">
  <input type="email" name="createUserEmail" class="form-control" placeholder="Email*" id="createUserEmail">
  <input type="password" name="createUserPass" id="createUserPass" class="form-control" placeholder="Kodeord*">
  <input type="password" name="confirmUserPass" id="confirmUserPass" class="form-control" placeholder="Bekræft Kodeord*" >
  <!-- these lines had duplicated id tags-->
  <h4 id="newsletterText">Vil du have vores nyhedsbrev?</h4>
  <select name="newsletter" id="newsletter" class="form-control">
    <option value="yes">Ja tak!</option>
    <option value="nej" selected="">Nej tak</option>
  </select>
  <input type="submit" name="submitCreateUser" class="btn btn-success" id="submitCreateUser" value="Opret!">
</form> 

jQuery代码:

  <script>
 $(document).ready(function() {
    $("#submitCreateUser").click(function( event ) { // add event var here
        event.preventDefault(); // add this line to stop the form from submitting the normal way before the ajax call
        var username = $("#createUser").val();
        var email = $("#createUserEmail").val();
        var pass = $("#createUserPass").val();
        var cPass = $("#confirmUserPass").val(); // you were using "#createUserPassC" here in error
        var newsletter = $("#newsletter").val();
        var datastring = "username=" + username + "&email=" + email + "&pass=" + pass + "&cPass=" + cPass +"&newsletter=" + newsletter;
        $.ajax({
            type: "POST",
            url: "createuserajax.php",
            data: datastring,
            success: function(html) {
                if (html) { // changed this line from "if (html == 'true')" just for testing  
                    alert(html); // changed this line from "alert(username);" just for testing  

                } else {
                    alert('something went wrong!');
                }
            },
        });
    });
});
</script>