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

Форум PHP

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

 

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

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

тема: Вместо массива данных приходит array - как исправить?
 
 автор: relikt   (23.11.2007 в 19:27)   письмо автору
 
 

Помогите с проблемой.
Вот есть у меня следующая форма:

<form action="<?= $_SERVER['SCRIPT_NAME'?>" method="POST">
...
Тип:                     
<div class="checkbox">
<input type=hidden name="type[1]" value="0"><input type=checkbox name="type[1]" value="1"> 1<br>
<input type=hidden name="type[2]" value="0"><input type=checkbox name="type[2]" value="1"> 2<br>
<input type=hidden name="type[3]" value="0"><input type=checkbox name="type[3]" value="1"> 3<br>
<input type=hidden name="type[4]" value="0"><input type=checkbox name="type[4]" value="1"> 4<br>
....
<input type=submit value="go" name="go">
</form>


Задача такая, если пользователь выбрал один и более флажков, его выбор отправляется мне по почте. Если выбор не сделан, выводится

сообщение с ошибкой.

Обработчик я написал такой

<?
...
 if (@
$_REQUEST['type'])
{} 
 else {

        
$action ""
        
$error $error."<LI>Вы должны выбрать что заказываете</LI>\n";

}
...
##различные проверки на ошибки в
...

   if (empty(
$error) && empty($err)) 
    {

 if (@
$_REQUEST['type']) {
foreach (
$_REQUEST['type'] as $k=>$v) {
if(
$v) {
$k = array($k);

} } }

$valmail "ad@ad.ru";
$all "Выбраны следующие пункты $k";
$thm "Письмо";
$headers "From: admin@admin.ru";
mail($valmail$thm$all$headers);
    
    } 
}

?>

То есть пользователь выбирает опции, нажимает на кнопку, отправляется сообщение. Но еслм пользователь выбирает несколько флажков приходит сообщение array. как исправить?

   
 
 автор: Relikt   (23.11.2007 в 21:35)   письмо автору
 
   для: relikt   (23.11.2007 в 19:27)
 

Неужели этот скрипт такой сложный? Может есть другой вариан решения этой задачи?

   
 
 автор: mihdan   (23.11.2007 в 21:58)   письмо автору
 
   для: Relikt   (23.11.2007 в 21:35)
 

type[1] - так это и есть массив! А вы что хотели

   
 
 автор: Drago   (23.11.2007 в 21:59)   письмо автору
 
   для: Relikt   (23.11.2007 в 21:35)
 

Если я вас правильно понял, на мой взгляд, добавление срытых полей в форме - лишнее.
Исходя из этого, измените свой цикл

<?
foreach ($_REQUEST['type'] as $k=>$v) { 
if(
$v) { 
$k = array($k); 

} }
?>

на этот


<?
$str 
'';
$i 0;
foreach (
$_POST['type'] as $k => $v)
    {
    
$str .= $k.($i++ != count($_POST['type'])-',' '');
    }
?>


Теперь, вставляйте переменную $str в нужное вам место.


<?
$all 
"Выбраны следующие пункты $str";
?>

   
 
 автор: relikt   (24.11.2007 в 11:36)   письмо автору
 
   для: Drago   (23.11.2007 в 21:59)
 

Спасибо, что помогли. Все работает так как я хотел.

   
 
 автор: relikt   (24.11.2007 в 22:15)   письмо автору
 
   для: relikt   (24.11.2007 в 11:36)
 

Попробовал прикрутить ваш код к более сложной системе чекбоксов:

<script> 
function loock(e,f) { 
  for (i=0; i<f.length; i++) { 
    if (f[i].name != e.name && f[i].name.indexOf(e.name) != -1) { 
      if (e.checked)  f[i].disabled = false; 
        else f[i].disabled = true; 
    } 
  } 

</script> 

<form> 
<input type="checkbox" name="one" value="" onclick="loock(this, this.form)">One group<br> 
&nbsp;&nbsp;<input type="checkbox" name="one1" value="" disabled>1<br> 
&nbsp;&nbsp;<input type="checkbox" name="one2" value="" disabled>2<br> 
&nbsp;&nbsp;<input type="checkbox" name="one3" value="" disabled>3<br> 
<input type="checkbox" name="two" value="" onclick="loock(this, this.form)">Two group<br> 
&nbsp;&nbsp;<input type="checkbox" name="two1" value="" disabled>4<br> 
&nbsp;&nbsp;<input type="checkbox" name="two2" value="" disabled>5 
</form>


Теперь у меня такой вопрос, а возможно ли теперь подогнать ваш вариант к этому примеру. Задача всё та же, но к переменным добавляются числа.


foreach ($_POST['type'] as $k=>$v)
    {
$str .= $k.($i++ != count($_POST['type'])-1 ? ',' : '');
    } 

Можно ли этот кусок как то запустить в цикл, что бы к $_POST['type'] добавлялся номер?

   
 
 автор: sim5   (24.11.2007 в 22:26)   письмо автору
 
   для: relikt   (24.11.2007 в 22:15)
 

$_POST['type'] вы могли получить в первом случае, в этом случае у вас нет полей в форме с именем type. Укажите в форме имена как one[1], one[2] и т.д., и можете использовать этот же код, но для $_POST['one'], если вы затрудняетесь сделать иначе. Естественно таким же образом переименуйте и поля two.

   
 
 автор: relikt   (24.11.2007 в 22:48)   письмо автору
 
   для: sim5   (24.11.2007 в 22:26)
 

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

   
 
 автор: Drago   (24.11.2007 в 22:56)   письмо автору
 
   для: relikt   (24.11.2007 в 22:15)
 

Вы можете попробовать, изменив форму следующим образом

<form method=post>
<input type="checkbox" name="group[1]" value="" onclick="loock(this, this.form)">One group<br>
&nbsp;&nbsp;<input type="checkbox" name="group[1][]" value="1" disabled>1<br>
&nbsp;&nbsp;<input type="checkbox" name="group[1][]" value="2" disabled>2<br>
&nbsp;&nbsp;<input type="checkbox" name="group[1][]" value="3" disabled>3<br>
<input type="checkbox" name="group[2]" value="" onclick="loock(this, this.form)">Two group<br>
&nbsp;&nbsp;<input type="checkbox" name="group[2][]" value="1" disabled>4<br>
&nbsp;&nbsp;<input type="checkbox" name="group[2][]" value="2" disabled>5

<input type=submit value="go" name="go">
</form>


применить цикл

<?
$str 
'';
$i 0;
foreach (
$_POST['group'] as $k => $v)
    {
    
$str .= "group $k(".implode(","$_POST['group'][$k]).")".($i++ != count($_POST['group']) - "," "");
    }
echo 
$str;
?>

   
 
 автор: relikt   (25.11.2007 в 13:06)   письмо автору
 
   для: Drago   (24.11.2007 в 22:56)
 

Спасибо за помощь. Все работает.

   
Rambler's Top100
вверх

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