2009-07-08 3 views
0

내 PHP 스크립트는 행을 포함하는 테이블을 생성 할 수 있으며, 행을 선택적으로 편집하거나 삭제할 수 있습니다. 새로운 행을 만들 수도 있습니다.PHP와 HTML로 jQuery에서 행을 업데이트하는 방법

PHP를 통해 생성되고 jQuery를 통해 삽입 된 HTML 행을 업데이트하는 방법을 파악하기가 힘듭니다. 업데이트 후에는 여전히 편집 가능해야합니다. HTML은 div에 생성됩니다.

  1. jQuery를

  2. PHP (생성 HTML)

  3. 돌아가서 단계 1)

(EDIT (삽입 HTML/동작 대기를 생성) : 오류 및 수정 된 스크립트 수정)

,

PHP

require_once "../../includes/constants.php"; 

// Connect to the database as necessary 
$dbh = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die("Unaable to connnect to MySQL"); 

$selected = mysql_select_db(DB_NAME, $dbh) or die("Could not select printerweb"); 

$action = $_POST['action']; 
$name = $_POST['name']; 
$id = $_POST['id']; 

if ($action == "new") { 
    mysql_query("INSERT INTO place (id, name) VALUES (NULL, $name)"); 
} 
elseif ($action == "edit") { 
    mysql_query("UPDATE place SET name = $name WHERE id = $id"); 
} 
elseif ($action == "delete") { 
    mysql_query("DELETE FROM place WHERE id = $id"); 
} 

echo "<table><tbody>"; 
$result = mysql_query("SELECT * FROM place"); 
while ($row = mysql_fetch_array($result)) { 
    echo "<tr><td id=" . $row["id"] . " class=inputfield_td><input class=inputfield_place type=text value=" . $row["name"] . " /></td><td class=place_name>" . $row["name"] . "</td><td class=edit>edit</td><td class=cancel>cancel</td><td class=delete>delete</td><td class=save>SAVE</td></tr> \n"; 
} 
echo "</tbody>"; 
echo "</table>"; 
echo "<input type=text class=inputfield_visible />"; 
echo "<button class=new>Neu</button>"; 

JS

$(function() { 
    $.ajax({ 
     url: "place/place_list.php", 
     cache: false, 
     success: function(html) { 
      $("#place_container").append(html); 
     } 
    }); 
    $(".edit").live("click", function() { 
     $(this).css("display", "none").prevAll(".place_name").css("display", "none").prevAll(".inputfield_td").css("display", "block").nextAll(".cancel").css("display", "block").nextAll(".save").css("display", "block").prevAll(".inputfield_td").css("display", "block"); 
    }); 
    $(".cancel").live("click", function() { 
     $(this).css("display", "none").prevAll(".edit").css("display", "block").prevAll(".place_name").css("display", "block").prevAll(".inputfield_td").css("display", "none").nextAll(".save").css("display", "none"); 
    }); 
    $(".save").live("click", function() { 
     var myvariable1 = $(this).siblings().find("input[type=text]").val(); 
     var myvariable2 = $(this).prevAll("td:last").attr("id"); 
     $(this).css("display", "none").prevAll(".cancel").css("display", "none").prevAll(".edit").css("display", "block").prevAll(".place_name").css("display", "block").prevAll(".inputfield_td").css("display", "none"); 
     alert("save name: " + myvariable1 + " save id: " + myvariable2); 
    }); 
    $(".delete").live("click", function() { 
     var myvariable3 = $(this).prevAll("td:last").attr("id"); 
     alert(myvariable3); 
    }); 
    $(".new").live("click", function() { 
     var myvariable4 = $(this).prevAll("input[type=text]").val(); 
     $.post("place/place_list.php", { 
      action: "new", 
      name: "" + myvariable4 + "" 
     }); 
    }); 
}); 
+0

PHP 버그가 무엇인지 묻는다면 어떨까요? PHP로는별로 좋지 않기 때문에 궁금합니다.(: – peirix

답변

2

장소의 모든 이벤트 핸들러 아약스 함수 외부 대신 live() 방법을 사용합니다. 그리고 ajax를 사용할 때 보낼 데이터를 포함해야합니다. visualjquery에서 :

$(function() { 
    $.ajax({ 
     type: "POST", 
     url: "some.php", 
     data: "name=John&location=Boston", 
     success: function(msg){ 
      alert("Data Saved: " + msg); 
     } 
    }); 

    $(".edit").live("click", function() { 
     //event handler code here 
    }); 
    //more event handlers 
}); 
+0

JS가 클릭 이벤트에 반응하지만 PHP가 새로운 행을 만들 때 데이터베이스에 항목을 만들지 않습니다. 내가 뭘 잘못하고 있는지 알고 계십니까? – elhombre

+0

문제가 해결되었습니다. MySQL이 복사되었습니다. 어떤 작업을했는지 PHP 스크립트가 성공적으로 데이터베이스에 항목을 입력합니다. – elhombre

2

난 당신이 사업부에 추가됩니다 PHP에서 새 행 후 등 편집에 대한 클릭 이벤트를 받고 삭제되지 않습니다 생각합니다.

jquery 라이브 플러그인을 사용하여 새로운 내용이 생성 될 때와 클릭 이벤트를 바인딩 해보십시오. 비슷한 문제를 다루는 this 질문을 참조하십시오.

1

peirixTheVillageIdiot과 같이 라이브 플러그인이 유용 할 수 있습니다. 그러나 코드에서 잘못되었을 수있는 몇 가지 사항이 있습니다.

먼저 HTML이 유효하지 않습니다. 특성 값을 따옴표로 묶어야합니다. 당신은 백 슬래시로 내부 따옴표를 이스케이프 따옴표 내에서이 작업을 수행 할 수 있습니다 :

echo "<input type=\"text\" class=\"inputfield_visible\" />"; 

이 그 좋은하지 보이는 때문에, 당신은 PHP 부분을 떠나이 변경하면 순수한 HTML을 작성할 수

<?php 
    ... 
    echo "</tbody>"; 
    echo "</table>"; 
    echo "<input type=text class=inputfield_visible />"; 
    echo "<button class=new>Neu</button>"; 
?> 

을 그 (기준 훨씬 더 읽을 수 IMHO)에 : 당신이 한 느낌을 전달하기 때문에 당신이하는 SQL 삽입 취약점을 가지고있는 것처럼

<?php 
    ... 
?> 

</tbody> 
</table> 
<input type="text" class="inputfield_visible" /> 
<button class="new">Neu</button> 
둘째

, 그리고 더욱 중요한 것 같다, 그것은 나에게 보인다 d 값을 먼저 mysql_real_escape_string을 사용하지 않고 직접 mysql에 보낸다. 나는 PHP가 아니기 때문에 잘못 입력 한 것일 수도 있습니다. 그러나 입력 필드에 ';--을 입력하면 어떻게됩니까?

+0

내 HTML을 유효하게하는 데 도움을 주셔서 감사합니다. SQLinjection 취약점 (나에게있어; D)에서, 나는 먼저 내 웹 사이트를 구축하려고합니다. , 나는 나중에 이러한 오류를 수정하려고합니다 :) – elhombre

+0

PHP 파일로 보는 것은 AJAX 호출에 대한 것입니다. HTML이 호출자에게 다시 전달되는 정보이므로 "에코"해야한다고 생각합니까? – peirix

+0

Tim, 두 번째 예는 유효한 HTML이 아닙니다. 속성 주위에 따옴표가 없기 때문입니다. 다음과 같아야합니다 : echo ""; 또는 echo ''; – Zoe