Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти и заменить значения value 
:(
    Опции темы
garden
Дата 16.11.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Добрый день.

Задача
Найти и заменить значения полей по имени поля

Пример
Есть массив значений: name1->value1, name2->value2, name3->value3 и т.д.

Необходимо заменить код:
Цитата

<input type="text" name="name1" value="">
<select name="name2"><option value="value2"><option value="value"></select>
<textarea name="name3"></textarea>


На следующий:
Цитата

<input type="text" name="name1" value="value1">
<select name="name2"><option value="value2" checked><option value="value"></select>
<textarea name="name3">value3</textarea>


Иными словами:
- необходимо найти значение поля с именем text и вставить требуемый текст в value
- необходимо найти значение выпадающего списка с именем name2 и пометить option с именем value2 как выбраным (selected)
- необходимо найти textarea поле с именем name3 и вставить значение value3

Буду очень благодарен за помощь.
PM MAIL   Вверх
mishaSL
Дата 16.11.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 9
Всего: 54



Вот набросал код:
Код

<?php
$Arr = array('name1'=>'value1', 'name2'=>'value2', 'name3'=>'value3');

$text = <<<TEXT
<input type="text" name="name1" value="">
<select name="name2"><option value="value2"><option value="value"></select>
<textarea name="name3"></textarea>
TEXT;
print "<pre>До замены:\n".$text."</pre>";
$m = array();
if (preg_match_all('#<(input|select|textarea)[^>]+name=[\'|"]?([a-z0-9-_]*)[\'|"]?#is', $text, $m) != 0) {
    //print_r($m);
    foreach($m[2] as $k=>$v) {
        if (array_key_exists($v, $Arr)) {
            switch($m[1][$k]) {
                case 'input':
                    $pattern = '#(<input[^>]+name=[\'|"]?'.preg_quote($v).'[\'|"]?[^>]+value=[\'|"]?)(.*?)([\'|"]?)#is';
                    $replace = '$1'.$Arr[$v].'$3';
                    break;
                case 'select':
                    $pattern = '#(<select[^>]+name=[\'|"]?'.preg_quote($v).'[\'|"]?[^>]*?>.*?<option[^>]+value=[\'|"]?'.preg_quote($Arr[$v]).'[\'|"]?)([^>]*?)(>.*?</select>)#is';
                    $replace = '$1 selected$3';
                    break;
                case 'textarea':
                    $pattern = '#(<textarea[^>]+name=[\'|"]?'.preg_quote($v).'[\'|"]?[^>]*>)(.*?)</textarea>#is';
                    $replace = '$1'.$Arr[$v].'</textarea>';
                    break;
                }
            $text = preg_replace($pattern, $replace, $text);
        }
    }
}

print "<pre>После замены:\n".$text."</pre>";

?>


Добавлено через 56 секунд
Сделал так, чтобы дополнить его была не проблема smile 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
garden
Дата 16.11.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 28.4.2006

Репутация: нет
Всего: нет



Спасибо огромное, все прекрасно работает.
P.S. Отблагодарить материально не могу, к сожелению, но могу подарить немного хостинга.smile

Добавлено через 9 минут и 49 секунд
Прошу прощения, немного перепутал. В полях select необходимо найти значение value2 и выделить его selected

Исходный код:
Цитата

<select name="select"><option value="0">value1</option><option value="1">value2</option></select>


Должно получиться:
Цитата

<select name="select"><option value="0">value1</option><option value="1" selected>value2</option></select>

PM MAIL   Вверх
mishaSL
Дата 19.11.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 9
Всего: 54



Цитата(garden @  16.11.2007,  23:19 Найти цитируемый пост)
Прошу прощения, немного перепутал. В полях select необходимо найти значение value2 и выделить его selected

Для этого просто необходимо изменить массив $Arr ('имя поля'->'значение')
Добавьте еще один элемент массива:
Код

$Arr['select'] = '1';





--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0878 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.