我的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
- 索引字段,其余部分应该插入。我的构思可能有误,如果有更好的方法可以对该表“控制”执行全部功能,那么我对这些建议非常开放。
答案 0 :(得分:1)
除了
,你已经掌握了基础知识$('#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'];
}
获取每个照片字段的最小值。
答案 1 :(得分:1)
如果对所有新创建的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);
});
});
操纵POST请求的PHP代码
# 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
属性必须与现有元素不同。
答案 2 :(得分:0)
如果我理解,您是否想要访问每个动态创建的表项?您只需创建一个动态数组即可完成此操作。在生成每个新的TD元素(或任何元素)时,将名称设为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);
}
这就是你要找的东西吗?