0

我在创建导出到 PHP 中的 .CSV 文件的表单时遇到问题。我为这里的 HTML 创建了一个小提琴:

http://jsfiddle.net/tqs6g/

我正在用 PHP 编码,所以我无法在 JSFiddle 上显示完整代码,因为它不支持 PHP,但这是我的 PHP 代码:

<?php
if($_POST['formSubmit'] == "Submit")
{
    $errorMessage = "";

    if(empty($_POST['brandname']))
    {
        $errorMessage .= "<li>Please enter a business/brand name.</li>";
    }
    if(empty($_POST['firstname']))
    {
        $errorMessage .= "<li>Please enter your first name.</li>";
    }

    $varBrand = $_POST['brandname'];
    $varFName = $_POST['firstname'];
    $varLName = $_POST['lastname'];
    $varEmail = $_POST['email'];
    $varSite = $_POST['website'];

    if(empty($errorMessage)) 
    {
        $fs = fopen("mydata.csv","a");
        fwrite($fs,$varBrand . ", " . $varFName . ", " . $varLName . ", " . $varEmail . ", " . $varSite . "\n");
        fclose($fs);
        exit;
    }
}
?>

当我单击提交时,它成功转到“thankyou.php”(在表单操作中设置),但我无法弄清楚为什么它没有发布正确的错误消息或在点击时填写我的“mydata.csv”文件。可能是视线语法错误?如果您需要更多信息,请告诉我,我知道这有点令人困惑,因为 PHP 与 Fiddle 是分开的。

4

1 回答 1

0
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') { // better method to check for a POSt
    ... validation stuff ...
    $data = array();
    $data[] = $_POST['brandname'];
    $data[] = $_POST['firstname'];
    etc...
    if (empty($errrorMessage)) {
        $fs = fopen('mydata.csv', 'a') or die("Unable to open file for output");
        fputcsv($fs, $data) or die("Unable to write to file");
        fclose($fs);
        exit();
    } else {
       echo $errormessage;
    }
}

有几点需要注意:

1) 使用 $_SERVER['REQUEST_METHOD'] 检查提交类型是绝对可靠的 - 该值始终设置,如果正在执行发布,则始终为 POST。检查特定的表单域(例如提交按钮)是不可靠且不可靠的。
2) 使用 fputcsv() 写入 csv 文件。PHP 将为您完成所有繁重的工作,您只需为函数提供要写入的数据数组
3) 注意or die(...)结构,它检查打开/写入文件的失败。假设文件可用/可写是不可靠的,并且会在将来的某个时候咬你。在处理“外部”资源时,总是有错误处理。

于 2012-01-07T17:25:29.793 回答