在使用 AJAX 时获取数据库的空值


Getting a null value to database when AJAX is used

我得到了这个工作正常的注册码,但我决定添加 AJAX 以使其更加动态,但是当我运行它时,我的 PHP 代码正在将空值保存到数据库中。

这就是我目前所知道的:每当用户在注册页面中写入信息时,它都会转到 AJAX,ajax 将其传递给 php,然后 php 将信息保存到数据库中,它回显一条消息,然后它转到 ajax,然后它显示消息。所有这些都有效,唯一的问题是无论我在注册页面中写什么,我的 php 代码都会保存 null 值。

我认为这是无法正常工作的代码,但我只是不知道另一种方式

  var username = encodeURIComponent(document.getElementById('username').value);
  var password = encodeURIComponent(document.getElementById('password').value);
  var url = "signip_parse.php?username="+username+"&password="+password;

以下是我的其余代码。 这是用户放置信息的页面,并将其保存为注册.php

<head>
<script src = "ajax.js"></script>
<div id="content">
</head>
<body>
<form action="signip_parse.php" method="post" id="registration_form">
<p>Name <input type="text" name="username" id = "username"/></p>
<p>Password <input type="password" name="password" id = "password"/></p>
<p><input type = "button" value="sign up" id="submit" onclick = "hello()"/>
<input type="button" value="Back" onclick="return back()"/></p>
</form>
<div id="ack"><p>1</p></div>
</div>
</body>

这是我从 W3school ajax 示例中获得的 ajax 代码,并将其保存为 ajax.js

function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  return xmlhttp;
}
  var HTTP = loadXMLDoc();
function hello(){
  var username = encodeURIComponent(document.getElementById('username').value);
  var password = encodeURIComponent(document.getElementById('password').value);
  var url = "signip_parse.php?username="+username+"&password="+password;
HTTP.onreadystatechange=function()
  {
  if (HTTP.readyState==4 && HTTP.status==200)
    {
    document.getElementById("ack").innerHTML=HTTP.responseText;
    }
  }
HTTP.open("POST", url ,true);
HTTP.send();
}

最后,这是我设法拼写错误的注册signip_parse.php

<?php
include_once("connect.php");
$user = mysql_real_escape_string( $_POST["username"]);
$password = mysql_real_escape_string( md5 ($_POST["password"]));
$sql = "INSERT INTO users (username, password) VALUES ('$user','$password')";
if(mysql_query($sql)){
    echo "You have been successfully registered";
}
else{
    echo "Something went wrong try again";
}
?>

任何帮助都会很棒。 谢谢大家是的,我知道MD5坏了,但这只是一个演示,打算使用其他东西。

由于您以 post 形式发送请求,因此在 XMLHttpRequest 对象上添加以下内容很重要:

xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

只需将它们组合在里面,无需分离某些部分。它看起来像这样:

<script type="text/javascript">
function hello() {
    var xmlhttp = new XMLHttpRequest();
    var username = encodeURIComponent(document.getElementById('username').value);
    var password = encodeURIComponent(document.getElementById('password').value);

    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("ack").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("POST", 'signip_parse.php', true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("username="+username+"&password="+password);
}
</script>

这是它的样子

必填说明:

请不要在新代码中使用mysql_*函数。它们不再维护并被正式弃用。看到红框了吗?请改为了解预准备语句,并使用 PDO 或 MySQLi - 本文将帮助您决定哪个语句。如果您选择PDO,这是一个很好的教程。

参考: https://stackoverflow.com/a/12860140/3859027

您还应该考虑(如果您使用的是 PHP 5.5 或更高版本(使用 PHP 的本机密码哈希并替换该md5()。如果您低于 v5.5,那么您可以使用其compatibility pack