Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод CSV (глюк со знаком "!")
 
 автор: Maxys   (14.12.2007 в 14:48)   письмо автору
 
 

Драсте у меня интересная проблема, в файле csv идёт список мобильников со всякими данными. У меня это всё с файла выводится в таблицу, с этим всё замечательно, никаких глюков, зато когда я пытаюсь таким же способом создать mail и выслать такую же таблицу на э-почту у меня иногда в определённых ячейках вставляется знак восклицания "!". Из-за этого портится таблица. Тоесть идёт код:

$mailmsg .= "<td><center>$data_array[$f]</center></td>";

и в тег <center> вставляется знак ! переделывая его в <c!enter> что приводит к ошибке в таблице. Как с этим боротся? Для вывода использую for возможно ли такое что код "не успевает" обработать всё и вставляет свои символы? Всего записей в файле 191.

   
 
 автор: Maxys   (03.01.2008 в 11:46)   письмо автору
 
   для: Maxys   (14.12.2007 в 14:48)
 

так кто нибудь знает решение данной проблемы? Очень надо..

   
 
 автор: sim5   (03.01.2008 в 12:59)   письмо автору
 
   для: Maxys   (03.01.2008 в 11:46)
 

Пока не покажете хотя бы часть своего csv и возможно кода, никто знать не будет.

   
 
 автор: Maxys   (03.01.2008 в 15:24)   письмо автору
 
   для: sim5   (03.01.2008 в 12:59)
 

маленькую часть csv приложил, но всего записей 200

а код, может и смешной но палками и ногами не бейте!

$data = File("testcsv.csv");
$dat_arr = explode(";", $data[0]);

    $mail = $_POST['mail'];
            
            $headers = "Content-Type: text/html; charset=Windows-1251";

            $mailmsg = "<table width=100% border=1 style=border-top-width:1; border-right-width:thin; border-left-width:1; border-top-color:black;  border-left-color:black; border-top-style:solid; border-right-style:dotted; border-left-style:solid;>
            <tr>
                    <td width=1%><center><b>Производитель</b></center></td>
                    <td width=55%><center><b>Модель/Описание</b></center></td>
                    <td width=10%><center><b>Цена LVL+PVN</b></center></td>
                    <td width=1%><center><b>На складе</b></center></td>
            </tr>";
                        for ($i=3;$i<count($data);$i++) 
                            {
                            $data_array = explode(";", $data[$i]);
                            $mailmsg .= "<tr>";
                                for ($f=0;$f<count($data_array);$f++)
                                    {
                                        if ($f == 0)
                                            {
                                                if ($data_array[0] == "0")
                                                    {
                                                        $checking = 0;
                                                    }
                                                else
                                                    {
                                                        $mailmsg .= "<td><center>$data_array[$f]</center></td>";
                                                    }
                                            }
                                        elseif ($f == 1)
                                            {
                                                if ($data_array[1] == $checking)
                                                    {
                                                        break(2);
                                                    }
                                                else
                                                    {
                                                        $mailmsg .= "<td><center>$data_array[$f]</center></td>";
                                                    }
                                            }
                                        else
                                            {
                                                $mailmsg .= "<td><center>$data_array[$f]</center></td>";
                                            }
                                    }
                            }

            $mailmsg .= "</tr></table>";
            
            mail ($mail, "Цены", $mailmsg, $headers);


$checking и break установленны для того что бы csv не выводил строки с 0. По этому можно не обращать внимание на это.

Edit: ой я не заметил, я код не много переделал и файл и всё нормально стало выводится, только это не дело каждый раз csv файл перекавыривать и удалять не нужное. Раньше было ещё так:

elseif ($f == 1)
                                            {
                                                if ($data_array[1] == $checking)
                                                    {
                                                        break(2);
                                                    }
                                                else
                                                    {
                                                        $mailmsg .= "<td><center>$data_array[$f]</center></td>";
                                                    }
                                            }
                                                                                elseif ($f2 == "")
                                            {
                                                   echo "";
                                              }
                                                                                 elseif ($f3 == "")
                                            {
                                                   echo "";
                                              }
                                                                                 elseif ($f4 == "")
                                            {
                                                   echo "";
                                              }
                                                                                 elseif ($f5 == "")
                                            {
                                                   echo "";
                                              }
                                                                                 elseif ($f6 == "")
                                            {
                                                   echo "";
                                              }
                                                                                 elseif ($f8 == "")
                                            {
                                                   echo "";
                                              }
                                        else
                                            {
                                                $mailmsg .= "<td><center>$data_array[$f]</center></td>";
                                            }

   
 
 автор: Trianon   (03.01.2008 в 15:48)   письмо автору
 
   для: Maxys   (03.01.2008 в 15:24)
 

Ваша беда в том, что Вы всё тело таблицы записываете одной длиннющей строкой без единого разрыва.
CSV же тут совершенно не при чем.

   
 
 автор: Maxys   (03.01.2008 в 15:55)   письмо автору
 
   для: Trianon   (03.01.2008 в 15:48)
 

понятно... что мне предпринять в таком случае?

   
 
 автор: Trianon   (03.01.2008 в 16:00)   письмо автору
 
   для: Maxys   (03.01.2008 в 15:55)
 

Добавить в цикл вывод закрывающего тега "</tr>\r\n"

   
 
 автор: Maxys   (03.01.2008 в 17:41)   письмо автору
 
   для: Trianon   (03.01.2008 в 16:00)
 

вставил я </tr> но всё равно ошибка со знаком ! остаётся
и я заметил что когда я вывожу весь список (тоесть 11 столбцов) то на мыло приходит всё нормально, а когда начинаю их вырезать скриптом, то тогда уже знак ! вставляется.

                                        elseif ($f == 6)
                                            {
                                                "";
                                            }
                                        elseif ($f == 7)
                                            {
                                                "";
                                            }
                                        elseif ($f == 8)
                                            {
                                                "";
                                            }
                                        elseif ($f == 11)
                                            {
                                                "";
                                            }
                                        else
                                            {
                                                $mailmsg .= "<td><center>$data_array[$f]</center></td>";
                                            }

   
 
 автор: Trianon   (03.01.2008 в 18:32)   письмо автору
 
   для: Maxys   (03.01.2008 в 17:41)
 

я предложил вставить несколько другое.

   
 
 автор: Maxys   (04.01.2008 в 10:33)   письмо автору
 
   для: Trianon   (03.01.2008 в 18:32)
 

а да, спасибо всё теперь правильно работает, а теперь можете объяснить пожалуйста в чём разница между </tr> и </tr>\r\n?
я где то читал что \n это тот же <br> а \r ещё что то. Я просто этими \n\r никогда не пользовался.

   
 
 автор: sim5   (04.01.2008 в 11:02)   письмо автору
 
   для: Maxys   (04.01.2008 в 10:33)
 

Появление символов ! при отправке почты у вас, скорее всего связано с тем, что это штатное ограничение количества символов в одной строке от sendmail, которое по умолчанию равно 1015 символов, между 1015 и 1016 символами и т.д., будет появлятся ! (я так думаю).

Решнием это - обращение в техподдержку на увеличение длины строки, или выставить переносы строк, чаще 1015 символов, что вам и предложил Trianon.

   
 
 автор: Trianon   (03.01.2008 в 14:20)   письмо автору
 
   для: Maxys   (14.12.2007 в 14:48)
 

Тела прикрепленных файлов электронной почты .следует кодировать mime/base64
Тела самих сообщений вобщем-то тоже... как минимум, если они с длинными строками.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования