我得到了这个注册码很好但我决定添加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坏了,但这只是一个演示,并打算使用别的东西。
答案 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,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
您还应该考虑(如果您使用的是PHP 5.5或更高版本)使用PHP的原生password hashing并替换md5()
。如果您的价格低于v5.5,那么您可以使用其compatibility pack