формы — Передача переменных из одного файла в другой (PHP)

поэтому я создаю эту страницу отчета, где пользователи могут выбрать тип отчета и даты. Как только они нажмут кнопку отправки, появятся 2 новые кнопки: одна для загрузки отчета в формате Excel, а другая для загрузки в формате PDF. В зависимости от выбранного типа отчета у меня есть конкретные файлы, которые будут обрабатывать отчет. Я проверил определенные файлы, и они действительно генерируют отчет, когда я использую жестко закодированную дату. Но я хочу иметь возможность использовать даты, выбранные пользователем. Пожалуйста, посмотрите на мой код и дайте мне знать, что мне не хватает. Спасибо!!

saereport.php:

<!DOCTYPE html>
<HTML lang="en">
<HEAD>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style2.css">
<TITLE>SAE Report</TITLE>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$().ready(function() {
$(".datepicker").datepicker({dateFormat:'yy-mm-dd'});
});
</script>

</HEAD>
<BODY>
<center>
<h1>SAE Report</h1>
</center>
<form action = "" method = "post">
<label>Report Type</label>
<select id="report" name="report">
<option value="none"></option>
<option value="new">New SAEs Report</option>
<option value="cumulative">Cumulative SAE Report</option>
</select>
<label>Start Date</label><input type="text" class="datepicker" name="start">
<label>End Date</label><input type="text" class="datepicker" name="end">
<input type="submit" name="submit" value="Submit">
</form>
</BODY>
</HTML>

<?php
$type='';
$start='';
$end='';

if (isset($_post['submit'])){

$type=$_post['report'];
$start=$_post['start'];
$end=$_post['end'];

if ($type=="cumulative"){
echo "<form action='cumulativeRptExcel2.php?='.$end. method='get' name ='xls'>";
echo "<input type='submit' name='submitXLS' value='Download Excel'/>";
echo "</form>";
echo "<form action='$cumulativePDF' method='post' name ='xls'>";
echo "<input type='submit' name='submitXLS' value='Download PDF'/>";
echo "</form>";
}
elseif($type=='new' and $startdt!='' and $enddt!=''){
echo "<form action='$newXLS' method='get' name ='xls'>";
echo "<input type='submit' name='submitXLS' value='Download Excel'/>";
echo "</form>";
echo "<form action='$newPDF' method='get' name ='xls'>";
echo "<input type='submit' name='submitXLS' value='Download PDF'/>";
echo "</form>";
}
elseif($type="new" and ($start=='' or $end=='')){
echo "You need to select START and END date for the report";
}
}
?>

Начало моего cumulativeRptExcel2.php:

<?php
include ('connect.php');
$endDT='';
if (isset($_get['enddt'])){
$endDT=$_get['enddt'];
}
$query="SELECT * from sae_cumulative_report2($endDT)";
$result = pg_query($db, $query);
...
?>

1

Решение

Так как я не смог сгенерировать кнопки, чтобы пользователь мог выбрать, какой файл загрузки он хотел (xls или pdf). На данный момент я просто автоматически загружаю файл Excel. Вот это код:

<!DOCTYPE html>
<HTML lang="en">
<HEAD>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style2.css">
<TITLE>SAE Report</TITLE>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$().ready(function() {
$(".datepicker").datepicker({dateFormat:'yy-mm-dd'});
});
</script>

</HEAD>
<BODY>
<center>
<h1>SAE Report</h1>
</center>
<form action = "processReport.php" method = "GET">
<label>Report Type</label>
<select id="report" name="report">
<option value="none"></option>
<option value="new">New SAEs Report</option>
<option value="cumulative">Cumulative SAEs Report</option>
</select>
<label>Start Date</label><input type="text" class="datepicker" name="start">
<label>End Date</label><input type="text" class="datepicker" name="end">
<input type="submit" name="submit" value="Submit">
</form>
</BODY>

processReport.php:

$type='';
$startdt='';
$enddt='';
if (isset($_GET['submit'])){

$type=$_GET['report'];
$startdt=$_GET['start'];
$enddt=$_GET['end'];

if ($type=="cumulative" and $enddt!=''){
$query="SELECT * from sae_cum_decoded('$enddt')";
$filename='SAE_CumulativeReport_';
$insideTitle="Cumulative SAEs Report";
processFile($db,$filename, $insideTitle,$query);
}
elseif($type=='new' and $startdt!='' and $enddt!=''){
$query="SELECT * from sae_new_decoded('$startdt','$enddt')";
$filename='SAE_NewReport_';
$insideTitle="New SAEs Report";
processFile($db,$filename, $insideTitle,$query);
}
else
echo '<script language="javascript">';
echo 'alert("In order to generate a report, a REPORT TYPE needs to be selected.\nFor Cumulative SAEs Report, END DATE is required.\nFor New SAEs Report, START DATE and END DATE are required.")
window.location.href="saereport5.php"';
echo '</script>';}

function processFile($db,$filename, $insideTitle, $query){
...}

Было бы неплохо выяснить, как это сделать с помощью кнопок, потому что в будущем пользователю понадобятся оба варианта.

1

Другие решения

Несколько комментариев перед кодом:

  1. Имя переменной чувствительно к регистру. использование $_POST вместо $_postкак упомянуто @ toh19;
    Ссылка: http://php.net/manual/en/language.variables.basics.php

  2. Не доверяйте пользовательскому вводу напрямую. В этом случае, чтобы быть в большей безопасности, вы можете проверить пользовательский ввод по регулярным выражениям.
    Ссылка: http://www.phptherightway.com/#data_filtering

Код:

<!DOCTYPE html>
<HTML lang="en">
<HEAD>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style2.css">
<TITLE>
SAE Report
</TITLE>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$().ready(function() {
$(".datepicker").datepicker({
dateFormat:'yy-mm-dd'}
);
}
);
</script>
</HEAD>
<BODY>
<center>
<h1>
SAE Report
</h1>
</center>
<form action = "" method = "post">
<label>Report Type</label>
<select id="report" name="report">
<option value="none"></option>
<option value="new">New SAEs Report</option>
<option value="cumulative">Cumulative SAE Report</option>
</select>
<label>Start Date</label>
<input type="text" class="datepicker" name="start">
<label>End Date</label>
<input type="text" class="datepicker" name="end">
<input type="submit" name="submit" value="Submit">
</form>
</BODY>
</HTML>
<?php
$type='';
$start='';
$end='';
if (isset($_POST['submit'])){
$type=$_POST['report'];
$start=$_POST['start'];
$end=$_POST['end'];
if ( $type == 'cumulative') {
echo "<form action='cumulativeRptExcel2.php?&enddt=$end' method='POST' name='xls'>";
echo "<input type='submit' name='submitXLS' value='Download Excel'/>";
echo "</form>";
echo "<form action='$cumulativePDF' method='post' name ='xls'>";
echo "<input type='submit' name='submitXLS' value='Download PDF'/>";
echo "</form>";
}
elseif ($type == 'new') {
if (empty($start) || empty($end)) {
die("You need to select START and END date for the report");
}
echo "<form action='$newXLS' method='get' name ='xls'>";
echo "<input type='submit' name='submitXLS' value='Download Excel'/>";
echo "</form>";
echo "<form action='$newPDF' method='get' name ='xls'>";
echo "<input type='submit' name='submitXLS' value='Download PDF'/>";
echo "</form>";
}
}

Обновить

  • В предыдущем коде была проблема синтаксиса (в форме действия кумулятивного типа);
  • Если вы хотите передать переменную через строку запроса (cumulativeRptExcel2.php?&enddt=...) вы должны изменить форму METHOD в POSTв противном случае (метод GET) вам необходимо создать скрытое поле для значения enddt;
0

По вопросам рекламы [email protected]