HTML表单未输出到CSV文件(或显示正确的错误消息)

时间:2012-01-07 17:14:01

标签: php html forms fopen jsfiddle

我在创建导出到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与小提琴分开。

1 个答案:

答案 0 :(得分: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。检查特定表单字段(例如提交按钮)是hacky且不可靠的 2)使用fputcsv()写出csv文件。 PHP将为您完成所有繁重的工作,您将为函数提供一组数据来写入 3)注意or die(...)构造,它检查打开/写入文件的失败。假设文件可用/可写是不可靠的,并且将来会在某些时候咬你。处理“外部”资源时,始终要进行错误处理。