2016-08-25 6 views
0

Ajax를 사용하여 ID로 데이터베이스의 행을 업데이트해야합니다.양식에서 Ajax를 통해 데이터를 보내십시오.

내 양식 :

<form id="update_ajax"> 
    <input type="text" name="name" class="test_hide"> 
    <input type="hidden" name="id" value="<?php echo $row['id']; ?>"> 
    <input type="submit" value="<?php echo $row['id']; ?>" class="pure-button"> 
</form> 

내 아약스 기능 :

$("#update_ajax").on("submit", function() { 
     var id = $(this).attr('id'); 
     var name = $(this).attr('name'); 
     var dataall={'id' : id, 'name' : name}; 
     $.ajax({ 
      type: "post", 
      url: "update.php", 
      data: dataall, 
      success: function (data) { 
       alert(data); 
      } 
     }); 
    }); 

그리고 내 PHP 파일은 다음과 같습니다

if ((isset($_GET['id'])) && (isset($_GET['name']))) { 
    $id = $_GET['id']; 
    $name = $_GET['name']; 
}else{ 
    die("Not set"); 
} 
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "8169x5it"); 
$query = $pdo->prepare("UPDATE test SET name=:name WHERE id=:id"); 
$query->bindParam(':name', $name); 
$query->bindParam(':id', $id); 
$query->execute(); 

그리고 내 name 값이 $_GET['name']에 설정되어 있지 않다는 오류가 있습니다. 왜 그것이 설정되지 않았는지 이해할 수 없습니다. 내가 데이터로 보내니까. 당신은 무엇

+2

var id = $ (this) .attr ('id');'올바르지 않습니다. [docs] (http://api.jquery.com/val/) – NDM

+1

'$ (this) .attr ('name')'형식은'name' 속성이 없기 때문에 정의되지 않습니다. '$ ("input [name = name]") .val()'을 원한다. – Barmar

답변

2

이것은 잘못된 것입니다 :

var id = $(this).attr('id'); 
var name = $(this).attr('name'); 

$(this) 양식, 그래서 $(this).attr('id')"update_ajax", 숨겨진 입력하지 값입니다. 양식에 name=something 특성이 없으므로 $(this).attr('name')은 정의되지 않습니다.

var id = $(this).find("input[name=id]").val(); 
var name = $(this).find("input[name=name]").val(); 

그러나 당신은 그것을 모두를 단순화 할 수 있습니다 : 당신이 진정으로 원하는 것은 형태로 모든 입력을 찾을 수

var dataall = $(this).serialize(); 

serialize() 및 모든 값을 포함하는 URL 인코딩 된 문자열을 반환합니다.

마지막으로 type: 'GET'을 사용하도록 jQuery를 변경하거나 $_GET 대신 $_POST을 사용하도록 PHP를 변경해야합니다.

+1

고마워요! 지금은 이해. – Denys

+0

왜 업데이트를 누를 때 페이지를 다시로드하지 않고 한 번만 업데이트하고 다시로드하지 않고 다시 작동하지 않습니까?데이터를 업데이트하려면 F5 키를 눌러야합니다. – Denys

+0

가끔은 효과가 있고 때로는 그렇지 않습니다. 그것은 무엇 일 수 있 었는가? – Denys

0

, 당신은

http://api.jquery.com/val/을 원하는 무엇 http://api.jquery.com/attr/

은 샷 것으로,이 소스의 다른 오류처럼 보이지 않는 작동합니다주십시오. 우리에게 알려주지 않으면.

는 편집 :

$(this).attr('id'); 
$(this).attr('name'); 

$("input[name=id]").val(); 
$("input[name=name]").val(); 

또는

$(this).serialize(); 

나중을 위해 https://api.jquery.com/serialize/를 참조하십시오 또한

당신은 변경

+2

그는 또한 셀렉터를 변경해야합니다. – Barmar

관련 문제