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

Форум PHP

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

 

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

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

тема: Разобрать массив, выбрать нужные
 
 автор: grafen   (29.02.2012 в 10:41)   письмо автору
 
 

Всем привет. Есть форма, в которой автоматически генерируются $_POST такого типа "reg_1", "reg_2", "reg_10", "reg_5" и т.д., сколько их - неизвестно, диапазон номеров - может быть хаотичный. Это поля checkbox, т.е. галочки. Кроме этих полей, есть много других. Каким образом отобрать только "reg_(всегда цифра)"?

Заранее спасибо!

  Ответить  
 
 автор: Valick   (29.02.2012 в 11:00)   письмо автору
 
   для: grafen   (29.02.2012 в 10:41)
 

у вас немного не правильная организация
reg - это должен быть массив, тогда и с обработкой функцией foreach не будет никаких проблем
покажите форму с чекбоксами

  Ответить  
 
 автор: Sfinks   (29.02.2012 в 11:02)   письмо автору
 
   для: grafen   (29.02.2012 в 10:41)
 

А не проще в форме не reg_5 указывать, а reg[5] и тогда просто перебрать
foreach($_POST['reg'] as $key => $val){ .... }

Если не проще, то можно перебрать так:
<?php
  
foreach( $_POST as $key => $val ){
    if( !
preg_match"#reg_\d+#" $key ) ) continue;
    
// Здесь обработка при условии "если ключ подходит"
  
}

  Ответить  
 
 автор: grafen   (29.02.2012 в 11:17)   письмо автору
 
   для: Sfinks   (29.02.2012 в 11:02)
 

Спасибо всем, так и сделаю!

  Ответить  
 
 автор: Valick   (29.02.2012 в 11:21)   письмо автору
 
   для: grafen   (29.02.2012 в 11:17)
 

как вы сделаете?

  Ответить  
 
 автор: grafen   (29.02.2012 в 11:51)   письмо автору
 
   для: Valick   (29.02.2012 в 11:21)
 

Воспользуюсь foreach( $_POST as $key => $val ){ }

У меня в БД хранится список, который потом выводится и около названий нужно ставить галочки. У каждой записи свой id в базе, именно эти id мне и нужно словить.
Сделал так: в тот момент, когда обрабатываю данные, вновь вывожу список, тем временем сверяю, есть ли галочка у записи, и создаю массив (в него попадают все выбранные id). После этого разбираю получившийся массив через foreach. Уже всё работает, как надо.

  Ответить  
 
 автор: Valick   (29.02.2012 в 12:03)   письмо автору
 
   для: grafen   (29.02.2012 в 11:51)
 

поймите, код
<?php
  
foreach( $_POST as $key => $val ){
    if( !
preg_match"#reg_\d+#" $key ) ) continue;
    
// Здесь обработка при условии "если ключ подходит"
  

попадает под определение "говнокод" я не знаю зачем его вообще посоветовал Sfinks
это примерно то же самое, что батоном гвозди забивать

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

  Ответить  
 
 автор: Sfinks   (29.02.2012 в 12:47)   письмо автору
 
   для: Valick   (29.02.2012 в 12:03)
 

> попадает под определение "говнокод"
бесспорно )

>я не знаю зачем его вообще посоветовал Sfinks
Потому что бывают ситуации когда все уже сделано и нужно запустить пока хоть как-то, а потом уже переделать по человечески. А потом - потому что, например, это много на что влияет и править придется много. Кроме того некогда вникать в чужие формы, поэтому я сказал как правильно и как сделать неправильно но быстро. Только не заострил внимания на том что это не правильно. Спасибо за дополнение )))

  Ответить  
 
 автор: Sfinks   (29.02.2012 в 13:04)   письмо автору
 
   для: Sfinks   (29.02.2012 в 12:47)
 

И вообще, вы могли заметить, что я редко вникаю в суть проблемы и продумываю способы оптимизации, а просто реализую то что просят. Ибо не моя это забота ) Если кто-то хочет что-то оптимизировать, пусть так и просят, мол: "а вот как бы тут лучше сделать". И даже при таком подходе часто приходится потратить кучу времени, на то чтобы выпытать четкую задачу, т.к. мало кто полностью формулирует что ему нужно. Это связано с разными обстоятельствами: кто-то не знает что бывает по другому и поэтому думает что объяснил все четко, кто-то весь в своем проекте и считает очевидными вещи, которые могут читаться двусмысленно, кто-то вообще забывает что он печатает, а не говорит и думает что по интонации все понятно. И опять же, в любом случае - это не моя проблема )))

  Ответить  
 
 автор: Valick   (29.02.2012 в 13:16)   письмо автору
 
   для: Sfinks   (29.02.2012 в 13:04)
 

да это все понятно, я не против каждый отвечает так как хочет
и то что выпытывать нужно, тоже верно
просто когда я вижу что человек делает логическую ошибку в самом начале, стараюсь наставить на путь истинный, иначе она потом обрастет "костылями" и более того в аналогичной ситуации начиная другой проект, человек будет поступать так же
я не знаю как объяснить эту ситуацию "без бутылки"... поэтому приходиться в нее лезть
если каменщик неровно кладет кирпич то его никто не будет жалеть, его просто уволят и найдут другого, вот и данный подход к решению вопроса достоин увольнения... я не имею ввиду вас

  Ответить  
 
 автор: Sfinks   (29.02.2012 в 13:22)   письмо автору
 
   для: Valick   (29.02.2012 в 13:16)
 

Не, вот когда он пяток раз об эти костыли споткнется, тогда сам сделает правильно! См.ниже )
____
PS конечно это не ко всем относится. Бывают исключения. Но как правило так =)

  Ответить  
 
 автор: Sfinks   (29.02.2012 в 13:19)   письмо автору
 
   для: Sfinks   (29.02.2012 в 13:04)
 

А еще люди ЛЕНИВЫ. А если человек делает что-то не так, то ему придется это переделывать (рано или поздно). Но чтобы заставить его переделать это сейчас - нужно придумать кучу аргументов, примеров почему нужно делать именно так, а в особо клинических случаях найти ссылки на авторитетные источники, чтобы обосновать свое мнение и переубедить человека. Даже в конкретном примере, вы видите, что человек посмотрев на 2 варианта кода, один из которых явно проще и красивее другого, пошел по пути наименьшего сопротивления и решил не переделать то что он написал, а взять, пусть и громоздкое и некрасивое, но готовое! Ну а мне есть на что потратить силы ) Я даже своим работникам (розничная торговля) никогда не доказываю ничего. Я сказал: -Должно быть так. Например про хранение. Если кто-то считает что "да ну, ниче не случится"..... Да ради бога. Все убытки = минус из зарплаты.

  Ответить  
 
 автор: Valick   (29.02.2012 в 11:18)   письмо автору
 
   для: Sfinks   (29.02.2012 в 11:02)
 

А не проще в форме не reg_5 указывать, а reg[5] и тогда просто перебрать
при нормальной логике скрипта, в форме (точнее в скрипте формирующем форму) должно быть reg[]

  Ответить  
 
 автор: Valick   (29.02.2012 в 11:39)   письмо автору
 
   для: Sfinks   (29.02.2012 в 11:02)
 

Sfinks, вы бы сами стали использовать preg_match при таких обстоятельствах?

  Ответить  
 
 автор: Sfinks   (29.02.2012 в 12:48)   письмо автору
 
   для: Valick   (29.02.2012 в 11:39)
 

см.выше.

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

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