簡體   English   中英

如何編輯動態創建的表單文本框值並將其插入MySQL DB?

[英]How to edit and insert dynamicaly created form textboxes values to MySQL DB?

我的PHP項目中的MySQL DB中有一堆功能表。 我正在通過php抓取並創建一個帶有文本框的表,該文本框通過使用代碼的照片中的列名和記錄ID命名:

functions.php代碼:

function m_html_editPhotos($id) {
$result = "<table class=\"tabelka\" id=\"tbl_photos\"><thead><tr><th>Miniaturka</th><th>Duże zdjęcie</th></tr></thead><tbody>";
$mysqli = m_db_Init();
$qry = "SELECT ID, Img_Min, Img_Nrm FROM tbl_Zdjecie WHERE ID_Grzyb = ?";
if($stmt = $mysqli -> prepare($qry)) {
          $stmt -> bind_param("i", $id);
          mysqli_stmt_bind_result($stmt, $img_id, $img_min, $img_nrm);
          $stmt->execute();
          $i =0;
          while (mysqli_stmt_fetch($stmt)) {
              $i = $i+1;
              $result .= "<tr><td><!--<label>Link do miniaturki:<label>--><input type=\"text\" class=\"required\" name=\"photo[$i][min]\" value=$img_min></td><td><!--<label>Link do zdjęcia pełnego rozmiaru:</label>--><input type=\"text\" class=\"required\" name=\"photo[$i][nrm]\" value=$img_nrm></td><td style=\"display:none;\"><input type=\"text\" name=\"photo[$i][id]\" value=$img_id /></td></tr>";
          }
          $stmt -> close();      
}
mysqli_close($mysqli);
$result .= "</tbody></table><div class=\"link\" onclick=\"AddPhotoEditRow();\">Dodaj kolejne zdjęcie</div>";
return $result;
}

現在,我要編輯的照片表格遍歷上面生成的每一行,並帶有thumbnail_url( img_min )和完整尺寸鏈接( img_nrm )的文本框通過功能AddPhotoEditRow();

functions.js代碼:

function AddPhotoEditRow(){
 $('#tbl_photos > tbody:last').append('<tr><td><input type="text" name="photo[0][min]"></td><td><input type="text" name="photo[0][nrm]"></td><td style=\"display:none;\"><input type=\"text\" name=\"photo[0][id]\" value=\"0\" /></td></tr>');
}

edit.php代碼:

include 'functions.php';
if(isset($_POST["change"])) m_db_updateAllFeatures($_GET["id"]);
if (m_db_isAdmin("")){
if (!isset($_GET["id"]) || !is_numeric($_GET["id"]))
    header("Location: ../index.php");
else {
if (isset($_POST["Nazwa_PL"]))
    m_db_UpdateName("PL", $_GET["id"],$_POST["Nazwa_PL"]);
if (isset($_POST["Nazwa_Lac"]))
    m_db_UpdateName("Lac", $_GET["id"],$_POST["Nazwa_Lac"]);
render_edit_body();
    }
}

我想通過照片鏈接以某種方式進行迭代,並通過解析通過$ _POST傳遞的文本框名稱來更新現有記錄,此外,最好插入新的照片鏈接(id = 0)。 我將新行的ID設置為0,因為我需要區分是插入表還是更新,對嗎? 我假設應該添加所有0索引字段,其余的應該插入。 我的想法可能是錯誤的,如果有更好的方法可以對表格“控件”執行全部功能,那么我很樂意提出建議。

您已經掌握了基本知識,除了

$('#tbl_photo snip snip name="photo[0][min]"> snip snip snip
                                    ^---

0不應該被硬編碼。 您要告訴php在$ _POST數組中創建一個由'photo'值組成的數組,但是隨后您將所有條目的索引鍵都強制為0,從而導致后面的條目覆蓋以前的條目。

在Javascript中對已插入的這些字段中的多少進行計數,並使用該計數來遞增索引鍵,例如

$('#tbl_photo snip snip name="photo[' + i + '][min]"> snip snip snip

相反, i是字段數。 然后,這很簡單:

foreach($_POST['photo'] as $i => $photo) {
    echo $photo['min'];
}

以獲得每個光場的最小值。

如果對所有新創建的HTML元素都使用0 ,則PHP $_POST將僅包含最后一項的信息。

這是使用相同的方法,你帶着幾分修改我的解決方案,假設我們有一個form包裝外面退出循環和數組名為$data包含了播種的信息:

PHP代碼創建表

// the $data array contains a list of picture object, these object will be updated later.
foreach($data as $num => $row)
{
    echo "<tr>\n";
    echo sprintf("<td><input type='text' name='name[%d]' value='%s' /></td>\n", $num, $row['name']);
    echo "</tr>\n";
}
echo "<tr><td>\n";
echo "<a id='add-item'>Add new item</a>\n";
echo "<input type="hidden" name='num-created' value='0' />";
echo "</td></tr>\n"

JavaScript代碼以添加新元素(使用jQuery)

$(document).ready(function(){
    $('#add-item').click(function(){
        var currentCreatedNum = $("input[name=num-created]").val() * 1;
        var html = "<tr>";
        html += "<td><input type='text' name='newname["+ (currentCreatedNum + 1) +"]' value='' /></td>";
        html += "</tr>";            
        $("input[name=num-created]").val(currentCreatedNum + 1);
    });
});

PHP代碼來處理POST請求

# check contrains ...

# update old records
foreach($_POST['name'] as $id => $name)
{
    // get information of existing item and update this record

}

# create new record
foreach($_POST['newname'] as $order => $name)
{
    // get information of new item and create a new record

}

如您所見,手動創建的元素的name屬性必須與現有元素不同。

據我了解,您想訪問每個動態創建的表項嗎? 您可以通過簡單地創建一個動態數組來做到這一點。 生成每個新的TD元素(或任何其他元素)時,請使用name=Something[]類的name=Something[] (帶有空心括號)。 這將自動將生成的每個項目分配為稱為“ Something”的數組的成員。 當然,您也可以通過計數器生成鍵值。

這是我所做的項目的簡化示例,其中的“更新”按鈕(此處未顯示)發回到同一頁面:

echo "<td class='grid'>
<input type='checkbox' name='chkDel[]' />
</td>";

然后,PHP將如下所示:

if (isset($_POST['chkDel'])) {

    // Make a MySQL Connection
    $con = mysql_connect(host,user,pwd) or die(mysql_error());
    mysql_select_db("db_name"); 

    $rows = 0;

    foreach($_POST['chkDel'] as $chkdel)  {

        //query to delete post
        $delQuery = "DELETE FROM table WHERE ".$chkdel;

        //run the query 
        mysql_query($delQuery) or die(mysql_error());

        //Get rows affected
        $i = mysql_affected_rows();
        $rows = $rows + $i;
    }

    mysql_close($con);
}

那是您要找的東西嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM