PHP ve HTML ile jQuery satırları güncelleştirmek için nasıl

3 Cevap php

Benim PHP komut dosyası optionaly düzenlenebilir veya silinebilir satırlık bir tablo oluşturur. Yeni bir satır oluşturmak için bir possibilety da vardır.

PHP ile oluşturulan ve jQuery ile eklenen HTML satırları güncelleştirmek için nasıl anlamaya zor bir zaman yaşıyorum. Güncellemeden sonra yine düzenlenebilir olmalıdır. HTML bir div içine oluşturulur.

  1. jQuery (insert oluşturulan HTML / eylem için bekleyin)

  2. PHP (html oluşturmak)

  3. ) 1 adıma geri dön

(EDIT: Corrected an error and changed script to answer)

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 + ""
        });
    });
});

3 Cevap

ajax fonksiyonu dışında tüm olay işleyicileri yerleştirin ve yerine live() yöntemini kullanın. Ve ajax kullanırken veri göndermek için ne dahil etmek gerekir. Dan 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
});

Ben div eklenir php yeni satırlar sonra vb silme, düzenleme için tıklama olayları almıyorsanız düşünüyorum.

Yeni şeyler oluşturulan olarak ve ne zaman tıklama olayları bağlamak için jquery canlı eklentisi kullanmayı deneyin. Benzer sorun ile ilgili this soruya bakın.

Gibi peirix ve TheVillageIdiot işaret, canlı eklenti belki yararlıdır. Ancak, kod yanlış var diğer bazı şeyler vardır:

İlk olarak, HTML geçerli değil. Sen atfedilmiştir değerler etrafında tırnak koymak zorunda. Sen bir ters eğik çizgi ile iç tırnak kaçan tırnak içinde bu yapabilirdi:

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

Bu o güzel görünüyor beri bu değiştirirseniz, PHP kısmını bırakın ve saf HTML yazabilirsiniz:

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

O (çok daha okunabilir tarafından IMHO) için:

<?php
    ...
?>

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

İkincisi, ve hatta daha önemli gibi görünüyor Eğer bir SQLInjection açığı var gibi mysql_real_escape_string İlk kullanmadan mysql doğrudan alan değerleri geçmek, çünkü, bana görünüyor. Ben PHP içine değilim, belki ben seni ';-- Girdi alanları içine girerseniz yanlış, ama ne olur bu var?