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

Форум PHP

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

 

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

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

тема: Извлечения значения массива из суперглобального массива!
 
 автор: Konst   (22.07.2005 в 13:09)   письмо автору
 
 

Относительно недавно начал писать скрипты под register_globals=Off, и по этому поводу начали возникать некоторые вопросы.

Вывожу из базы данных с помощью FOR таблицу в которой каждая строка-форма:
<form name='$vid' method='POST' action=''>
<tr align='center'><td>$vid</td>
<td>
<input type='text' name='vname[$vid]' value='$f[qname]'>
</td>
<td>
<input type='text' name='vorder[$vid]' value='$f[qorder]'>
</td>
<td>
<input type='checkbox' name='vshow[$vid]' value='1' $vchecked>
</td>
<td>
<input type='submit' name='vsave[$vid]' value='Сохранить'>
</td>
</tr>
</form>


Потом в строку вводятся данные, которые должны быть выведены в этом же файле (action=''). Вопрос, как с помощью $_POST['имя_переменной_массива']; вывести значение переданного значения массива обыкновенного )). Просматривал то, что передается в суперлобальные массивы с помощью phpinfo(32), все передается хорошо, но как это вывести??? Ведь запись в виде $_POST['vname[$vid]']; не верна же???

   
 
 автор: cheops   (22.07.2005 в 13:22)   письмо автору
 
   для: Konst   (22.07.2005 в 13:09)
 

В этом случае следует обрщаться к суперглобальному массиву $_POST следующимо образом

  echo $_POST['vname'][$vid];

Вообще, чтобы было проще ориентироваться при отладке выводите дамп массива $_POST
<?php
  
echo "<pre>";
  
print_r($_POST);
  echo 
"</pre>";
?>

   
 
 автор: Konst   (22.07.2005 в 13:37)   письмо автору
 
   для: cheops   (22.07.2005 в 13:22)
 

Код
<?php 
  
echo "<pre>"
  
print_r($_POST); 
  echo 
"</pre>"
?>


Выводит, например:

Array
(
[vname] => Array
(
[1] => Номер один
)

[vorder] => Array
(
[1] => 12
)

[vshow] => Array
(
[1] => 1
)

[vsave] => Сохранить
)

Но в то же время echo $_POST['vname'][$vid]; не выводит ничего (

Или нужно передвать значение $vid через hidden???

P.S. Значение $vsave я сделал просто переменной, а не массивом, пока.

   
 
 автор: cheops   (22.07.2005 в 13:43)   письмо автору
 
   для: Konst   (22.07.2005 в 13:37)
 

print_r сообщает о том, что вам следует обращаться к массиву как
<?php
  
echo $_POST[vname][1];
?>

т.е. $vid должен принимать значение 1, восстановить в обработчике его можно различными способами в том числе и передачей через скрытое поле.

   
 
 автор: Konst   (22.07.2005 в 13:51)   письмо автору
 
   для: cheops   (22.07.2005 в 13:43)
 

Передаю $vid через hidden.

Если выводить данные через этот код (переданное $vid через Hidden равно 1)
echo "<pre>";
print_r($_POST);
echo "</pre>";

ECHO $_POST['vname'][1];


То получится:

Array
(
[vid] => 1
[vname] => Array
(
[1] => Привет
)

[vorder] => Array
(
[1] => 1
)

[vshow] => Array
(
[1] => 1
)

[vsave] => Сохранить
)

Привет

А если через код
echo "<pre>";
print_r($_POST);
echo "</pre>";

ECHO $_POST['vname'][$vid];



То только:

Array
(
[vid] => 1
[vname] => Array
(
[1] => Привет
)

[vorder] => Array
(
[1] => 1
)

[vshow] => Array
(
[1] => 1
)

[vsave] => Сохранить
)

Соответсвенно $_POST['vname'][$vid]; нужно как-то сделать чтобы в [$vid] подставлялось значение $vid переданное через Hidden...

   
 
 автор: Konst   (22.07.2005 в 13:59)   письмо автору
 
   для: Konst   (22.07.2005 в 13:51)
 

Ок, я все исправил. Рабочая записть выглядить вот так:

$vid=$_POST['vid'];

ECHO $_POST['vname'][$vid];


Просто странно, почему $vid стразу не вставлялсь в $_POST['vname'][$vid]; или в $_POST['vname']['vid']; , хотя возможно это просто такой синтаксис строгий.

   
 
 автор: cheops   (22.07.2005 в 14:04)   письмо автору
 
   для: Konst   (22.07.2005 в 13:51)
 

В этом случае следует поступить следующим образом
<?php
  
echo $_POST['vname'][$_POST['vid']]
?>

   
 
 автор: Konst   (22.07.2005 в 14:18)   письмо автору
 
   для: cheops   (22.07.2005 в 14:04)
 

Ок, спасибо большое!!!!

   
 
 автор: Konst   (22.07.2005 в 15:42)   письмо автору
 
   для: Konst   (22.07.2005 в 13:09)
 

Еще вопросик. Косвенно по теме )) На стр. 218, 5.1.3. Удаление HTML-тегов и обратных слэшей в книге "PHP5 Практика создания сайтов" описывается функция STRIPSLASHES.

Пишу

$vname=$_POST['vname'][$vid];

$vname=STRIPSLASHES($vname);


Слэши не удаляются, все выводится как есть. Есть ли может быть какие-то особые условия работы этой функции и зависит ли она от версии и настроек PHP?

   
 
 автор: cheops   (22.07.2005 в 17:27)   письмо автору
 
   для: Konst   (22.07.2005 в 15:42)
 

А что находится в vname? Эту функцию обычно применяют для удаления слешей, добавленных опцией сервера "магические кавычки".

   
Rambler's Top100
вверх

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