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

Форум PHP

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

 

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

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

тема: Запись массива из POST
 
 автор: Black__Hole   (04.08.2009 в 18:27)   письмо автору
 
 

Уважаемые, подскажите, пожалуйста!
В форме есть список с multiple, имя задано так, чтобы выбор формировался в массив (name = "id[]").
В файле-обработчике формы указаны небезызвестные
foreach($_POST["id"] as $key=>$value)
    echo "$key = $value <br>";


А вот как бы сделать так, чтобы непосредственный вывод выбранного пользователем не происходил, а данные массива аккуратно записывались в отдельные переменные для их последующей пересылки с помощью функции mail?

  Ответить  
 
 автор: ??   (04.08.2009 в 18:45)
 
   для: Black__Hole   (04.08.2009 в 18:27)
 

$array = array();

foreach($_POST["id"] as $value) 
array_push($array, $value);
??

  Ответить  
 
 автор: Black__Hole   (04.08.2009 в 19:00)   письмо автору
 
   для: ??   (04.08.2009 в 18:45)
 

Извините, я в массивах совсем не разбираюсь.
После реализации Вашего примера при подстановке в функцию mail переменной $value выводится только последнее выбранное пользователем значение (всего на выбор 9 значений списка), а не все.

  Ответить  
 
 автор: ,,,,   (04.08.2009 в 19:18)
 
   для: Black__Hole   (04.08.2009 в 19:00)
 

array_push() нормально вставляет значение переменной в конец массива
<pre><?php
if (isset($_POST["id"]) && is_array($_POST["id"])) {
 
$array = array(); 
#        print_r($_POST["id"]);
 
foreach($_POST["id"] as $value) {
   
$value intval($value);
    
array_push($array$value);
}
        
print_r($array);
}
?></pre>
<hr/>
<form action="" method="post">
   <select size="3" multiple name="id[]">
    <option disabled>Выберите чего-нибудь</option>
    <option value="1">первое</option>
    <option value="2">второе</option>
    <option value="3">третье</option>
    <option value="4">четвёртое</option>
   </select>
   <input type="submit" value="send">
  </form>



может вам нужна строка вместо массива,
тогда просто используйте
$string .= (empty($string))? $value:  ', ' $value;

  Ответить  
 
 автор: ,,,,,   (04.08.2009 в 19:21)
 
   для: Black__Hole   (04.08.2009 в 19:00)
 

или просто , без выкрутасов с () ? : ;

  Ответить  
 
 автор: Black__Hole   (04.08.2009 в 20:09)   письмо автору
 
   для: ,,,,,   (04.08.2009 в 19:21)
 

Мне лишь нужно отправить на e-mail информацию о том, что было выбрано пользователем из multiple списка:

$tomail = "mail@mail.ru";
       $sub = "Состоялся выбор";
       $mes = "Пользователь выбрал:  далее идут значения, выбранные из multiple списка;
                
           $send = mail ($tomail, $sub, $mes, "Content-type:text/plain; charset = utf-8");


То есть на данный момент я столкнулась с проблемой отправки массива выбранных значений.

  Ответить  
 
 автор: ,,,,,,   (04.08.2009 в 20:39)
 
   для: Black__Hole   (04.08.2009 в 20:09)
 

вариантов много . c циклом
<?
$mes 
'Пользователь выбрал:';

 while(
$str array_pop($_POST["id"])) 
    
$mes  .= ' ' intval($str);
    
$mes  .= ' и т.д...';
или без цикла

если без цикла, сначала каким-нибудь array_map() или array_walk()
проверять и устанавливать значения, можно и сразу implode, с последующей обработкой
, мне кажется лучше так или while(.......array_shift()),
только если в массиве будет '0' , чтобы цикл не оборвался нужно сравнивать как !== NULL значение возвращаемое array_pop() или array_shift()

  Ответить  
 
 автор: Black__Hole   (04.08.2009 в 22:34)   письмо автору
 
   для: ,,,,,,   (04.08.2009 в 20:39)
 

Я, вероятно, настолько криво объясняю, что самые элементарные решения ищутся долгими часами.. :(
Спасибо Вам за помощь!
А решила вопрос таким образом:

if(isset($_POST["id"]) && $_POST["id"]) {
$selected = "";
for($i = 0; $i < count($_POST["id"]); $i++)
$selected .= $_POST["id"][$i]; }

$mes = "Было выбрано следующее: $selected";

  Ответить  
 
 автор: .........   (04.08.2009 в 23:33)
 
   для: Black__Hole   (04.08.2009 в 22:34)
 

просто люди не безотрывно за мониторами, отрывают и отрываюсь ;)
а с пониманием у меня всегда было туговато
if(isset($_POST["id"]) && $_POST["id"])


не совсем правильно if ( переменная ) может быть 0, '0', '', NULL, FALSE чтобы проверка не сработала , а в случае с массивом там Array , даже если он пустой или заполнен нулями

  Ответить  
 
 автор: ,,,,,,   (04.08.2009 в 23:41)
 
   для: .........   (04.08.2009 в 23:33)
 

чёт не то сказал :)

$array = array(NULL); сработало
а $array = array(); не сработало

значит всё почти правильно , извиняюсь

  Ответить  
 
 автор: .......   (04.08.2009 в 21:27)
 
   для: Black__Hole   (04.08.2009 в 20:09)
 

обход массива без его изменения
<?
while((list(,$str) = each($_POST["id"])) !== FALSE)
    
$mes  .= ' ' intval($str);

  Ответить  
Rambler's Top100
вверх

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