2014-06-22 3 views
-1

POST 메시지를 통해 서버로 데이터를 보내는 간단한 양식이 있습니다. 그러나 제출 버튼을 클릭 할 때마다 "쿼리를 실행할 수 없습니다"오류가 표시됩니다.HTTP POST 요청 문제

sample.html

mysql_connect($host,$username,$password); 
mysql_select_db($database) or die("Unable to select database"); 


$query = 'INSERT INTO Reviews (Name, Email, Review) VALUES ('.$_POST['name'].','.$_POST['email'].','.$_POST['comments'].');'; 
$result = mysql_query($query) or die("Unable to execute query"); 

업데이트

<!DOCTYPE html> 
<html> 
<head> 
<script> 
     function pullMore(){ 
      var xmlhttp; 
      if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome,etc. 
       xmlhttp = new XMLHttpRequest(); 
      }else{ // code for IE6, IE5 
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      xmlhttp.onreadystatechange = function() { 
       if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
        document.getElementById("news_mesgs").innerHTML = xmlhttp.responseText; 
       } 
      } 

      var name = document.getElementById("name"); 
      var email = document.getElementById("email"); 
      var comments = document.getElementById("comment"); 
      var parameters="name"+name.value+"&email="+email.value+"&comments="+comments.value; 

      xmlhttp.open("POST", "reviews.php", true); 
      xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
      xmlhttp.send(parameters); 
     } 
</script> 
</head> 
<body style="background-color : #e9e9e9;"> 
<div> Hello there </div> 
<form> 
    Name: <input type="text" id="name" name="name"> 
    Comment: <input type="text" id="comment" name="comment"> 
    Email: <input type="text" id="email" name="email"> 
    <input type="button" value="Submit" onclick="pullMore()"> 
</form> 


<div id="news_mesgs"> come here </div> 
</body> 
</html> 

reviews.php : 어떤 이유로 $_POST["name"]가 비어 나타나고있다 여기 내 구현입니다. 어떤 샘플 데이터에 대해 print var_dump($_POST);을 시도했는데 이것이 무엇입니까? array (2) {[ "email"] => 문자열 (11) "[email protected]"[ "comments"] => string (5) "hello"} 쿼리를 실행할 수 없습니다.

+0

귀하의 질의는 어떤 이유로 실패했습니다. 그러나 실패한 이유는'name'의 값에 게시 된 내용에 달려 있습니다. 데이터베이스 로그를 확인하십시오. 이 사실을 알게 된 후에는 그 멍청한 보안 구멍을 청소하십시오. 누군가는'Robert '의 이름을 올릴 수 있습니다.) 테이블 리뷰를 떨어 뜨리십시오 -'그러면 당신은 슬퍼 질 것입니다. –

+0

$ _POST [ 'name']을 표시하려고했으나 비어있는 다음 일반 오류 메시지 (쿼리를 실행할 수 없음)를 반환합니다. – user3760741

+0

코드가 취약합니다. ** SQL INJECTION ** –

답변

1

할당 연산자가 없습니다. 이름을 제대로 보내지 않고 쿼리가 실패하는 이유입니다.

시도

var parameters="name="+name.value+"&email="+email.value+"&comments="+comments.value; 

또한 누락 따옴표를 사용하여. 쿼리에

$query = 'INSERT INTO Reviews (Name, Email, Review) VALUES ("'.$_POST['name'].'","'.$_POST['email'].'","'.$_POST['comments'].'");'; 

또는 조금 더 나은

$query = 'INSERT INTO Reviews (Name, Email, Review) VALUES ("'.mysql_escape_string($_POST['name']).'","'.mysql_escape_string($_POST['email']).'","'.mysql_escape_string($_POST['comments']).'");'; 

그리고 바로 삽입하지 마십시오 포스트 변수를 사용합니다. 그것은 SQL 인젝션에 대한 직접적인 방법입니다.

확인 How can I prevent SQL-injection in PHP?

+0

심지어 자바 스크립트를 변경 한 후에도 여전히 쿼리를 실행할 수 없습니다. – user3760741

+0

'die ("쿼리를 실행할 수 없습니다") 대신'die (mysql_error())'를 시도하고 결과를 게시하십시오. – mleko

+0

입력 할 때 응답입니다 이름 필드의 샘플 이름 : '필드 목록'의 '샘플 이름'알 수 없음 – user3760741