| |
|
|
| | Передаю в окно данные через 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];
}
?>
|
В чем фокус? | |
| |
|
|
| |
|
|
| |
для: Хулиган
(26.06.2006 в 22:32)
| | | --- | |
| |
|
|
| |
|
|
| |
для: Хулиган
(26.06.2006 в 22:32)
| | | Напишите вместо
<?php
$senddata=$_GET["send"];
?>
|
так
<?php
$senddata ="001_003_002_1<br>";
?>
|
ситуация та же? | |
| |
|
|
| |
|
|
| |
для: Хулиган
(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];
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: 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? | |
| |
|
|
| |
|
|
| |
для: Хулиган
(27.06.2006 в 01:04)
| | | Он именно 001_003_002_1<br> или 001_003_002_1 и перевод строки? Посмотрите исходный код страницы - символы < и > там не изменены? | |
| |
|
|
| |
|
|
| |
для: 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 не поможет. | |
| |
|
|
| |
|
|
| |
для: cheops
(27.06.2006 в 01:47)
| | | А может, просто у меня php сломался? Вот ещё один баг нашёл:
print htmlspecialchars(printf("%.2f", $sum)); - выводит 3 знака после запятой вместо двух :(
приходится форматтер описывать как "%.1f", чтобы было 2 знака... | |
| |
|
|
| |
|
|
| |
для: Хулиган
(27.06.2006 в 03:14)
| | | У меня всё работает.
Какие ошибки тебе выдаёт?
И уровня E~notice тоже.. | |
| |
|
|
| |
|
|
| |
для: Хулиган
(27.06.2006 в 03:14)
| | | Хм... а у вас какая версия PHP? | |
| |
|
|
| |
|
|
| |
для: 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 ? | |
| |
|
|