HTML-форма не выводится в файл CSV (или отображает правильные сообщения об ошибках)

У меня возникли проблемы с созданием формы, которая экспортируется в файл .CSV в PHP. Я создал скрипт для 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.


person MillerMedia    schedule 07.01.2012    source источник
comment
Добавьте error_reporting(-1); в свой php-код и проверьте, не показывает ли он какую-либо ошибку.   -  person Shiplu Mokaddim    schedule 07.01.2012
comment
И почему люди, пытающиеся записать данные в формате CSV, даже не задумываются о том, чтобы взглянуть на встроенную в PHP функцию fputcsv()?   -  person Mark Baker    schedule 07.01.2012
comment
Я все еще изучаю PHP-формы, поэтому хорошо, что я познакомился с такими вещами, как fputcsv, чтобы я мог больше их изучать!   -  person MillerMedia    schedule 07.01.2012


Ответы (1)


<?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(...), которые проверяют наличие ошибок при открытии/записи в файл. Предположение, что файл доступен/доступен для записи, ненадежно и в какой-то момент в будущем вас укусит. При работе с «внешними» ресурсами всегда имейте возможность обработки ошибок.

person Marc B    schedule 07.01.2012
comment
Как этот ответ находит проблему вопрошающего? - person Shiplu Mokaddim; 07.01.2012
comment
Как мы можем найти проблему, если OP не дает никакой пользы для диагностики? Это показывает ОП, как это сделать. В противном случае опубликованный код OP выглядит нормально, так что это единственный способ продолжить. - person Marc B; 07.01.2012
comment
Я согласен, у меня возникли проблемы с диагностикой проблемы, поэтому я запущу это и посмотрю, к чему это приведет. Спасибо. - person MillerMedia; 07.01.2012
comment
Я пробовал это, но он делает то же самое. Он просто поблагодарит вас.php и не ответит, даже если я не заполню ни один из входных данных в форме. Мой код PHP находится в моих тегах ‹head›. Я хотел бы отладить больше, но я не знаю, как выяснить, какой код вообще запускается (если есть). Есть ли в PHP функция типа NSLog (аналогичная Objective-C)? - person MillerMedia; 07.01.2012
comment
Если вы перенаправляете через вещь типа header(Location: ..., сделайте ее условной, если $errorMessage пуст. - person Marc B; 08.01.2012