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

时间:2014-12-10 00:25:32

标签: javascript php jquery mysql ajax

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

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

我认为这是代码不能正常工作,但我只是不知道其他方式

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

以下是我的其余代码。这是用户放置信息的页面,其保存为signup.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坏了,但这只是一个演示,并打算使用别的东西。

1 个答案:

答案 0 :(得分:0)

由于您以邮寄方式发送请求,因此将其添加到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>

Here's what it would look like

强制性注释:

  

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

     

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

您还应该考虑(如果您使用的是PHP 5.5或更高版本)使用PHP的原生password hashing并替换md5()。如果您的价格低于v5.5,那么您可以使用其compatibility pack