2014-12-10 4 views
1

잘 작동하는이 등록 코드가 있는데 AJAX를 추가하여 동적으로 만들 것을 결정했지만 실행하면 PHP 코드가 null 값을 데이터베이스에 저장하고 있습니다.AJAX 사용시 데이터베이스에 null 값 가져 오기

이것은 내가 지금까지 알고있는 것입니다 : 사용자가 가입 페이지에 정보를 쓸 때마다 AJAX로 가서 AJAX가 PHP로 전달한 다음 PHP가 정보를 데이터베이스에 저장하고 메시지를 표시 한 다음에갑니다. 아약스를 누른 다음 메시지를 표시합니다. 이 모든 일을 유일한 문제는 내 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; 

에게 잘 모릅니다. 이 페이지는 사용자가 정보를두고 그것의 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 아약스 예에서 그것을 가지고 아약스 코드 및

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(); 
} 
을은 ajax.js로 내가 그것을 저장했다입니다

이 마지막은 내가 어떤 도움이 좋을 것

<?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"; 
} 
?> 

잘못 가입 철자를 관리하는 signip_parse.php입니다. 덕분에 남자 그리고 예 md5 깨진 알아하지만 이것은 단지 데모이며 다른 것을 사용하려고합니다.

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

을 그리고 단지 내부의 부품을 분리 할 필요 그들을 결합 : 그 게시물로 요청을 보내는 때문에

+0

오류가 콘솔에서 발견 되었습니까? – Darren

+3

URL에 데이터를 보내고 있습니다.이 정보는'$ _GET'을 통해 얻을 수 있습니다. 따라서'$ _POST'에 아무것도 없습니다. – Sean

+0

omg @sean 당신은 스타 맨입니다! – WESTKINz

답변

0

, 그것의 중요한 당신의 XMLHttpRequest 객체에 추가합니다. 그것은 다음과 같이 보일 것입니다 :

<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의 password hashing 기본을 사용하고 대신에 md5()을 대체 할 (당신이 PHP 5.5 이상을 사용하는 경우) https://stackoverflow.com/a/12860140/3859027

또한 고려해야한다. v5.5 미만인 경우 해당 내용을 사용할 수 있습니다. compatibility pack

+0

조언 주셔서 감사합니다 그리고 난 내가 mysqli 또는 pdo 사용해야하지만 나는 이것을 위해 mysql을 사용해야한다는 것을 알고있다. ("username ="+ username + "& password ="+ password); mysql을 지원하는 xampp의 이전 버전을 실행 중이다. – WESTKINz

+1

@user3250974 mysqli 나 PDO를 사용하는 것뿐만 아니라 미리 준비된 명령문을 사용해야합니다. 어쨌든이 도움이 된 것을 기쁘게 생각합니다. – Ghost

관련 문제