PHP - 回显POST变量

时间:2011-04-22 12:17:21

标签: php jquery http-post html-form

我遇到一些POST变量的问题,我看不出有什么问题,所以我希望有人能够发现什么是错的?

这是“简单搜索”表单:

<div id ="form">
<form enctype="multipart/form-data" method="post" action="testdocs-db.php" name="search" id="search" class="search">
<input type="hidden" name="dosearch" value="true">
<table border=0>
<tr>
  <td class="label">File Type:</td>
  <td>
<?php     doSelectMultiple("filetype", $options_filetype, $filetype, "");   ?>
  </td>
</tr>
<tr>
  <td class="label">File Name:</td>
  <td>
    <input id="filename" name="filename" class="text" value="<?php echo($filename); ?>">
  </td>
  <td>&nbsp;</td>
</tr>
<tr>
  <td class="label">File Size:</td>
  <td>
    <input id="filesize_min" name="filesize_min" class="text" value="<?php echo($filesize_min); ?>"><div id="kb">(kb min)</div>
  </td>
  <td>
    <input id="filesize_max" name="filesize_max" class="text" value="<?php echo($filesize_max); ?>"><div id="kb">(kb max)</div>
  </td>
</tr>
<tr>
  <td class="label"># Results:</td>
  <td>
    <input id="numresults" name="numresults" class="text"
    <?php
    if (strlen($numresults) >= 1)
    {
        echo ("value=\"$numresults\"");
    }
    else
    {
        echo ("value=\"10\"");
    }
    ?> >
  </td>
  <td>&nbsp;</td>
</tr>
<tr>
  <td class="label">Order By:</td>
  <td>
<?php     doSelect("orderby", 1, $options_orderby, $orderby, "");   ?>
  </td>
  <td>
<?php     doSelect("orderbyad", 1, $options_orderbyAD, $orderbyAD, "");   ?>
  </td>
</tr>
<tr>
  <td class="label">Output Format:</td>
  <td>
<?php     doSelect("outputformat", 1, $options_outputformat, $outputformat, "");   ?>
  </td>
  <td>
<?php     doSelect("outputlocation", 1, $options_outputlocation, $outputLocation, "");   ?>
  </td>
</tr>
<tr>
  <td>&nbsp;</td>
  <td><input type="submit" class="submit" value="Search"></td>
  <td>&nbsp;</td>
</tr>

因此,如果我点击提交按钮,一切都会正常,并且会显示搜索值,并且表单会记住字段值,以便您可以根据需要调整搜索条件。

但是,我还有另一个“高级搜索”表单,我试图这样做,但由于某些原因它不起作用:

<div id="advancedsearch" class="advancedsearch">
<form enctype="multipart/form-data" class="advancedsearchform" action="testdocs-db.php" method="post">
<input type="hidden" name="advancedsearchsubmit" value="1"/>
<input type="hidden" name="hiddenfiletype" id="hiddenfiletype"/>
<input type="hidden" name="hiddenfilename" id="hiddenfilename"/>
<input type="hidden" name="hiddenfilesize_min" id="hiddenfilesize_min"/>
<input type="hidden" name="hiddenfilesize_max" id="hiddenfilesize_max"/>
<input type="hidden" name="hiddennumresults" id="hiddennumresults"/>
<input type="hidden" name="hiddenorderby" id="hiddenorderby"/>
<input type="hidden" name="hiddenorderbyad" id="hiddenorderbyad"/>
<input type="hidden" name="hiddenoutputformat" id="hiddenoutputformat"/>
<input type="hidden" name="hiddenoutputlocation" id="hiddenoutputlocation"/>

<script type="text/javascript">
$("#filetype").change(copyFiletype);
$("#filename").change(copyFilename);
$("#filesize_min").change(copyFileSizeMin);
$("#filesize_max").change(copyFileSizeMax);
$("#numresults").change(copyNumResults);
$("#orderby").change(copyOrderBy);
$("#orderbyad").change(copyOrderByAD);
$("#outputformat").change(copyOutputFormat);
$("#outputlocation").change(copyOutputLocation);

function copyFiletype()
{
    var valueToCopy=$("#filetype option:selected").val();
    $("#hiddenfiletype").val(valueToCopy);
}

function copyFilename()
{
    var valueToCopy=$("#filename").val();
    $("#hiddenfilename").val(valueToCopy);
}

function copyFileSizeMin()
{
    var valueToCopy=$("#filesize_min").val();
    $("#hiddenfilesize_min").val(valueToCopy);
}

function copyFileSizeMax()
{
    var valueToCopy=$("#filesize_max").val();
    $("#hiddenfilesize_max").val(valueToCopy);
}

function copyNumResults()
{
    var valueToCopy=$("#numresults").val();
    $("#hiddennumresults").val(valueToCopy);
}

function copyOrderBy()
{
    var valueToCopy=$("#orderby option:selected").val();
    $("#hiddenorderby").val(valueToCopy);
}

function copyOrderByAD()
{
    var valueToCopy=$("#orderbyad option:selected").val();
    $("#hiddenorderbyad").val(valueToCopy);
}

function copyOutputFormat()
{
    var valueToCopy=$("#outputformat option:selected").val();
    $("#hiddenoutputformat").val(valueToCopy);
}

function copyOutputLocation()
{
    var valueToCopy=$("#outputlocation option:selected").val();
    $("#hiddenoutputlocation").val(valueToCopy);
}
</script>

<p>
<input type="radio" name="andor" value="AND" checked /> match <span class="all">all</span> of these |
match <span class="any">any</span> of these <input type="radio" name="andor" value="OR" />
</p>

<div class="dropdown">
<select name="tags[]" class="tags">
<option value="tags" selected="selected">tags</option>
<option value="agent">agent</option>
<option value="extension">extension</option>
</select>

<select name="operands[]" class="operands">
<option>please select a tag</option>
</select>

<select name="values[]" class="values">
<option>please select a tag</option>
</select>

<img class="addButton" src="images/blank.gif" alt="add" onclick="addNew();"/>
<img class="deleteButton" alt="delete" src="images/delete1.png" onclick="remove(this)" onmouseover="this.src='images/delete.png'" onmouseout="this.src='images/delete1.png'"/>
<div class="clear"></div>
</div>

<div class="clonecontainer"></div>

<div class="advancedsearchsubmit"><input type="submit" class="submit" value="Advanced Search"/></div>
</form>
</div>

提交高级搜索表单后,变量设置如下:

    // hidden input values from simple search
    $filetype= doPost('hiddenfiletype', $filetype);
    $filename= doPost('hiddenfilename', $filename);
    $filesize_min= doPost('hiddenfilesize_min', $filesize_min);
    $filesize_max= doPost('hiddenfilesize_max', $filesize_max);
    $numresults= doPost('hiddennumresults', $numresults);
    $orderby= doPost('hiddenorderby', $orderby);
    $orderbyAD= doPost('hiddenorderbyad', $orderbyAD);
    $outputformat= doPost('hiddenoutputformat', $outputformat); 
    $outputLocation= doPost('hiddenoutputlocation', $outputLocation);

简单的搜索变量类似地完成,除非它们正确地回显:

    /* do the search */
    $filetype       = doPost('filetype', $filetype);
    $filename       = doPost('filename', $filename);
    $filesize_min   = doPost('filesize_min', $filesize_min);
    $filesize_max   = doPost('filesize_max', $filesize_max);
    $numresults     = doPost('numresults',   $numresults);
    $outputformat   = doPost('outputformat', $outputformat);
    $orderby        = doPost('orderby',      $orderby);
    $orderbyAD      = doPost('orderbyad',    $orderbyAD);
    $outputLocation = doPost('outputlocation', $outputLocation);

对于大量代码感到抱歉,不想错过任何重要的代码。

如果有人能发现我做错了什么,那么我很想知道!

谢谢,

马丁

更新

doPost方法:

 FUNCTION doPost($st, $default)
 {
    if (isset($_POST[$st]))
        return $_POST[$st];
    else
        return $default;
 }

高级搜索可以很好地构建查询,但表单字段不会回显应该设置的值。

这里可以看到完整的代码(没有大量的JS文件):http://pastebin.com/eydtyEYK

3 个答案:

答案 0 :(得分:1)

当尝试以POST方法形式计算出HTML,JS和PHP之间传递的内容时,请使用其中一种方法来测试实际输出与您自己的预期。

var_dump( $_POST );
var_export( $_POST );
print_r($_POST, 1);

第一个通常是最好用的。

答案 1 :(得分:0)

可以如下简单:在此输入中

<input type="hidden" name="hiddenfiletype" id="hiddenfiletype"/>

没有价值。或许我很蠢:):

答案 2 :(得分:0)

我最终通过在单击高级搜索按钮时使用javascript将表单输入的值复制到隐藏输入来解决它,如下所示:

function copy() {

 var filetype=$("#filetype option:selected").val();
 $("#hiddenfiletype").val(filetype);

 var filename=$("#filename").val();
 $("#hiddenfilename").val(filename);

 var filesize_min=$("#filesize_min").val();
 $("#hiddenfilesize_min").val(filesize_min);

 var filesize_max=$("#filesize_max").val();
 $("#hiddenfilesize_max").val(filesize_max);

 var numresults=$("#numresults").val();
 ("#hiddennumresults").val(numresults);

 var orderby=$("#orderby option:selected").val();
 $("#hiddenorderby").val(orderby);

 var orderbyad=$("#orderbyad option:selected").val();
 $("#hiddenorderbyad").val(orderbyad);

 var outputformat=$("#outputformat option:selected").val();
 $("#hiddenoutputformat").val(outputformat);

 var outputlocation=$("#outputlocation option:selected").val();
 $("#hiddenoutputlocation").val(outputlocation);
}

表格形式:

<div class="advancedsearchsubmit"><input type="submit" class="submit" onclick="copy();" value="Advanced Search"/></div>