Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导出到PHP中的Excel和PDF,导致代码冗余_Php_Mysql_Export_Export To Excel_Export To Pdf - Fatal编程技术网

导出到PHP中的Excel和PDF,导致代码冗余

导出到PHP中的Excel和PDF,导致代码冗余,php,mysql,export,export-to-excel,export-to-pdf,Php,Mysql,Export,Export To Excel,Export To Pdf,我需要为一些mysql查询创建导出到excel和导出到pdf选项,并将其提供给用户 而且,用户还需要在我的网站上查看查询结果 因此,在这种情况下,会出现代码冗余,因为我必须创建三个php代码文件: 一种让用户直接在我的网站上查看查询结果的方法, 以及 另一个,允许用户将相同的查询结果导出到Excel,并且 允许用户将相同的查询结果导出到PDF的最后一个 这三个文件都有相同的代码,唯一的区别是将数据发送到excel或pdf的方式不同 如何消除这种代码重复,是否有某种方法可以使我只拥有一个文件,并将

我需要为一些mysql查询创建导出到excel和导出到pdf选项,并将其提供给用户

而且,用户还需要在我的网站上查看查询结果

因此,在这种情况下,会出现代码冗余,因为我必须创建三个php代码文件:

一种让用户直接在我的网站上查看查询结果的方法, 以及

另一个,允许用户将相同的查询结果导出到Excel,并且

允许用户将相同的查询结果导出到PDF的最后一个

这三个文件都有相同的代码,唯一的区别是将数据发送到excel或pdf的方式不同


如何消除这种代码重复,是否有某种方法可以使我只拥有一个文件,并将其用于所有目的,查看、导出到pdf以及导出到excel。

将所有代码放在一个文件中。使用
$\u GET['format']
决定是否需要将格式设置为PDF或excel,默认设置为网页选项,例如

<?php

if($_GET['format'] == "pdf")
{
     // export as PDF
}
elseif($_GET['format'] == "excel")
{
     // export as excel
}
“是否有某种方法可以让我只拥有一个文件,并将其用于所有目的,查看、导出到pdf以及导出到excel。”我想答案是肯定的

您需要放置一个选择框,以便为用户提供以特定方式查看特定代码的选项。请参见下面的示例代码

<select name="viewoption" id="viewoption">
<option value="view">Page view</option>
<option value="xls">Export in Excel</option>
<option value="pdf">Export in PDF</option>
</select>

页面视图
在Excel中导出
以PDF格式导出
然后,在操作页面上,您只需检查
$\u POST['viewoption']
的值,并根据要求放置(如果条件

这可能对你有帮助。如果有任何疑问,请告诉我


谢谢。

你可以把所有的答案都放在一个文件里,但我想说你为什么要这样做?您可能有大量的其他代码在浮动,或者最终会浮动

您应该使用模型-视图-控制器(MVC)设计。您应该有一个类来处理所有sql(纯数据并确保准确创建、保存和返回数据),另一个文件接收/发出数据请求并指示渲染哪个视图,最后是2个或3个仅模板类型的文件(视图),它们只是格式化和渲染在控制器中创建的数据


拥有更多的文件/类会更好,并使代码更加模块化,从而消除代码冗余。将所有内容打包到一个文件中会增加代码冗余

这里没有冗余,因为您还没有写任何东西。冗余存在于想法中。通过适当的抽象,您可以编写干燥的代码。例如,您可以选择上面提供的类似Chanders的选项:

<select name="viewoption" id="viewoption">
<option value="view">Page view</option>
<option value="xls">Export in Excel</option>
<option value="pdf">Export in PDF</option>
</select>

页面视图
在Excel中导出
以PDF格式导出
然后,您必须编写一些代码—如果愿意,可以编写一个控制器—来侦听请求。由于您正在以不同的格式写出相同的数据,因此可以执行以下操作:

  • 获取数据(如果愿意,从模型中获取)
  • 决定使用请求运行哪个函数/代码/视图
  • 调用您的函数/code/view,该函数使用您以前的决定生成正确的格式
  • 完成
  • 我认为是否使用MVC并不重要,重要的是组件一起工作的实际情况


    请注意:拥有多个文件并不意味着代码重复。文件只是容器。以java为例。在java中,通常将每个类放入不同的文件中。

    重复的代码始终是次优软件设计的标志,有很多机会可以阻止它。以下是针对您的特定任务的一些建议:

    1。使用参数

    将文件统一为一个文件,并在URL中使用GET参数,如
    file.php?output=pfd
    。在脚本中,您可以从
    $\u GET['output']
    读取此参数,并决定要生成的导出格式(
    if…else
    开关

    2。使用包括

    只有一个大文件将非常混乱。因此,您还可以保留三个php文件,并创建第四个文件
    get_data.inc.php
    ,其中包含获取数据的所有重复代码。现在,您可以通过
    include get_data.inc.php
    在三个php中的每一个中加载并执行此文件

    3。使用功能

    将代码外包到include中,可能也会让人困惑,因为您不知道include将做什么,以及依赖关系是什么。因此,最好将功能封装到函数中。在这里,您可以清楚地定义,在函数中插入什么(db连接?),以及从中获得什么(数据数组?)。创建一个新文件
    get\u data.func.php
    ,并定义一个
    函数get\u data($db\u connection)
    ,完成所有工作并返回准备输出的数据。然后在每个文件中通过
    require\u once get\u data.func.php
    包含该文件,并说
    $data=get\u data($db\u connection)

    4。使用类继承

    您可以使用类继承的概念。您可以定义一个抽象类,其中包括从数据库中获取数据的功能,还可以定义一个抽象函数
    abstract public function output()。然后可以创建扩展类的子类,这些子类以特定的方式实现
    output()
    函数

    5。使用MVC框架

    您可以使用已建立的框架来实现“模型-视图-控制器”(MVC)模式。在这里,您可以非常清晰地划分应用程序的不同层(来自db的数据、为输出准备数据、显示数据)

    免责声明:这些只是一些学习提示,以便更好地组织您的项目。如果你没有太多的经验,我不建议直接从一个大M开始
    <select name="viewoption" id="viewoption">
    <option value="view">Page view</option>
    <option value="xls">Export in Excel</option>
    <option value="pdf">Export in PDF</option>
    </select>