[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обработка данных через <Select Multiple>
Vikt0r
Помогите пожалуйста, совсем запутался...

как сделать, чтобы при выборе из формы Multiple записывалось в текстовую базу несколько значений?

есть свои наброски:

-------------------
text.dat:
1::test 1::
2::test 2::
3::test 3::
-------------------

PHP
<form method='post'>

<?
$file file('text.dat');
for(
$i=0$i<count($file); $i++)
{
$m explode("::"$file[$i]);
?>
<input type='text' name='nm[]' value='<?=$m[1];?>'><br>
<select name='rzd[]' multiple>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
</select><br>
<?
}
?>

<input type='submit' name='submit' value='ok'>

</form>

<?
if(isset($submit))
{
$nm $_POST['nm'];
$rzd $_POST['rzd'];

foreach(
$nm as $n)
{
print 
"$n <br>";
}

foreach(
$rzd as $r)
{
print 
"$r <br>";
}

}


Как видим, данные отображаются такого типа:

test 1
test 2
test 3
а тут уже идут те, что отображаются из select.

как можно записать такого типа:

ДАННЫЕ ИЗ SELECT::ТЕКСТ ИЗ INPUT

?

Спасибо за внимание!




Спустя 9 часов, 9 минут, 18 секунд (29.03.2009 - 10:01) Kuliev написал(а):
Vikt0r
Наверное и поля input можно просто записать в файл так как оно у вас одно.

А вот SELECT я думаю надо будет в цикле прогнать!
PHP
<?
 for (
$i 0$i count($_POST['nm']); $i++)
{
   
    
// Записываем в файл

}


Спустя 1 час, 30 минут, 26 секунд (29.03.2009 - 11:32) Vikt0r написал(а):
Цитата (Kuliev @ 29.03.2009 - 07:01)
Vikt0r
Наверное и поля input можно просто записать в файл так как оно у вас одно.

А вот SELECT я думаю надо будет в цикле прогнать!
PHP
<?
 for ($i = 0; $i < count($_POST['nm']); $i++)
{
   
    
// Записываем в файл

}

Полей будет несколько, это я к примеру вам привел один Input и Select...

когда делаю два цикла вместе, отображает не так как хочется (

PHP
<?
if(isset(
$submit))
{
$nm = $_POST['nm'];
$rzd = $_POST['rzd'];

 for ($k = 0; $k < count($file); $k++)
{
$kk = $nm[$k];

foreach(
$rzd as $r)
{
print "$r - $kk<br>";
}

}
}


Нужно, чтобы передавало несколько значений по ячейке INPUT, типа ячейка

test 1::значения: 1, 2::другие ячейки input, если есть...
test 2::значения 3, 4::другие ячейки input, если есть...
test 3::значения 2, 2::другие ячейки input, если есть...

и т.д.

Спустя 36 минут, 13 секунд (29.03.2009 - 12:08) sergeiss написал(а):
Вот смотри...
У тебя есть массив элементов с именем nm, и массив элементов с именем rzd. Вот только что содержится в rzd? Судя по твои распечаткам, ты там ожидаешь увидеть величину. А нифига! Там будет массив. То есть, rzd - двумерный массив. По той простой причине, что у тебя множественный выбор сделан.


PHP
$nm $_POST['nm'];
$rzd $_POST['rzd'];

// далее учитываем, что количество элементов в массивах одинаковое, и индексация элементов массивов $nm $rzd коррелирует

$num=count$nm );

for( 
$i=0$i<$num$i++ )
{
  
$rzd_str='';
  foreach( 
$rzd[$i] as $rzd_val )
  {
    if( 
strlen$rzd_str ) != $rzd_str .= ', ';
    
$rzd_str .= $rzd_val;
  }
  echo 
$nm[i] .'::'$rzd_str .'<br>';
}

Спустя 18 минут, 4 секунды (29.03.2009 - 12:26) Vikt0r написал(а):
Цитата (sergeiss @ 29.03.2009 - 09:08)
Вот смотри...
У тебя есть массив элементов с именем nm, и массив элементов с именем rzd. Вот только что содержится в rzd? Судя по твои распечаткам, ты там ожидаешь увидеть величину. А нифига! Там будет массив. То есть, rzd - двумерный массив. По той простой причине, что у тебя множественный выбор сделан.


PHP
$nm = $_POST['nm'];
$rzd = $_POST['rzd'];

// далее учитываем, что количество элементов в массивах одинаковое, и индексация элементов массивов $nm $rzd коррелирует

$num=count( $nm );

for(
 $i=0; $i<$num; $i++ )
{
  $rzd_str='';
  foreach( $rzd[$i] as $rzd_val )
  {
    if( strlen( $rzd_str ) != 0 ) $rzd_str .= ', ';
    $rzd_str .= $rzd_val;
  }
  echo $nm[$i] .'::'. $rzd_str .'<br>';
}

Где-то у вас опечатка, текст из Input отображается. а из Select не хочет...

Спустя 1 час, 2 минуты, 14 секунд (29.03.2009 - 13:28) sergeiss написал(а):
Тут не опечатка, а поторопился я smile.gif

$rzd - это одномерный массив, содержащий все выбранные значения. Не годится он.

Надо, чтобы форма примерно так выглядела:

PHP
<input type='text' name='nm0' value='test1'>
<
select name='rzd0[]' multiple size="3">
<
option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select><br>

<
input type='text' name='nm1' value='test2'>
<
select name='rzd1[]' multiple size="3">
<
option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select><br>

<
input type='text' name='nm2' value='test3'>
<
select name='rzd2[]' multiple size="3">
<
option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select><br>


То есть, надо получить четкое соответствие между элементом с именем nm и элементом с именем rzd. Это часть имени и для nm, и для rzd, состоящая из цифр.
Я бы рекомендовал второй вариант. Потому что в первом могут быть некоторые "накладки", т.к. индексы массивов назначаются автоматически. Во втором же случае мы полностью контролируем процесс.
Далее надо пройти по всем элементам массива POST, выцепляя все элементы с именем nm и цифрами в конце имени. Предполагаем, что для каждого из них существует элемент с именем rzd и такими же цифрами.
В коде это будет так :
PHP
foreach( $_POST as $k => $val )
{
  // проверяем имя ключа
  if( substr($k,0,2) == 'nm' )
  { 
    $num
=intval( substr( $k, 2 ) );
    $rzd_str='';
    $rzd="rzd$num";
    foreach( $_POST[$rzd] as $key => $rzd_val )
    {
      if( strlen( $rzd_str ) != 0 ) $rzd_str .= ',';
      $rzd_str .= $rzd_val;
    }
    echo "$val for $num : $rzd_str<br>";
  }
}

Этот код проверенный, рабочий smile.gif

PS. Преимущества такого подхода - "индексы" могут быть любые числа, вовсе не обязательно, что начинающиеся с нуля. И они могут идти не подряд.

Спустя 2 часа, 40 минут, 31 секунда (29.03.2009 - 16:09) Vikt0r написал(а):
Если не сложно, обясните пожалуйста еще, где нужно присвоить остальные переменные в форме, то есть имеем к примеру:

HTML
<input type='text' name='nm0' value='test1'>

<input type='text' name='mm0' value='New test 1'>

<select name='rzd0[]' multiple size="3">
<option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select><br>

<input type='text' name='nm1' value='test2'>

<input type='text' name='mm1' value='New test 2'>

<select name='rzd1[]' multiple size="3">
<option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select><br>

<input type='text' name='nm2' value='test3'>

<input type='text' name='mm2' value='New test 2'>

<select name='rzd2[]' multiple size="3">
<option value='1'>1</option><option value='2'>2</option><option value='3'>3</option></select><br>


то есть нужно, чтобы выводилось такого типа:

HTML
test 1 for 1 : 1, 2 : New test 1
test 2 for 2 : 2, 2 : New test 2
test 3 for 3 : 1, 1, 2 : New test 3


Как видим, добавили просто еще одну строку input.

Пробовал в вашем коде поисправлять, изображает немного по другому:

HTML
test 1 for 1 : 1, 2 :
New test 1 ::
test 2 for 2 : 2, 2 :
New test 2 ::
test 3 for 3 : 1, 1, 2 :
New test 3 ::


Не в одну строку получается...

PHP
<?
if(isset(
$submit))
{
while(list(
$k, $val, $tval) = each($_POST))
{

  // проверяем имя ключа
  if( substr($k,0,2) == 'nm' )
  { 
    $num
=intval( substr( $k, 2 ) );
    $rzd_str='';
    $rzd="rzd$num";
while(list(
$key, $rzd_val, $rzd_valt) = each($_POST[$rzd]))
{
      if(strlen( $rzd_str ) != 0 ) $rzd_str .= ',';
      $rzd_str .= $rzd_val;
    }
    echo "$val : $rzd_str : $rzd_valt<br>";
  }
}
}

Спустя 2 года, 5 месяцев, 10 дней, 14 часов, 21 минута, 29 секунд (10.09.2011 - 06:30) greefon4eg написал(а):
Люди, всем привет. Откопаю я гробик и задам вопрос, т.к. у меня похожая ситуация. Есть форма с полями и несколько из этих полей работают, как select multiple, к примеру вот:

<div class="MultiSelect">
<input
type="checkbox" id="box0" name="neispravnost[]" value="Полотно повреждено" checked="checked" /> <label for="box0">Полотно повреждено</label>
<input
type="checkbox" id="box1" name="neispravnost[]" value="Полотно не двигается" /> <label for="box1">Полотно не двигается</label>
<input
type="checkbox" id="box2" name="neispravnost[]" value="Двигатель не работает" /> <label for="box2">Двигатель не работает</label>
<input
type="checkbox" id="box3" name="neispravnost[]" value="Оборван трос" /> <label for="box3">Оборван трос</label>
<input
type="checkbox" id="box4" name="neispravnost[]" value="Сломан замок" /> <label for="box4">Сломан замок</label>
<input
type="checkbox" id="box5" name="neispravnost[]" value="Короб поврежден" /> <label for="box5">Короб поврежден</label>
<input
type="checkbox" id="box6" name="neispravnost[]" value="Направляющие сломаны" /> <label for="box6">Направляющие сломаны</label>
<input
type="checkbox" id="box7" name="neispravnost[]" value="Другое" /> <label for="box7">Другое</label>
</div>


Т.е. когда почеканы поля, данные загоняются в массив. Я совсем начинающий валенок и не могу допереть, что мне написать в обработчике, чтобы на почту приходили почеканые данные, а не слово "Array"

Вот код обработчика:

<?php
header("Refresh: 0; URL=http://".$_SERVER['HTTP_HOST']);
header('Content-Type: text/html; charset=utf-8');

for($i=0; $i=count($neispravnost); $i++){$elem = htmlspecialchars($neispravnost[i]);}

if (isset($_POST['privod'])) {
$privod = $_POST['privod'];
if ($privod == '') unset($privod);
}
if (isset($_POST['neispravnost'])) {
$neispravnost = $_POST['neispravnost'];
if ($neispravnost == '') unset($neispravnost);
}
if (isset($_POST['zamena'])) {
$zamena = $_POST['zamena'];
if ($zamena == '') unset($zamena);
}
if (isset($_POST['rabota'])) {
$rabota = $_POST['rabota'];
if ($rabota == '') unset($rabota);
}
if (isset($_POST['email'])) {
$email = $_POST['email'];
if ($email == '') unset($email);
}

/* Проверяем заполнены ли все поля */
if (isset($privod) && isset($neispravnost) && isset($zamena) && isset($rabota) && isset($email)) {

/* Убираем все лишние пробелы и переносы строк, а также преобразуем все теги HTML в символы*/
$privod = htmlspecialchars(trim($privod));
$neispravnost = htmlspecialchars(trim($neispravnost));
$zamena = htmlspecialchars(trim($zamena));
$rabota = htmlspecialchars(trim($rabota));
$email = htmlspecialchars(trim($email));

/* Проверяем правильность ввода email-адреса */
if(!preg_match("/[0-9a-z_.-]+@[0-9a-z_^\.-]+\.[a-z]{2,5}/i", $email)){
echo "<script type=\"text/javascript\">alert( \"Неправильный формат e-mail адреса!\");</script>";
}


/* Формируем сообщение */
$address = "xxxxx@xxxx.xx";
$sub = "Тема сообщения";
$mes = "Отправитель: $email \nТип привода: $privod \nНеисправность: $elem \nДетали на замену: $zamena \nУсловия работы: $rabota \n";

/* Отправка сообщения */
$verify = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email");
if ($verify == 'true'){
echo "<script type=\"text/javascript\">alert( \"Спасибо, ваша заявка отправлена\");</script>";
}
else {
echo "<script type=\"text/javascript\">alert( \"Сообщение не отправлено!\");</script>";
}

}

else{
echo "<script type=\"text/javascript\">alert( \"Вы заполнили не все поля!\");</script>";
}
?>
Быстрый ответ:

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