2013-02-14 6 views
2

Я не могу fgetcsv() работать с переменной от $_POST

( delimiter = (string)$_POST['delimiter'];) 

Я работает, если я указываю: $delimiter = "\t";

, но не тогда, когда я использование: $delimiter = (string)$_POST['delimiter'];

  1. HTML

    <html> 
    <body> 
    <form enctype="multipart/form-data" action="upload.php" method="post"> 
         1) Select a delimiter.<br /> 
         <input type="radio" name="delimiter" value="\t"checked="yes" /> Tab<br /> 
         <input type="radio" name="delimiter" value=" "/> Space<br /> 
         <input type="radio" name="delimiter" value=","/> Comma<br /> 
         <input type="radio" name="delimiter" value=";"/> Semicolon<br /><br /> 
         <input type="hidden" name="MAX_FILE_SIZE" value="1000"> 
         2) Send this file: <input name="userfile" type="file"><br /><br /> 
         3) <input type="submit" value="Send Info"> 
    </form> 
    <br /> 
    </body> 
    </html> 
    
+0

Можете ли вы дать нам немного больше кода для обзора? –

+0

Все в $ _POST уже есть строка (если вы не используете нотацию массива в своей клиентской форме). Что показывает 'var_dump ($ _ POST)' show? –

+0

Уже '$ _POST' - это строка. Зачем вам нужно '(string)' перед '$ _POST'? –

ответ

3

Уже $_POST - это строка. Зачем вам (string) перед $_POST? Просто удалите его. Просто имейте:

delimiter = $_POST['delimiter']; 

Это должно сработать.


Кроме того, вы не должны использовать fgetcsv, так как вы не извлечение файла. Вам нужно str_getcsv.

str_getcsv($_POST["csv"], $_POST['delimiter']); 
+1

Это не должно иметь никакого значения - это просто актерский состав, я думаю, что URL-кодирование, скорее всего, будет проблемой – Raad

+0

Хм ... Может быть. Давайте посмотрим, что это за решение. –

+0

По-прежнему возникают проблемы с загрузкой моего кода. У меня есть HTML-форма, которая загружает выбранный файл и четыре переключателя, которые позволяют пользователю выбирать разделитель. – user2072585

1

Почему бы не сделать это несложный, как это:

$options = array(0=> "\t", 1 => "\n"); 
$delimiter = $options[ (int) $_POST['delimiter'] ]; 

и использовать ключи ваших вариантов вместо самого ограничителя. Безопаснее и надежнее.

0

я наткнулся на эту проблему и решить ее с помощью следующего кода:

$delimiter = $_POST['delimiter']; 
$delimiter = str_replace("\\t","\t",$delimiter); 

Довольно поздно, но надеюсь, что это поможет кому-то быть сумасшедшим об этой тайне.