Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 更新记录的流程表_Php_Mysql_Sql_Html_Forms - Fatal编程技术网

Php 更新记录的流程表

Php 更新记录的流程表,php,mysql,sql,html,forms,Php,Mysql,Sql,Html,Forms,我构建了一个表单,它是一个字段表,表示mysql数据库中的多条记录。该表是基于一些关系表动态生成的: 我想创建一个保存按钮,如果在一次单击中对给定记录的任何字段进行了更改,该按钮将更新表 我的问题是,如何在不创建围绕每个表行的单独表单标记的情况下做到这一点?最好的方法是什么?是否可以只使用html和php,还是需要javascript 我希望避免插入带有编辑按钮的附加列 以下是生成表的代码I: function subjectResourcesForm($connection, $subjec

我构建了一个表单,它是一个字段表,表示mysql数据库中的多条记录。该表是基于一些关系表动态生成的:

我想创建一个保存按钮,如果在一次单击中对给定记录的任何字段进行了更改,该按钮将更新表

我的问题是,如何在不创建围绕每个表行的单独表单标记的情况下做到这一点?最好的方法是什么?是否可以只使用html和php,还是需要javascript

我希望避免插入带有编辑按钮的附加列

以下是生成表的代码I:

function subjectResourcesForm($connection, $subjectId) {
    echo "<h2>ONLINE RESOURCES</h2>";
    echo "<div id='subject_resources_" . $section_row[$ID] . "'>\n";
    $resource_query = selectResourcesBySubject($subjectId);
    $resource_result = mysqli_query($connection, $resource_query);
    if ( mysqli_num_rows($resource_result) != 0 ) {
    echo "<table>";
    echo "<tr>";
    echo "<td>Position</td>";
    echo "<td>Label</td>";
    echo "<td>Link</td>";
    echo "<td>Visibility</td>";
    echo "</tr>";
        while($resource_row = mysqli_fetch_assoc($resource_result)) {
        echo "<tr>";
            echo "<td><input type=\"text\" " . 
                            "name=\"resourceItemPosition_" . $resource_row['id'] . 
                            "\" value=\"" . $resource_row['position'] . "\" />";
            echo "</td>";
            echo "<td><input type=\"text\" " . 
                            "name=\"resourceItemTitle_" . $resource_row['id'] . 
                            "\" value=\"" . $resource_row['resourceTitle'] . "\" />";
            echo "<td><input type=\"text\" " . 
                            "name=\"resourceItemLink_" . $resource_row['id'] . 
                            "\" value=\"" . $resource_row['link'] . "\" />";

            echo "<td><select name=\"resourceItemDisplay_" . $resource_row['id'] . "\">";
            if ( $resource_row['display'] == $TRUE ) {
                echo "<option value=\"1\" selected>Visible</option>";
                echo "<option value=\"0\">Hidden</option>";
            } else {
                echo "<option value=\"1\">Visible</option>";
                echo "<option value=\"0\" selected>Hidden</option>";
            }
            echo "</select></td>";
        echo "</tr>";
        }
        echo "</ul>";
    } else {
        echo "No Resources Found!";
    }
    // Save Button
    echo "<tr>" . 
            "<td colspan=\"2\">" . 
                "<button type=\"button\">Save Changes</button>" .
            "</td>" . 
    "</tr>";
    // Insert Button
    echo "<tr>" . 
            "<td colspan=\"2\">" . 
                "<button type=\"button\">Add Item</button>" .
            "</td>" . 
    "</tr>";

    echo "</table>";
    echo "</div><!-- End of subject_resources_" . $section_row[$ID] . "-->\n";

    // Free Result
    mysqli_free_result($resource_result);
}

我不知道在不使用JavaScript的情况下如何做到这一点,但这里有一个用JavaScript实现这一点的方法

首先,在每行中添加一个隐藏字段,用于跟踪行是否已更新:

echo '<input type="hidden" name="resourceItemUpdated_' . $resource_row['id'] . '" value="0" />';
echo';
然后,使用
onchange
事件,在修改行上的任何其他字段时,将隐藏字段的值设置为1

最后,在PHP中,循环遍历行,仅当隐藏字段的值为1时才更新数据库

此解决方案通过将所有数据发送到服务器浪费了一点带宽,但它完成了任务

echo '<input type="hidden" name="resourceItemUpdated_' . $resource_row['id'] . '" value="0" />';