根据表单输入查询数据库,然后输出到另一个页面

时间:2020-02-07 作者:JamesJohnson

我的WordPress/Web开发经验很少,所以我正在尝试找出最好的方法来实现这一点。

背景:我是一家销售水处理设备的公司的外部推销员。我们在商店测试水,并利用这些信息为客户确定最佳系统的尺寸。

我想做的是:我目前有一个Wordpress网站在运行,我一直在胡闹。我想有一个页面,我可以插入我的测试结果,提交这些结果以查询数据库中合适的产品,然后在一个干净的页面上输出结果和数据库中可用的最佳产品。这样我就可以把这页打印出来,交给我的客户。

我一直在寻找一些不同的Wordpress插件,但我不确定处理这个问题的最佳方法。希望你们能帮忙。

1 个回复
最合适的回答,由SO网友:Elkrat 整理而成

这是你可以处理它的方式,尽管意见可能会有所不同。构建框架将有点复杂,使其美观完全是另一项任务。

我会在您提交表单时运行AJAX查询,让它更性感。AJAX脚本从页面上的框中收集所有数据,调用后端,然后呈现整个页面上可见的“结果:”框,并将生成的HTML插入该框中。基本上,这就是流畅的搜索结果的工作原理。

结果框中有一个创建PDF的按钮。Java正在监视该按钮,该按钮所具有的是一个数据属性,该属性可能与结果框中的HTML非常相似。当您将HTML插入结果框时,您已经同时插入了该HTML。因此,现在Java可以将该数据属性发送到PDF编写器,而无需再次访问后端。这将成为您要求的“干净屏幕”,但您可以下载或通过电子邮件发送更好的信息

下面是一个示例java函数,它创建一个表单,向表单附加一个对象,然后提交表单。您可以将其提交到“PDF Writer”脚本。您使用所有要提交的数据填充提交给此函数的对象(obj)——可能只是html,但可能性是无限的。

function submitACP(obj){
        // form submission to ACP with current vars     
        var scheduleForm = document.createElement("form");
        scheduleForm.id = "transmission_form";
        scheduleForm.target = "_self";
        scheduleForm.method = "post"; // or "POST" if appropriate
        scheduleForm.enctype = "multipart/form-data";
        if (isset(obj.clientID) && obj.clientID > 0) {
            scheduleForm.action = \'https://\'+$(location).attr(\'host\')+\'/create-pdf/\'; 
        } else {
            scheduleForm.action = \'https://\'+$(location).attr(\'host\')+\'/client-selector/\'; // need a client id
        }
        var transmissionData = encodeURIComponent(JSON.stringify(obj));
        console.log(\'data stringified:\'+transmissionData);

        var transmission_object = document.createElement("input");
        transmission_object.type = "text";
        transmission_object.name = "client_object";
        transmission_object.value = transmissionData;
        scheduleForm.appendChild(transmission_object);

        document.body.appendChild(scheduleForm);

        $(\'#transmission_form\').submit();
    }
对于PDF编写器,我使用TCPDF。要想把它做好,需要大量的尝试和错误,但它是可靠的。您要做的第一件事是启动输出缓冲,以防止任何东西破坏PDF。然后运行逻辑,将所需内容捕获到字符串变量中。停止缓冲,然后需要TCPDF目录并调用它:

ob_start();
set_time_limit(30);

$path = $_SERVER[\'DOCUMENT_ROOT\'];
//define( \'SHORTINIT\', true );
require( $path.\'/wp-load.php\' );

$data_array = json_decode(stripslashes(urldecode($_POST[\'client_object\'] )), true );

if (! wp_verify_nonce($data_array[\'nonce\'], \'pdf_nonce\')) {
    die(\'sorry, charlie.\');
}
$doc_label = wp_kses($data_array[\'client_name\']);
echo wp_kses($data_array[\'html\']);

// Include the main TCPDF library (search for installation path).
require __DIR__ . \'/vendor/tcpdf/config/tcpdf_config.php\';
require __DIR__ . \'/vendor/tcpdf/tcpdf.php\';

// create new PDF document
ob_end_clean();
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, \'UTF-8\', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor(\'Sales Robot\');
$pdf->SetTitle($doc_label);
$pdf->SetSubject(\'Hardcopy Schedule\');
//$pdf->SetKeywords(\'TCPDF, PDF, example, test, guide\');

// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, \'\', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, \'\', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).\'/lang/eng.php\')) {
    require_once(dirname(__FILE__).\'/lang/eng.php\');
    $pdf->setLanguageArray($l);
}

// ---------------------------------------------------------

// set font
$pdf->SetFont(\'helvetica\', \'B\', 20);

// add a page
$pdf->AddPage();

//$pdf->Write(0, \'Example of HTML tables\', \'\', 0, \'L\', true, 0, false, false, 0);

$pdf->SetFont(\'helvetica\', \'\', 12);

$pdf->writeHTML($hc_html, true, false, false, false, \'\');
$doc_label .= \'.pdf\';
//Close and output PDF document
$pdf->Output($doc_label, \'I\');

//============================================================+
// END OF FILE
//============================================================+

die();
?>
就像我说的,你可以从多个方向来看这个问题。如果您对java和AJAX没有掌握,您可以将表单提交到PDF writer页面,在启动输出缓冲区之后!,在表单变量上运行逻辑,输出到变量,然后在调用PDF writer时使用该变量。

相关推荐

Gravity Forms - RMA Count

我是Wordpress的新手,所以想知道是否有人可以帮忙?我正在通过重力表单创建一个返回表单。然而,在每个表单的顶部,我想显示一个退货表单编号,例如RMA001、RMA002等。我想这可能可以使用一些编码来完成,但不知道如何编码。请你让我知道如何做到这一点,并解释我需要在哪里添加代码。如果您能掌握简单的英语,我们将不胜感激!非常感谢!本