在我工作的空闲时间项目中,我一直在努力解决几个奇怪的问题。这是我的第一个"大" PHP / JS项目,说实话,我第一次使用ajax,所以我可能只是遗漏了一些东西。
无论如何,这是怎么回事。我使用PHP和jQuery技术编写了一个非常简单的发票系统,使用mPDF库从HTML / CSS生成PDF文件。我主要在模板中使用Session变量,该变量被发送到mPDF以生成PDF发票。
问题我在Chrome for Android上遇到过问题,在OnePlus One上测试了最新版本。会话变量未显示在PDF本身中。我认为它完全随机地工作了一两次。我的Android设备和谷歌浏览器的朋友也证实了同样的问题。
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']);
以下是您在 invoice-script.js 中可能已注意到的 generateInvoice.php 文件:
<?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'];
我不想让这篇文章发布得很长,所以我不会在这里发布任何代码片段。相信我,我已经尽我所能去了解自己发生了什么事情,感觉非常糟糕,我无法弄明白自己,我需要向别人寻求帮助。无论如何感谢任何反馈和帮助。干杯!
答案 0 :(得分:1)
'invoice-form'不包含任何字段 - 输入标记应位于表单
中答案 1 :(得分:0)
好的人,我想我找到了解决方法。
在 test.php 中注释掉所有未设置的方法,解决了Chrome for Android问题。
我不明白为什么会发生这种情况。为什么在生成发票之前未设置会话变量?他们不应该,对吧?或者我真的错过了什么?我知道我不应该在我自己的答案中要求澄清,但我认为在这一点上我真的需要。
欢呼并感谢IanMcL解决我的边缘问题!