【问题标题】:One form and two actions and two submit in php一个表单,两个动作,两个在php中提交
【发布时间】:2014-05-14 02:30:42
【问题描述】:

在一个项目中工作,用户可以选择日期和日期,然后选择其中一个单选按钮。之后选择 pdf 或 excel 来生成首选格式。

问题是表单,如果按下 excel,我希望它执行 generateExcel.php,如果按下 PDF,我希望它执行 generatePdf.php。这是我已经走了多远但还没有工作:

<form action='generatePdf.php' method='Post'/>

Fra Dato: <input type="text" name="fraDato" value="<?php echo date('d-m-Y'); ?>" /> 
Til Dato: <input type="text" name="tilDato" value="<?php echo date('d-m-Y'); ?>"> <br> 
<input type="radio" name="hent" value="timesmaling">Times malinger<br>
<input type="radio" name="hent" value="tredjetimesmaling">Tredje times malinger <br>
<input type="radio" name="hent" value="oppgaver">Oppgaver <br>
<input type="radio" name="hent" value="dagvakt">Dagvakt <br>
<input type="radio" name="hent" value="kveldsvakt">Kveldsvakt <br>
<input type="radio" name="hent" value="kontrollcm">Kontroll CM <br>

<input type='submit' name='pdf' value='PDF'>

<form action='generateExcel.php' method='Post'/>
<input type='submit' name='excel' value='excel'>

</form>

【问题讨论】:

    标签: php forms excel pdf-generation action


    【解决方案1】:

    可以使用按钮上的 HTML5 formaction 属性覆盖父表单的 action 属性。见https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button

    <input type='submit' name='pdf' value='PDF' formaction='generatePdf.php'>
    <input type='submit' name='excel' value='excel'  formaction='generateExcel.php'>
    

    浏览器支持看起来不错:http://www.wufoo.com/html5/attributes/13-formaction.html

    但是,webeno 的答案肯定适用于所有浏览器,并且可以更轻松地在一个文件中管理所有表单处理代码。

    【讨论】:

    • 只要确保您的观众使用 HTML5 浏览器 ;)
    • Google chrome、firefox、opera 和 IE 的最新版本都支持它。那太好了。
    • 是的,如果你没有用户使用旧版浏览器(或者如果这只是为了你自己),这确实是最好的解决方案,我的跨浏览器解决方案可能更好......
    【解决方案2】:

    我建议您将两个脚本放在同一个文件中,并针对已单击的按钮进行验证。

    编辑:如果您的 2 个文件太大(或者您出于任何其他原因希望将它们分开),您仍然可以使用 include(或 require - 有关更多信息区别:Difference between "include" and "require" in php)。

    原始文件:

    <form action='generate.php' method='Post'> <!-- removed the slash from the end here -->
    
    Fra Dato: <input type="text" name="fraDato" value="<?php echo date('d-m-Y'); ?>" /> 
    Til Dato: <input type="text" name="tilDato" value="<?php echo date('d-m-Y'); ?>"> <br> 
    <input type="radio" name="hent" value="timesmaling">Times malinger<br>
    <input type="radio" name="hent" value="tredjetimesmaling">Tredje times malinger <br>
    <input type="radio" name="hent" value="oppgaver">Oppgaver <br>
    <input type="radio" name="hent" value="dagvakt">Dagvakt <br>
    <input type="radio" name="hent" value="kveldsvakt">Kveldsvakt <br>
    <input type="radio" name="hent" value="kontrollcm">Kontroll CM <br>
    
    <input type='submit' name='pdf' value='PDF'>
    <input type='submit' name='excel' value='excel'>
    
    </form>
    

    generate.php:

    if (isset($_POST['pdf'])) {
        include('generatePdf.php');
    }
    
    if (isset($_POST['excel'])) {        
        include('generateExcel.php');
    }
    

    已编辑

    或者,您可以在该单独文件上使用重定向(generate.php - 确保此页面上没有其他内容):

    if (isset($_POST['pdf'])) {
        header('Location: generatePdf.php');
    }
    
    if (isset($_POST['excel'])) {        
        header('Location: generateExcel.php');
    }
    

    【讨论】:

    • 我看到了,但是文件很大,所以我想将它们分开,因为这样以后更容易编辑。
    • 您仍然可以将它们分开并使用include
    • 编辑了我的答案...试试看 ;)
    • 使用包含,效果不太好。 Excel 文件必须在其自己的文件中,否则它将包含 html 代码和数据。使用pdf我得到错误:FPDF错误:一些数据已经输出,无法发送PDF文件。
    • 我会试一试,但其他解决方案完美无缺。
    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 2013-08-07
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多