Как отобразить несколько отдельных документов PDF/Excel на веб-сайте?

55
6

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

Моим первым решением было построить функцию, которая будет искать массив для определенного идентификатора дилера. Этот идентификатор торговца будет связан с кодом встраивания, который затем будет вставлен в страницу через PHP.

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

Вот мой код для старого метода. Насколько я знаю, синтаксис верен.

ini_set('memory_limit', '1024M');
include_once("check_login_status.php");
$log_dealer = $_SESSION['dealer'];
function assignPriceSheet($log_username) {
$array = array("<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '333333'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '115'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '122'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '136'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '137'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '167'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '169'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '172'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '173'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '199'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '208'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '217'
, "<iframe src='pricesheets/Price Sheet.pdf' height='750' width='800'>" => '596017');
//Returns the price sheet of the logged in user
return array_search($log_username, $array);
}

Обычно в функции будет около 400 записей (я просто хотел сократить длину кода).

Было бы оценено альтернативное решение!

спросил(а) 2014-08-14T22:29:00+04:00 5 лет, 10 месяцев назад
1
Решение
56

Первое решение (используя массив, как указано выше)

// PHP
// define somewhere this array
$price_list = array (
"username_1" => "/some-folder/price_list_1.php",
"username_2" => "/some-folder/price_list_2.php",
"username_3" => "/some-folder/price_list_3.php"
);

// your price_list.php file
// you may have all of this in one .php file as well

if(isset($_SESSION) && user_is_authorized()){ // check if the user is logged in
echo "<iframe src='" . $price_list[$_SESSION['username']] . "' height='750' width='800'>";
}

Второе решение (без массива)

// you may name the price_list for each user according to their username and you'll have something like this 
if(isset($_SESSION) && user_is_authorized()){ // check if the user is logged in
echo "<iframe src='/some-folder/" . $_SESSION['username'] . "_price_list.pdf' height='750' width='800'>";
}

На стороне клиента вы можете иметь что-то вроде этого

// you may load the price_list on onload or an onclick event
// don't pass any id with URL due to security issues
window.onload = function(){
var button = document.geElementById('price_list');
button.onclick = function(){
var xhr = new XMLHttpRequest();
var url = "pricelist.php";
xhr.open("GET", url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
document.getElementById('price_list_container').innerHTML = xhr.responseText;
}
};
xhr.send();
};
};

ответил(а) 2014-08-14T23:20:00+04:00 5 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема