PHP - вывод переменных POST - PullRequest
0 голосов
/ 22 апреля 2011

У меня проблема с некоторыми переменными 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);

Извините за кучу кода, не хотел пропустить ничего важного.

Если кто-то может заметить, что я делаю неправильно, я хотел бы знать!

Спасибо

Martin

UPDATE

Метод doPost:

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

Расширенный поиск строит запрос нормально, но поля формы не отражают значения, которые должны быть им установлены.

Полный код можно увидеть здесь (без массивных файлов JS): http://pastebin.com/eydtyEYK

Ответы [ 3 ]

1 голос
/ 22 апреля 2011

При попытке выяснить, что передается между HTML, JS и PHP в форме метода POST, затем используйте один из этих методов для проверки фактического вывода по сравнению с вашими ожиданиями.

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

Первый, как правило, лучше всего использовать.

0 голосов
/ 26 апреля 2011

Я в конечном итоге решил эту проблему, скопировав значения входов формы в скрытые входы, используя 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>
0 голосов
/ 22 апреля 2011

Может быть так просто: в этом входе

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

значение отсутствует.Или, может быть, я тупой:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...