Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何编辑动态创建的表单文本框值并将其插入MySQL数据库?_Php_Javascript_Mysql_Submit - Fatal编程技术网

Php 如何编辑动态创建的表单文本框值并将其插入MySQL数据库?

Php 如何编辑动态创建的表单文本框值并将其插入MySQL数据库?,php,javascript,mysql,submit,Php,Javascript,Mysql,Submit,在我的PHP项目中,MySQL DB中有一系列特性表。我正在通过php获取数据,并使用以下代码创建一个带有文本框的表,这些文本框由照片表中的列名和记录id命名: functions.phpcode: function m_html_editPhotos($id) { $result = "<table class=\"tabelka\" id=\"tbl_photos\"><thead><tr><th>Miniaturka</th>&l

在我的PHP项目中,MySQL DB中有一系列特性表。我正在通过php获取数据,并使用以下代码创建一个带有文本框的表,这些文本框由照片表中的列名和记录id命名:

functions.php
code:

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;
}
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>');
}
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();
    }
}
edit.php
code:

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;
}
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>');
}
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();
    }
}

我希望以某种方式通过照片链接进行迭代,并通过解析通过$\u POST传递的文本框名称来更新现有记录,此外,插入新的照片链接(id=0)也很好。我将新行的id设置为0,因为我需要区分是插入到表中还是更新,对吗?我假设所有
0
索引字段都应该添加,其余字段应该插入。我的想法可能是错误的,如果有更好的方法来实现表“控件”的全部功能,那么我非常乐意接受建议。

你已经掌握了基本知识,除了

$('#tbl_photo snip snip name="photo[0][min]"> snip snip snip
                                    ^---
0
不应硬编码。您告诉php在$\u 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'];
}

获取每个照片字段的最小值。

如果我理解,您希望访问每个动态创建的表项?您只需创建一个动态数组就可以做到这一点。在生成每个新的TD元素(或任何元素)时,将名称设置为
name=Something[]
(带空括号)。这将自动分配作为名为“Something”的数组成员生成的每个项。当然,您也可以通过计数器生成键值

下面是我做过的一个项目中的一个简化示例,其中一个“更新”按钮(此处未显示)发回同一页面:

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

这就是您想要的吗?

如果您对所有新创建的HTML元素使用
0
,PHP
$\u POST
将只包含最后一个项的信息

这是我的解决方案,使用与您相同的方法,稍加修改,假设我们有一个
表单
wrap outout循环,一个名为
$data
的数组包含种子信息:

创建表的PHP代码

//$data数组包含图片对象的列表,这些对象将在以后更新。
foreach($num=>$row形式的数据)
{
回音“\n”;
echo sprintf(“\n”,$num,$row['name']);
回音“\n”;
}
回音“\n”;
回显“添加新项目\n”;
回声“;
回显“\n”
添加新元素的JavaScript代码(使用jQuery)

$(文档).ready(函数(){
$(“#添加项”)。单击(函数(){
var currentCreatedNum=$(“输入[name=num已创建]”).val()*1;
var html=“”;
html+=“”;
html+=“”;
$(“输入[name=num created]”)val(currentCreatedNum+1);
});
});
操作POST请求的PHP代码

#签合同。。。
#更新旧记录
foreach($\u POST['name']作为$id=>$name)
{
//获取现有项目的信息并更新此记录
}
#创造新记录
foreach($\u POST['newname']作为$order=>$name)
{
//获取新项目的信息并创建新记录
}

如您所见,手动创建的元素的
name
属性必须与现有元素不同。

我刚刚编辑了第一篇文章,解释了为什么存在
0
“我不知道如何区分数组项是否要编辑以及在您的建议中插入哪个?如果您需要删除或插入选项,只需做两个复选框而不是一个复选框,否则您必须创建唯一的ID或名称来区分哪个要做什么。