Выполнение скрипта при нажатие на кнопку/ссылку

hardsystems

Новичок
Добрый день

Скажу сразу я новичок в php, поэтому прошу помощи.

Имеется скрипт, который я нашел на одном из форумов
/**
* Создание xls-документов
* @link http://habrahabr.ru/blogs/php/18726/
* @author Nikitian
*/
class XLS{
var $content='';
var $constructflag=false;
var $table=array();
/**
* Начинает созздавать бинарник xls
*/
function __construct() {
$constructflag=true;
$this->xlsBOF();
}
/**
* Заканчивает создавать бинарник xls и выводит его в браузер для сохранения
*/
function __destruct() {
if(is_array($this->table) && sizeof($this->table)>0 && $this->content!='')
$this->write();
}
/**
* Получить сформированный xls
* @return binary
*/
function get(){
$this->xlsEOF();
return$this->content;
}
/**
* Получение массива данных. Пропущенные ячейки заполняются пустыми строками
* @return array
*/
function getTable(){
$table_=array();
$rows=$cols=0;
foreach($this->table as $krow=>$row){
$rows=$krow;
if(is_array($row) && sizeof($row)>0)
foreach($row as $kcol=>$col)
if($cols<$kcol)
$cols=$kcol;
}
for($row=0;$row<=$krow;$row++)
for($col=0;$col<=$cols;$col++)
$table_[$row][$col]=isset($this->table[$row][$col])?$this->table[$row][$col]:'';
return$table_;
}
/**
* Записать ячейку
* @param int $row Строка от 0
* @param int $col Столбец от 0
* @param mixed $data Данные
* @param enum $type Тип данных. string/int. Можно не указывать - будет определён автоматически
* @return bool
*/
function set($row,$col,$data,$type='auto'){
if(!$this->constructflag){
//PHP4...
$this->xlsBOF();
$this->constructflag=true;
}
$data=iconv('cp1251','cp1251//TRANSLIT',$data);
$this->table[$row][$col]=$data;
switch($type){
case'int':{
return$this->xlsWriteNumber($row,$col,$data);
}
break;

case'string':{
return$this->xlsWriteLabel($row,$col,$data);
}
break;

case'auto':
default:{
if(is_int($data)){
return$this->xlsWriteNumber($row,$col,$data);
}
elseif(is_string($data)){
return$this->xlsWriteLabel($row,$col,$data);
}
else{
return$this->xlsWriteLabel($row,$col,serialize($data));
$this->table[$row][$col]=serialize($data);
}
}
break;
}
}
/**
* Вывести xls для сохранения в браузере
* @param string $filename Имя файла для сохранения.default:file.xls
* @return bool
*/
function write($filename=''){
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=".($filename!=''?$filename:'file.xls'));
header("Content-Transfer-Encoding: binary");
echo $this->get();
return true;
}
/**
* Очистка данных, чтобы деструктор не вывел всё в поток
* @return bool
*/
function clear(){
$this->table=array();
$this->content='';
return true;
}
function xlsBOF() {
$this->content.=pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}
function xlsEOF() {
$this->content.=pack("ss", 0x0A, 0x00);
return;
}
function xlsWriteNumber($Row, $Col, $Value) {
$this->content.=pack("sssss", 0x203, 14, $Row, $Col, 0x0);
$this->content.=pack("d", $Value);
return;
}
function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
$this->content.=pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
$this->content.=$Value;
return;
}
}
Выполнение скрипта делается так

<?php
//Создаём таблицу
$table=new XLS;
//Заполняем случайными значениями
for($i=0;$i<10;$i++){
$table->set(mt_rand(0,100),mt_rand(0,100),mt_rand(0,1000));//Заполняем случайные ячейки случайными данными
}
//Теперь мы можем сделать любое из следующих действий:
// 1) В $arr массив который сформировался в итоге - вдруг где пригодится для рисования html-таблицы или ещё чего
$arr=$table->getTable();
// 2) Сохраняем в файл
file_put_contents('cell.xls',$table->get());
// 3) Выводим в поток как файл для скачивания.
$table->write();
die;
Эти два скрипта я вставил в скрипт который выдает данные из БД (сайт, на joomla)

Так вот вопрос в том, что как только я захожу на страницу где выдаются данные, происходит сразу генерация xls.
А я хочу вызвать генерацию xls при нажатии на кнопку/ссылку, так как в моем скрипте имеется фильтр данных.

Т.е. человек заходит на старицу где расположен скрипт, пользуется фильтром, и нажимает получить xls и только после этого скачивается xls файл

Пробовал сделать это через <a href="<?php $table->write(); ?>, но увы, так же были не менее глупые попытки сделать то что нужно

С php второй день, более 8 лет админ, но хочу выучить программирование на php.
Заранее благодарен
Надеюсь не очень сумбурно, просто голова кипит.
 

hardsystems

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

zerkms

TDD infected
Команда форума
Таки уже взял и усиленно читаю, просто надеялся на помощь, так как вопрос, необходимо решить как можно быстрее...
Помочь можно тогда, когда человек понимает, о чём идет речь. В этом конкретном случае же вы просто хотите, чтобы кто-то за вас сделал вашу работу.
 

hardsystems

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