【问题标题】:How to submit multiple parameters in an HTML form on subsequent requests如何在后续请求中以 HTML 表单提交多个参数
【发布时间】:2010-12-26 04:14:20
【问题描述】:

我有一个使用标准 HTML 控件将参数提交到 PHP 文件的表单。然后 PHP 文件遍历 csv 文件并通过 AJAX 返回结果。如果我从表单中选择一个下拉菜单,我可以返回数据,但是当我进行另一个选择时,它不记得我之前选择的内容,所以只有新参数被提交。如何确保提交之前选择的控件?非常感谢任何想法或建议。

搜索.php:

<?php
error_reporting(E_ALL & ~E_NOTICE);
require_once('includes/MagicParser.php');
$key = $_GET['key'];
$search = $_GET['search'];
$counter = 0;
function recordHandler($record)
{
global $key;
global $search;
global $counter;

if ($record[$key] == $search) {
    if ($counter % 2) {
        print "<tr class=\"alt_row\">";
    } else {
        print "<tr>";
    }       
    print "<td>".$record['Subject']."</td>";
    print "<td>".$record['Tutor']."</td>";      
    print "<td>".$record['Level']."</td>";
    print "<td>".$record['Course Type']."</td>";
    print "<td>".$record['Course Code']."</td>";
    print "<td>".$record['Primary Center']."</td>";
    print "<td>".$record['Lesson 1 Date']."</td>";
    print "<td><a href=\"#\"></a></td>";
    print "<td><a href=\"#\"></a></td></td>";
    print "</tr>";
} else {
    return;
}
$counter ++;
}

print "
<table id=\"results\">
<tr>
       <th>Subject</th>
        <th>Tutor</th>
        <th>Level</th>
        <th>Type</th>
        <th>Code</th>
        <th>Center</th>
        <th>Date</th>
        <th>Timetable</th>
        <th>Outline</th>
</tr>
";

MagicParser_parse("includes/course-data.csv", "recordHandler");

print "
</table>
<div id=\"pager_display\"></div>
";
?>

scripts.js:

function showCourse(search, key)
{
if (search == "") {
    document.getElementById("dynamic_display").innerHTML = "";
    return;
}

if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
} else {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange = function()
{
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById("dynamic_display").innerHTML = xmlhttp.responseText;
        pager = new Pager('results', 15);
        pager.init(); 
        pager.showPageNav('pager', 'pager_display'); 
        pager.showPage(1);
    }
}

xmlhttp.open("GET", "search.php?key="+ key +"&search=" + search, true);
xmlhttp.send();
}

/*
function disableEnableForm(form, boolean)
{
var formElements = form.elements;

for (i = 0; i < form.length; i ++) {
    formElements[i].disabled = boolean;
}
}
*/

【问题讨论】:

标签: php javascript html forms submit


【解决方案1】:

我会将它们存储在$_SESSION。但是,即使您将其排除在外,您的基本搜索逻辑也不允许使用多个参数,因此您也需要重新配置它。它可能类似于以下内容:

if(isset($_SESSION['search']))
{
   $search = $_SESSION['search'];
}
else
{
  $search = array();
}

$key = $_GET['key'];
$search[$key] = $_GET['search'];

// store updated search in array
$_SESSION['search'] = $search;

$counter = 0;
function recordHandler($record)
{
  global $key;
  global $search;
  global $counter;



  foreach($search as $key => $value)
  {
    if($record[$key] != $value)
    {
      // if the record doesnt have all values that match for $key then its not a match
      return;
    }
  }

    if ($counter % 2) {
        print "<tr class=\"alt_row\">";
    } else {
        print "<tr>";
    }       
    print "<td>".$record['Subject']."</td>";
    print "<td>".$record['Tutor']."</td>";      
    print "<td>".$record['Level']."</td>";
    print "<td>".$record['Course Type']."</td>";
    print "<td>".$record['Course Code']."</td>";
    print "<td>".$record['Primary Center']."</td>";
    print "<td>".$record['Lesson 1 Date']."</td>";
    print "<td><a href=\"#\"></a></td>";
    print "<td><a href=\"#\"></a></td></td>";
    print "</tr>";

   $counter ++;
}

这无论如何都不是完整的我不确定你的解析器是如何工作的以及所有有趣的东西——而且这只支持AND搜索——它只会返回与搜索中所有提供的键值对匹配的行。您还需要实现一些东西来清除搜索参数,以便用户也可以重新开始。但是你应该很清楚基本的想法......

【讨论】:

  • 我可以确认我需要 AND 搜索,并且我还在表单的左上角添加了一个重置​​链接。我会玩弄你的代码,看看我能不能想出剩下的答案并在这里发回。
  • 在进一步了解问题后,我可以得出结论,您的代码足以获得我正在寻找的所需功能。我唯一需要添加的是顶部的 session_start() 和一个重置按钮,如果单击该按钮会破坏会话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 2021-12-16
  • 2020-04-18
相关资源
最近更新 更多