同一页面上有多个相似的表单

时间:2011-07-07 03:32:43

标签: php mysql forms

我正在使用PHP从MySQL数据库中检索有关“资源”的信息。有关每种资源的信息以HTML格式输出,格式如下:

Title
Description
Etc.

每个资源都有一个“编辑”链接,可以运行JavaScript onclick。此JS插入包含所选资源信息的表单,以便在数据库中进行编辑和更新。如果禁用了JavaScript,则会将用户带到一个单独的页面,该页面只包含用于编辑该特定资源的表单。所以,我的问题是:如何在同一页面上管理任意数量的表单,这些表单都具有相同的功能,仅适用于MySQL数据库的不同行(不同的“资源”)?特别是,如何在Javascript插入的表单中识别要编辑的特定资源?

现在我正在使用隐藏的输入来携带资源ID(erid),但PHP脚本实际上处理表单操作的样子是什么?出现这个问题是因为输入类型=“提交”的每个名称当前都带有例如erid,例如, name =“update1”,name =“update2”等。

从数据库中检索资源:

require('inc/db_connect_info.config');

$mysqli = new mysqli($host, $mysqlilogin, $mysqlipassword, $databaseName);

if ( mysqli_connect_error() ) {
    die("Can't connect to database: " . mysqli_connect_error() );
}

else{
    $testQuery = "SELECT * FROM eresources NATURAL JOIN subjects";
    $testResult = $mysqli->query($testQuery);

    if($testResult && $testResult->num_rows >= 1) {


        while($testArray = $testResult->fetch_assoc() ) {

        $testArray['stitle'] = htmlentities($testArray['stitle']);


    // START er div

        print("<div id=\"er".$testArray['erid']."\" class=\"grey\">");          print("\n\n\t");

    // erid, link, title, descr
    print("<p>".$testArray['erid'].": <a id=\"link".$testArray['erid']."\" href=\"".$testArray['link']."\">".$testArray['ertitle']."</a> - <span id=\"descr".$testArray['erid']."\">".$testArray['descr']."</span></p>");
        print("\n\t");


    // edit "link"
    print("<a href=\"edit.php?erid=".$testArray['erid']."\" onclick=\"return showEdit(".$testArray['erid'].")\">Edit</a>");
    print("&nbsp;&nbsp;&nbsp;&nbsp;");


    // END er div
    print("</div>");
    print("\n\n");
        }
}

    // If there was a problem retrieving resources, print an error message //
    else{
        print("<p>No e-resources found!</p>");
    }

    $mysqli->close();
}

如果单击“编辑”链接,则在页面上插入更新表单的JavaScript函数 (假设启用了JavaScript):

function showEdit(erid) {

//get page url for form submission
var url = document.location.href;

//current title
var erTitle = document.getElementById("link" + erid).innerHTML;

//current link
var erLink = document.getElementById("link" + erid).getAttribute("href");

//current description
var erDescr = document.getElementById("descr" + erid).innerHTML;

//current subject under which electronic resource is filed
var erSubject = document.getElementById("subject" + erid).innerHTML;

//clear the er div
document.getElementById("er" + erid).innerHTML = "";

//then fill it with a form for new values, to be submitted to the same page
//the form is prepopulated with the current values from the database

    document.getElementById("er" + erid).innerHTML = 
"<form action=\"" + url + "\" method=\"post\">" + 
"Title<br /><input type=\"text\" name=\"updated_er_title"+erid+"\" value=\"" + erTitle + "\"  size=\"100\" /><br /><br />" + 
"Link<br /><input type=\"text\" name=\"updated_er_link"+erid+"\" value=\"" + erLink + "\" size=\"100\" /><br /><br />" + 
"Description<br /><textarea name=\"updated_er_descr"+erid+"\" cols=\"75\" rows=\"10\">" + erDescr + "</textarea><br /><br />" + 
"Free Status<br />" + erFree + "<br /><br />" + 
"Subject<br /><input type=\"text\" name=\"updated_er_subject"+erid+"\" value=\"" + erSubject + "\" size=\"100\" /><br /><br />" + 
"<input type=\"hidden\" name=\"erid\" value=\""+erid+"\" />" +
"<input type=\"submit\" name=\"update" + erid + "\" value=\"Update\" />" +
"</form>";

// return false so the link is not followed if javascript is enabled
// if javascript is disabled, link provides same form on separate page
return false;
}

1 个答案:

答案 0 :(得分:1)

您真的需要为每个资源分别创建一个表单吗?为什么不在div中设置一个表单。当用户单击“编辑”时,onclick处理程序将使用所选资源的数据填充表单中的字段,将div放置在所选资源所需的位置,并将其css显示设置为“block” ”。表单可以包含隐藏的输入,该输入将设置为资源ID。提交表单时,服务器端PHP将具有资源ID以进行数据库更新。如果使用AJAX提交表单,则onsubmit处理程序可以从输入字段中获取数据并修改所选资源的不可编辑显示,然后将表格div的css显示设置为“none”。