Как передать переменную PHP в MySql-запрос для создания документа Excel Загрузить - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь передать переменную с одной страницы PHP на другую страницу PHP, что приведет к загрузке Excel. Тем не менее, я не могу понять, как передать переменную и по-прежнему триггер загрузки. Я понимаю, что на моей странице PHP, которая создает файл Excel, не может быть передано никаких переменных или загрузка не будет инициирована.

Например, я хотел бы сделать следующее (очень простой пример):

variable.php

<?php
$date = '2012-02-15';
echo '<input type="text" id="date" value="'.$date.'"/>';
echo '<span onclick="excelDownload()">Click</span>';
?>

passing.js

function excelDownload(str)
{
  Ajax... 
  var date = document.getElementById('date').value;
  var queryString = "?date=" + date;
  xmlhttp.open("GET", "excel.php" + queryString, true);
  Ajax....
}

excel.php

<?php
Connect to database... 
$date = $_GET['date'];
$file = "Names: ";
$result = mysql_query("SELECT * FROM Something WHERE date_field = '$date'");
$data = mysql_fetch_array($result);
$file.= $data['names']." ";
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=names.xls");
header("Pragma: no-cache");
header("Expires: 0");
print $file;
?>

К сожалению, переменная $ _GET [date '] приводит к тому, что файл excel.php не загружается. Мне удалось написать статические запросы MySql на странице excel.php, поэтому мне не нужно передавать никаких переменных. Тем не менее, теперь у меня есть необходимость создавать динамические загрузки Excel, но я не достаточно силен в php, чтобы выяснить мои варианты. С другой стороны, я использую Ajax и не использую «submit». Будет ли это проблемой?

1 Ответ

0 голосов
/ 16 февраля 2012

Я выяснил свою проблему и хотел поделиться своими выводами, чтобы закрыть этот вопрос. По сути, я должен был быть более подробным в своем вопросе. Моей функции Ajax потребовалась некоторая настройка, чтобы переменная проходила и позволяла заголовкам инициировать загрузку.

Я использовал следующее в моей функции Ajax:

Ajax...
{
  if (xmlhttp.readyState == 4)
  {
   //nothing to allow download to trigger
  }
}
var date = document.getElementById('date').value;
var queryString = "?date=" + date;
xmlhttp.open("GET", "excel.php" + queryString, true):
xmlhttp.send(null);

Однако я должен был использовать это:

Ajax...
{
  if (xmlhttp.readyState == 4)
  {
   window.location = "excel.php" + queryString;
  }
}
var date = document.getElementById('date').value;
var queryString = "?date=" + date;
xmlhttp.open("GET", "excel.php" + queryString, true):
xmlhttp.send(null);

Пока я думал, что моя проблема связана с выводом перед header (), настоящей проблемой была передача переменной.

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