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

Форум PHP

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

 

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

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

тема: explode
 
 автор: Хулиган   (26.06.2006 в 22:32)   письмо автору
 
 

Передаю в окно данные через get. Получаю и пробую распарсить их, но explode ставит подножку :(
В качестве данных передаются строки вида 001_003_002_1, склееные через <br>.


<?
$senddata
=$_GET["send"];
$tovar_arr explode('<br>'$senddata);
foreach(
$tovar_arr as $tovar){
   echo (
$tovar);   //вот тут explode работает нормально, выдает строку 001_003_002_1
   //пытаюсь разбить эту строку по "_":
   
$tovar_subarr explode('_'$tovar);
   
//а тут отфутболивает: элемент массива $tovar_subarr с индексом 0 существует, а остальные
   //индексы ругается: undefined offset.
   
$tbl_name "'".$tovar_subarr[0]."'";
   
$cat_id "'".$tovar_subarr[1]."'";
   
$tov_id "'".$tovar_subarr[2]."'";
   
$tov_count $tovar_subarr[3]; 

?>


В чем фокус?

   
 
 автор: Ziq   (26.06.2006 в 22:54)   письмо автору
 
   для: Хулиган   (26.06.2006 в 22:32)
 

---

   
 
 автор: cheops   (26.06.2006 в 23:15)   письмо автору
 
   для: Хулиган   (26.06.2006 в 22:32)
 

Напишите вместо
<?php
$senddata
=$_GET["send"];
?>

так
<?php
$senddata 
="001_003_002_1<br>"
?>

ситуация та же?

   
 
 автор: valenok   (27.06.2006 в 00:02)   письмо автору
 
   для: Хулиган   (26.06.2006 в 22:32)
 


<?
$senddata
='003_001_002_1<br>'
$tovar_arr explode('<br>'$senddata); 
foreach(
$tovar_arr as $tovar){ 
   if(empty(
$tovar)){continue;}
   
$tovar_subarr=explode('_',$tovar);
  
   
$tbl_name "'".$tovar_subarr[0]."'"
   
$cat_id "'".$tovar_subarr[1]."'"
   
$tov_id "'".$tovar_subarr[2]."'"
   
$tov_count $tovar_subarr[3]; 

?>

   
 
 автор: Хулиган   (27.06.2006 в 01:04)   письмо автору
 
   для: valenok   (27.06.2006 в 00:02)
 

Если присвоить переменной непосредственно $senddata ="001_003_002_1<br>"; та же ошибка. Проверка на empty тоже ничего не даёт - переменная не пустая.
А если заменить
$tovar_subarr = explode('_', $tovar);
на
$tovar_subarr = explode('_', '001_003_002_1<br>');
то ошибки нет.

При этом непосредственно перед explode стоит echo ($tovar), и выводит 001_003_002_1<br>

Странно, что теперь, самому разбить строку через strtok?

   
 
 автор: cheops   (27.06.2006 в 01:47)   письмо автору
 
   для: Хулиган   (27.06.2006 в 01:04)
 

Он именно 001_003_002_1<br> или 001_003_002_1 и перевод строки? Посмотрите исходный код страницы - символы < и > там не изменены?

   
 
 автор: Хулиган   (27.06.2006 в 02:41)   письмо автору
 
   для: cheops   (27.06.2006 в 01:47)
 

В html-коде <br> нету. Да и не должно его там быть: предыдущий explode разбивает по <br> и ликвидирует его. В html страницы стоит 001_003_002_1. А второй explode (тот, который не работает), разбивает по символу подчёркивания _.
Поэтому <br> есть или его нет - не имеет значения. Если он есть, то последний элемент массива будет "1<br>". Но до него дело не доходит: уже на втором элементе "003" вылазит ошибка.

В принципе разбиение сделал вручную очень просто:

          $tbl_name = substr($tovar, 0, 3);
          $cat_id = substr($tovar, 4, 3);
          $tov_id = substr($tovar, 8, 3);
          $tov_count = substr($tovar, 12, 3);

но хотелось бы понять, где грабли, чтобы не наступить в случае, где substr не поможет.

   
 
 автор: Хулиган   (27.06.2006 в 03:14)   письмо автору
 
   для: cheops   (27.06.2006 в 01:47)
 

А может, просто у меня php сломался? Вот ещё один баг нашёл:
print htmlspecialchars(printf("%.2f", $sum)); - выводит 3 знака после запятой вместо двух :(
приходится форматтер описывать как "%.1f", чтобы было 2 знака...

   
 
 автор: valenok   (27.06.2006 в 09:46)   письмо автору
 
   для: Хулиган   (27.06.2006 в 03:14)
 

У меня всё работает.
Какие ошибки тебе выдаёт?
И уровня E~notice тоже..

   
 
 автор: cheops   (27.06.2006 в 12:00)   письмо автору
 
   для: Хулиган   (27.06.2006 в 03:14)
 

Хм... а у вас какая версия PHP?

   
 
 автор: Хулиган   (27.06.2006 в 15:42)   письмо автору
 
   для: cheops   (27.06.2006 в 12:00)
 

на printf никаких ошибок не выдаёт, просто работает неправильно.
А php у меня 4.4.2, устанавливал в составе Denwer 2.

P.S.
Ещё глюк c printf: Переменная $price грузится из базы данных из поля decimal(10,2). значение - 125.00.
printf("%.1f", $price*1) выдаёт 125.05 :-( Откуда прилепилось 0.05 ?

Пробовал переставить php - тот же результат.
Рисовать свои реализации explode и printf ?

   
Rambler's Top100
вверх

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