在我的空闲时间项目中,我一直在努力解决一些奇怪的问题。这是我的第一个"大"PHP/JS项目,老实说,我是第一次使用ajax,所以我可能只是错过了一些东西。
不管怎样,事情就是这样。我正在使用PHP和jQuery技术与mPDF库编程一个非常简单的发票系统,从HTML/CSS生成一个PDF文件。我主要使用发送到mPDF的模板中的会话变量来生成PDF发票。
我遇到的问题是安卓版Chrome,在OnePlus One的最新版本上进行了测试。会话变量不会显示在PDF本身中。我认为它完全随机地工作了一两次。我的安卓设备和谷歌浏览器的朋友也证实了同样的问题。
test.php:
<?php
session_start();
error_reporting(E_ALL);
if (!isset($_SESSION['GLO_IS_LOGGED_IN'])) {
header("Location: index.php");
exit;
}
include('libs/mPDF/mpdf.php');
ob_start();
include('protected/templates/template.php');
$data = ob_get_clean();
$mpdf = new mPDF();
$mpdf->WriteHTML($data);
$mpdf->Output('protected/invoices/Faktura ' . date('j-m-Y-H-i-s') . '.pdf');
$mpdf->Output('Faktura ' . date('j-m-Y-H-i-s') . '.pdf', 'D');
unset($_SESSION['VAR_DESCRIPTION_ARRAY']);
unset($_SESSION['VAR_AMOUNT_ARRAY']);
unset($_SESSION['VAR_PRICE_ARRAY']);
unset($_SESSION['VAR_TO_ADDRESS']);
unset($_SESSION['VAR_INVOICE_NUMBER']);
下面是generateInvoice.php文件,您可能在发票脚本.js中注意到:
<?php
session_start();
error_reporting(E_ALL);
if (!isset($_SESSION['GLO_IS_LOGGED_IN'])) {
header("Location: index.php");
exit;
}
if (!empty($_POST['invoice-number'])) {
$_SESSION['VAR_INVOICE_NUMBER'] = trim($_POST['invoice-number']);
} else {
echo('Please add invoice number');
exit;
}
if (!empty($_POST['to-address'])) {
$_SESSION['VAR_TO_ADDRESS'] = ($_POST['to-address']);
} else {
echo('Internal Error');
exit;
}
$_SESSION['VAR_DESCRIPTION_ARRAY'] = $_POST['invoice-description'];
$_SESSION['VAR_AMOUNT_ARRAY'] = $_POST['invoice-amount'];
$_SESSION['VAR_PRICE_ARRAY'] = $_POST['invoice-price'];
我不想把这篇文章写得太长,所以我将停止在这里发布任何代码片段。相信我,我已经尽了我所能去了解自己发生了什么,我自己也弄不清楚,我需要寻求别人的帮助,这感觉真的很糟糕。无论如何,感谢您的反馈和帮助。干杯
'invoice-form'不包含任何字段-输入标记应在表单
各位,我想我已经找到了解决方案。
在test.php的末尾注释掉所有未设置的方法解决了Chrome for Android的问题。
我一开始就不明白为什么会发生这种事。为什么在生成发票之前未设置会话变量?他们不应该是,对吧?或者我真的错过了什么?我知道我不应该在自己的回答中要求澄清,但我认为在这一点上我真的需要澄清
干杯,感谢IanMcL解决了我的Edge问题!