[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: передача данных из формы в массив
lexu
Добрый день.

<?php

$q = 6;

/*
СОЗДАНИЕ ТАБЛИЦЫ
*/

echo "<form method='post'>
<table border='' cellpadding='0' cellspacing='0'>"
;
for ($i=0; $i<=$q; $i++) {
echo "<tr><td style='width:50px; text-align:center'>".$i."</td>";
for ($j=0; $j<7; $j++) {
echo "<td width='10px'><input type='text' name='costs[".$i."][".$j."]' style='width:50px; text-align:center; border:0px'></td>";
} echo "</tr>";
}
echo "</table><br>
<input type='submit' name='c_submit' value='Старт'><br><br>
</form>"
;

/*
ПЕРЕДАЧА ДАННЫХ
*/

for ($i=0; $i<$q; $i++) {
for ($j=0; $j<7; $j++) {
$costs[$i][$j] = isset($_POST['costs[$i][$j]'])?$_POST['costs[$i][$j]']:null;
}
}


Не передаются значения из формы в двухмерныый массив.
Ошибка в name текстового inputa, либо при передаче данных?
Не могли бы вы немного разъяснить?

Спасибо.



Спустя 1 час, 18 минут, 19 секунд (28.08.2010 - 13:02) Rivalryzerg написал(а):
var_dump($_POST);
посмотрите структуру пришедших данных

Спустя 53 минуты, 4 секунды (28.08.2010 - 13:55) lexu написал(а):
array

не передаются данные в пост?

Спустя 4 минуты, 30 секунд (28.08.2010 - 13:59) Rivalryzerg написал(а):
Ладно, вот на блюдце:

Обрабатывать такой массив нужно как $_POST['costs'][$i][$j].
Отправленные поля формы в виде массива name="value[check][10]" автоматически преобразуют в полноценный массив $_POST['value']['check'][10] на стороне сервера

Спустя 27 минут, 33 секунды (28.08.2010 - 14:27) lexu написал(а):
Спасибо smile.gif


Спустя 2 часа, 4 минуты, 47 секунд (28.08.2010 - 16:32) lexu написал(а):
а value= '$value[check][10]' этой же формы такое?

данные в POST передаются, но не работает вывод:

for ($i=0; $i<$q; $i++) { 
for ($j=0; $j<7; $j++) {
echo $costs[$i][$j];
}
}


в чем проблема?

Спустя 5 минут, 40 секунд (28.08.2010 - 16:37) Romms написал(а):
$costs= isset($_POST['costs'])?$_POST['costs']:NULL;

Спустя 16 минут, 5 секунд (28.08.2010 - 16:53) lexu написал(а):
Цитата
$costs= isset($_POST['costs'])?$_POST['costs']:NULL;


Я же говорю: данные передаются в массив и эта строчка у меня есть.. вот только не выводятся оттуда.

Спустя 6 минут, 17 секунд (28.08.2010 - 17:00) Romms написал(а):
lexu, жаль, но тут экстрасенсов нет, и мы невидим какой у тебя код!

Цитата
вот только не выводятся оттуда.

разработчики РНР решили пошутить biggrin.gif laugh.gif

Спустя 1 минута, 11 секунд (28.08.2010 - 17:01) lexu написал(а):
for ($i=0; $i<$q; $i++) { 
for ($j=0; $j<7; $j++) {
echo $costs[$i][$j];
}
}


вот код.. его я уже писал.
веселые разработчики, но проблема думаю не в их чувстве юмора smile.gif

Спустя 2 минуты, 3 секунды (28.08.2010 - 17:03) Romms написал(а):
Ну так где там
Цитата
$costs= isset($_POST['costs'])?$_POST['costs']:NULL;

????!!!!!

lexu, Может код ВЕСЬ покажешь?!

Спустя 4 минуты, 40 секунд (28.08.2010 - 17:07) lexu написал(а):
<?php



$q = 6;

for ($i=0; $i<$q; $i++) {
for ($j=0; $j<7; $j++) {
$costs[$i][$j] = isset($_POST['costs'][$i][$j])?$_POST['costs'][$i][$j]:null;
}
}


echo "<form method='post'>
<table border='' cellpadding='0' cellspacing='0'>
"
;
for ($i=0; $i<=$q; $i++) {
echo "<tr><td style='width:50px; text-align:center'>".$i."</td>";
for ($j=0; $j<7; $j++) {
echo "<td width='10px'><input type='text' name='costs[$i][$j]' style='width:50px; text-align:center; border:0px' ></td>";
} echo "</tr>";
}
echo "</table><br>
<input type='submit' name='c_submit' value='Старт'><br><br>
</form>"
;

for ($i=0; $i<=$q; $i++) {
for ($j=0; $j<7; $j++) {
echo $cost[$i][$j];
}
}


// var_dump($_POST);

Спустя 4 минуты, 8 секунд (28.08.2010 - 17:12) Romms написал(а):
Цитата
 for ($i=0; $i<$q; $i++) { 
  for ($j=0; $j<7; $j++) {
  $costs[$i][$j] = isset($_POST['costs'][$i][$j])?$_POST['costs'][$i][$j]:null;
  }
}

1. Где ты берешь $i, $j?
2. Про foreach не слыхал?!
3. НАФИГА тебе весь массив перебирать???!!!

Спустя 46 минут, 10 секунд (28.08.2010 - 17:58) lexu написал(а):
потому что мне нужны все данные массива..
и все они заполняются.

Спустя 6 минут, 25 секунд (28.08.2010 - 18:04) Romms написал(а):
бля... Вот этот код
Цитата
for ($i=0; $i<$q; $i++) {
  for ($j=0; $j<7; $j++) {
   $costs[$i][$j] = isset($_POST['costs'][$i][$j])?$_POST['costs'][$i][$j]:null;
  }
}

Заменит одна строчка...
$costs= isset($_POST['costs'])?$_POST['costs']:NULL;

НО она ресурсов намного меньше использует, и время экономит...
Цитата

1. Где ты берешь $i, $j?
2. Про foreach не слыхал?!

???

Спустя 1 час, 20 минут, 43 секунды (28.08.2010 - 19:25) lexu написал(а):
таблица ($q x 7) заполняется данными:
$i - номер строки
$j - номер столбца

Про foreach слыхал.. но все равно не вижу, как обойтись без for, когда нужно переходить на новую строку таблицы.

$costs= isset($_POST['costs'])?$_POST['costs']:NULL;
За строчку спасибо.

Спустя 29 минут, 58 секунд (28.08.2010 - 19:55) Romms написал(а):
Цитата
Про foreach слыхал.. но все равно не вижу, как обойтись без for, когда нужно переходить на новую строку таблицы.

Либо плохо слыхал, либо думать не пришлось...

Цитата
За строчку спасибо.

Та нет за что! smile.gif Я ее тебе ещё с первого поста "тыкаю" wink.gif

Спустя 21 минута, 2 секунды (28.08.2010 - 20:16) lexu написал(а):
foreach так foreach.
Раз можно значит можно.

Спустя 2 минуты, 44 секунды (28.08.2010 - 20:19) Romms написал(а):
Цитата
foreach так foreach.
Раз можно значит можно.

ДА! smile.gif
Пример:
foreach($MassivE as $array)
{
foreach($array as $index=>$value)
{

}
}

Спустя 9 минут, 5 секунд (28.08.2010 - 20:28) lexu написал(а):
да, адаптировал, работает.
спасибо huh.gif

Спустя 2 минуты, 52 секунды (28.08.2010 - 20:31) Romms написал(а):
Цитата
спасибо huh.gif

Пожалуйста! Спрашивай ещё!

Спустя 19 минут, 38 секунд (28.08.2010 - 20:50) lexu написал(а):
smile.gif спрашиваю:
foreach то работает отлично при заполнении, но а что если мне нужно работать с конкрентными переменными массива, тоесть:

 $costs[$i][4]= !empty($costs[$i][1])?(costs[$i][1]/$i):$costs[$i][4];

и наоборот
 $costs[$i][1]= !empty($costs[$i][4])?($costs[$i][1]*$i):$costs[$i][1];

Спустя 8 минут, 58 секунд (28.08.2010 - 20:59) lexu написал(а):
Добавил эти условия перед заполнением таблицы с вложенным циклом for { for {}},
а foreach заполняет.

Спустя 1 час, 46 минут, 47 секунд (28.08.2010 - 22:46) Romms написал(а):
lexu, честно говоря - я не понял проблему, может твой код нам поможет? smile.gif

Спустя 2 часа, 6 минут, 50 секунд (29.08.2010 - 00:53) lexu написал(а):
for ($i=0; $i<=$q; $i++) { echo "<tr><td style='width:50px; text-align:center'>".$i."</td>";
for ($j=0; $j<7; $j++) {

$con = array();

$con = (!empty($costs[$i]['2'])&& empty($con))?$costs[$i]['2']:$con;
$costs[$i]['2'] = $con;

if ($i == 0) {
$costs[$i]['3'] = $costs[$i]['4'] = $costs[$i]['5']='-';
$costs[$i]['6'] = (!empty($costs[$i]['0'])&& empty($costs[$i]['6']))?$costs[$i]['0']:$costs[$i]['6'];
$costs[$i]['0'] = (!empty($costs[$i]['6'])&& empty($costs[$i]['0']))?$costs[$i]['6']:$costs[$i]['0'];
} else {
$costs[$i]['3'] = (!empty($costs[$i]['0']) && empty($costs[$i]['3']))?round(($costs[$i]['0']/$i),2):$costs[$i]['3'];
$costs[$i]['0'] = (!empty($costs[$i]['3'])&& empty($costs[$i]['0']))?round(($costs[$i]['3']*$i),2):$costs[$i]['0'];

}}


Имеет этот код право на существование? Тоесть рабочий ли он?
У меня работал одно время, а потом стал выбивать ошибку Fatal error: Cannot use string offset as an array in
Я так понимаю строковая переменная записывается в массив и в этом проблема.
Можна ли как-то решить, если код выше нужен?


Спустя 9 часов, 39 минут, 3 секунды (29.08.2010 - 10:32) Romms написал(а):
1. ты пропустил (невставил) одну душку }
2. Форматирование табами - плохо!
3. Форматирование вообще плохое unsure.gif
4. не понимаю сути этой строчки:
$con = (!empty($costs[$i]['2'])&& empty($con))?$costs[$i]['2']:$con;

если не оглашёна переменная $costs[$i]['2'] и оглашённая $con тогда $con=(НЕ оглашённой $costs[$i]['2']), иначе $con=$con???
это самое касается и иных строчок
Вставь
	error_reporting(E_ALL);
И тебе покажется куча нотиков!(мен так кажется)
Цитата
У меня работал одно время, а потом стал выбивать ошибку Fatal error: Cannot use string offset as an array in

В какой строке?
Цитата
Можна ли как-то решить, если код выше нужен?

Собственно, какая задача кода что выше?

Спустя 3 часа, 28 минут, 58 секунд (29.08.2010 - 14:01) lexu написал(а):
Задача в том, чтобы пользователь задал всего несколько данных в массив.. а по алгоритму (задача кода, представленного выше) заполнились все остальные ячейки таблицы.

1. Дужка есть, я когда вставлял код сюда - она потерялась.

2.
$con = (!empty($costs[$i]['2'])&& empty($con))?$costs[$i]['2']:$con;

Цитата
если не оглашёна переменная $costs[$i]['2'] и оглашённая $con тогда $con=(НЕ оглашённой $costs[$i]['2']), иначе $con=$con???

разве не наоборот? если не не оглашена (тоесть оглашена)$costs[$i]['2'] и не оглашена $con, тогда $con = оглашенной $costs[$i]['2'];
$costs[$i]['2'] - константа.. если пользователь задал хотя бы одну из них, то и все принимают это значение..

3. В строчке, где
$costs[$i]['2'] = $con;

А работал до перезагрузки компьютера

Прошу прощение за табы, исправлюсь smile.gif

Спустя 16 минут, 11 секунд (29.08.2010 - 14:17) Romms написал(а):
Цитата
разве не наоборот? если не не оглашена (тоесть оглашена)$costs[$i]['2'] и не оглашена $con, тогда $con = оглашенной $costs[$i]['2'];

ой, да... глючу unsure.gif

Цитата
3. В строчке, где

$costs[$i]['2'] = $con;

ну так)

и значит если условие (!empty($costs[$i]['2'])&& empty($con)) неверное то
$con [b]==[/b] array(); 

а значит
$costs[$i]['2'] = array(); 

вот оно и говорит вам
Цитата
Фатальная ошибка: Не удается использовать смещения строки в виде массива


по моему, это из-за этого smile.gif

Спустя 28 минут, 7 секунд (29.08.2010 - 14:45) lexu написал(а):
что же нужно сделать, чтобы эти 2 строки работали?
$con = (!empty($costs[$i]['2'])&& empty($con))?$costs[$i]['2']:$con;
$costs[$i]['2'] = $con;

Спустя 3 часа, 51 минута, 8 секунд (29.08.2010 - 18:36) lexu написал(а):
странно, код работает, как нужно, тоесть заполняет таблицу без ошибок до обновление страницы (причем нажатие кнопки ввида submit на работоспособность не влияет), только если открыть страницу по новой или enter в адресной строке..

ошибка на все строки вида:
 $costs[$i]['3'] = (!empty($costs[$i]['0']) && empty($costs[$i]['3']))?round(($costs[$i]['0']/$i),2):$costs[$i]['3']; 

элемент массива передает значение элементу массива, в чем проблема?

может проблема в этой строке?
$costs = isset($_POST['costs'])?$_POST['costs']:'null';

Спустя 7 минут, 15 секунд (29.08.2010 - 18:44) lexu написал(а):
Заменил это:
$costs = isset($_POST['costs'])?$_POST['costs']:'null';

на это:
for ($i=0; $i<=$q; $i++) { 
for ($j=0; $j<7; $j++) {
$costs[$i][$j] = isset($_POST['costs'][$i][$j])?$_POST['costs'][$i][$j]:'';
}
}

и всё работает.
Ресурсоёмкостью придеться жертвовать. Нет ли другого решения проблемы?

Спустя 7 минут, 41 секунда (29.08.2010 - 18:51) Romms написал(а):
Цитата
Ресурсоёмкостью придеться жертвовать. Нет ли другого решения проблемы?

мне кажется нужно просто
$con = array(); 

заменить на
$con = ''; 

попробуй

Спустя 13 минут, 45 секунд (29.08.2010 - 19:05) lexu написал(а):
нет.. проблема не в нем, точнее не только в нём
ошибка на всех строках абсолютно..
я убирал их все по очереди и ошибка таже

эта срока вообще
$con = array();
не нужна

Спустя 4 минуты, 16 секунд (29.08.2010 - 19:09) lexu написал(а):
не скажешь, как передать значению <input> value элемент массива?

вот здесь:

есho "<input type='text' name='costs[$i][$j]' value='Вот здесь'>"


не нашел примера.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.