0
id  car         make          sales
1  panamera    porsche       100 
2  italia      ferrari       200
3  volante     astonmartin   300
4  avantador   lamborghini   400
5  slk         mercedes      500

だからみんな、私は私のデータベースにこの単純なテーブルを持っています。そして、このテーブルをwhileループでエコーします。

<ul>
<?php  
$query = "SELECT * FROM inplace LIMIT 0, 6";    
$result = mysql_query($query) or die ('Query couldn\'t be executed');  
while ($row = mysql_fetch_assoc($result)) {
echo '<li class="editable" data-id="'.$row['id'].'" data-col="car"><a href="#">'.$row['car'].'</a></li>';
echo '<li class="editable" data-id="'.$row['id'].'" data-col="make"><a href="#">'.$row['make'].'</a></li>'; 
echo '<li class="editable" data-id="'.$row['id'].'" data-col="sales"><a href="#">'.$row['sales'].'</a></li>'; 
}
?>
</ul>

アイデアは、jQueryインプレースエディターを使用してこのテーブルを更新することです。だからここにコードがあります-

$(document).ready(function() 
{
$(".editable").bind("dblclick", replaceHTML);
$(".editable2").bind("dblclick", replaceHTML2);
$(".btnSave, .btnDiscard").live("click", handler);

function handler()
{
    if ($(this).hasClass("btnSave"))
        {
            var str = $(this).siblings("form").serialize();
            $.ajax({
                    type: "POST",
                    async: false,
                    url: "handler.php",
                    data: str,
            }); 

        }

} 

function replaceHTML()

            {

    var rowId   = $(this).parent('li').data('id');
    var colName = $(this).parent('li').data('col');
    var buff = $(this).html()
    .replace(/"/g, "&quot;");
    $(this).addClass("noPad")
    .html("<form><input type=\"text\" name=\"" + colName + "\" value=\"" + buff + "\" /> <input type=\"text\" name=\"buffer\" value=\"" + buff + "\" /><input type=\"text\" name=\"id\" value=\"" + rowId + "\" /></form><a href=\"#\" class=\"btnSave\">Save changes</a> <a href=\"#\" class=\"btnDiscard\">Discard changes</a>")
                .unbind('dblclick', replaceHTML);   


    }

}
); 

これは、インターネットから入手したインプレース編集コードであり、コードを理解するためだけに基本レベルまで分解しました。Behrang Saeedzadehは、「HTMLの置換」機能の即興を手伝ってくれました。

そして、これがhandler.phpファイルの更新クエリです-

<?php
require("db.php");

if (isset($_POST['id']) && isset($_POST['car'])) {
$id = mysql_real_escape_string($_POST['id']);
$car = mysql_real_escape_string($_POST['car']);

$query = "UPDATE inplace SET car ='$car' WHERE id='$id'";   
$result = mysql_query($query) or die ('Query couldn\'t be executed');
if ($result) {echo 1;}
} 

else if (isset($_POST['id']) && isset($_POST['make'])) {
$id = mysql_real_escape_string($_POST['id']);
$make = mysql_real_escape_string($_POST['make']);

$query = "UPDATE inplace SET make ='$make' WHERE id='$id'";   
$result = mysql_query($query) or die ('Query couldn\'t be executed');
if ($result) {echo 1;}
} 

else if (isset($_POST['id']) && isset($_POST['sales'])) {
$id = mysql_real_escape_string($_POST['id']);
$sales = mysql_real_escape_string($_POST['sales']);

$query = "UPDATE inplace SET sales ='$sales' WHERE id='$id'";   
$result = mysql_query($query) or die ('Query couldn\'t be executed');
if ($result) {echo 1;}
 } 

?> 

ここで更新クエリでは、列ごとに異なるクエリを作成する必要があります。問題は、すべての列に対して1つのクエリのみを使用して更新するにはどうすればよいですか?

4

2 に答える 2

1
if(isset($_POST['id']) {
   $id =  mysql_real_escape_string($_POST['id']);
   $arr_check = array("car", "make", "sales");
   $result = array();
   foreach($arr_check as $check) {
      if(isset($_POST[$check]))
         $result[] = $check . '="' . mysql_real_escape_string($_POST[$check]) . '"';
   }

   $result = implode(", ", result);

   if($result != '') {


      $query = "UPDATE inplace SET {$result} WHERE id='{$id}'";   
      $result = mysql_query($query) or die ('Query couldn\'t be executed');
      if ($result) echo 1; 

   }

}

それは多かれ少なかれそれをする必要があります

于 2012-03-07T03:00:56.643 に答える
0

まず、リスト全体を最初にフォームにして、既存のレコードを非表示のフォームフィールドに保存する方がよい場合があります。次に、handler.phpスクリプトで、新しいフォームエントリが送信されたかどうかを確認し、それらを変数に格納する必要があります。新しいエントリが作成されなかった場合、変数にはデフォルト値が含まれます。

次に、更新クエリ全体を1回で送信できます。

$query = "UPDATE inplace SET car ='$car', make='$make', sales='$sales' WHERE id='$id'";
$result = mysql_query($query) or die ('Query couldn\'t be executed');
if ($result) echo 1;
于 2012-03-07T03:01:41.557 に答える