Перейти к содержимому


Вычисление


Сообщений в теме: 8

#1 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 30 Январь 2015 - 10:25

Имею поле со множ. выбором.

Как вычислением задать 1 из значений поля не перетерев при этом уже отмеченные.

Например, выполняя код:

$line['Выбор'] = 'Значение5';

Поле выбор принимает Значение5, но перетирает выбранные Значение1 и Значение3

#2 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 30 Январь 2015 - 14:21

Просмотр сообщенияfabrika-r (30 Январь 2015 - 10:25) писал:

Имею поле со множ. выбором.

Как вычислением задать 1 из значений поля не перетерев при этом уже отмеченные.

Например, выполняя код:

$line['Выбор'] = 'Значение5';

Поле выбор принимает Значение5, но перетирает выбранные Значение1 и Значение3

Можно так
/**********
$row_employee['mailing']) - здесь это поле "Подписка". Тип список с множественным выбором. Получено запросом к базе
$mailings - получаем массив значений списка, сохраненный ранее в этом поле
$subscribe - Новое значение, добавляемое в это поле с типом список
***********/

$mailings = explode("\r\n",$row_employee['mailing']);
if (!in_array($subscribe,$mailings)) //Если нужного значения нет, добавим
{
array_push($mailings,$subscribe);
$new_mailings = "\r\n". implode("\r\n",$mailings);
$upd_emp=Array();
$upd_emp['f4831'] = $new_mailings;
data_update(51,$upd_emp,"`id`=",$emp_id);
}

Сообщение отредактировал maksn: 30 Январь 2015 - 14:32

"...Сижу, паяю. CRM починяю..."
Мои разработки

#3 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 02 Февраль 2015 - 10:14

Извините, в коде я не силен.

Как можно ваш код адаптировать под мою задачу?

Имею сейчас:

$mailings = explode("\r\n",$row_employee['mailing']);
if (!in_array($subscribe,$mailings)) //Если нужного значения нет, добавим
{
array_push($mailings,$subscribe);
$new_mailings = "\r\n". implode("\r\n",$mailings);
$upd_emp=Array();
$upd_emp['f24521'] = $new_mailings; // 24521 - поле "Выбор"
data_update(941,$upd_emp,"`id`=",$emp_id);
}


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Февраль 2015 - 10:39

$subscribe = 'Значение5';
$mailings = explode("\r\n",$line['Выбор']);
if (!in_array($subscribe,$mailings)) //Если нужного значения нет, добавим
{
    array_push($mailings,$subscribe);
    $line['Выбор'] = implode("\r\n",$mailings);
}


#5 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 02 Февраль 2015 - 10:51

Просмотр сообщенияfabrika-r (02 Февраль 2015 - 10:14) писал:

Извините, в коде я не силен.

Как можно ваш код адаптировать под мою задачу?
в вашей таблице есть поле тип=список. Множественный выбор
В каждой записи этой таблицы в этом поле хранится то, что вы уже выбрали и сохранили
Например, в нем возможен множественный выбор из 5 значений
1. Значение1
2. Значение2
3. Значение3
4. Значение4
5. Значение5

Это означает, что в конкретной записи это поле может принимать разные значения.
От пустого "" (выбор не был сделан), до "\r\nЗначение1\r\nЗначение2\r\nЗначение3\r\nЗначение4\r\nЗначение5" (выбраны все возможные)

Для базы данных - это поле "строка". Значения списка в нем для КБ разделяются с помощью \r\n

Так вот. Ваша задача перед добавлением нового значения, найти то, что в нем уже присутствует.

Это можно сделать с помощью $line['ИМЯ_ВАШЕГО_ПОЛЯ_ТИП_СПИСОК'];
$my_string = $line['ИМЯ_ВАШЕГО_ПОЛЯ_ТИП_СПИСОК'];
Теперь это поле нужно преобразовать в массив. Делаем это функцией explode
$my_array = Array();
$my_array =  explode("\r\n",$my_string);

Теперь смотрим, а не содержит ли этот массив вновь добавляемое значение
if (!in_array($new_value,$my_array)) //Если нужного значения нет, добавим
{
  array_push($my_array,$new_value);//Добавим в этот массив еще эдин элемент, равный $new_value
}

Теперь наша задача собрать строку, которая будет хранится в данном поле, с уже вновь добавленным значением. Собираем строку из массива $my_array
  $new_my_string = "\r\n". implode("\r\n",$my_array);

Теперь нужно эту новую строку сохранить в редактируемой записи
  $line['ИМЯ_ВАШЕГО_ПОЛЯ_ТИП_СПИСОК'] = $new_my_string;

Все. Новое значение списка сохранено. Старые не перетерлись

Ваша задача, указать правильно имя поля в переменной $line и задать добавляемую переменную $new_value (имя можете оставить это. Только присвойте ей нужное значение $new_value = "БЛА-БЛА-БЛА"; )
На этом адаптация к Вашему случаю закончена

Сообщение отредактировал maksn: 02 Февраль 2015 - 11:02

"...Сижу, паяю. CRM починяю..."
Мои разработки

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Февраль 2015 - 10:55

Цитата

От пустого "" (выбор не был сделан), до "\r\nЗначение1\r\nЗначение2\r\nЗначение3\r\nЗначение4\r\nЗначение5" (выбраны все возможные)

Не совсем, "\r\n" в начале строки не ставится, только между значениями.

#7 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 02 Февраль 2015 - 12:01

Просмотр сообщенияCbCoder (02 Февраль 2015 - 10:55) писал:

Не совсем, "\r\n" в начале строки не ставится, только между значениями.
Хм...
Согласен. По запарке
"...Сижу, паяю. CRM починяю..."
Мои разработки

#8 etozhesmut

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

Отправлено 03 Февраль 2015 - 16:41

Доброго времени суток, отдельную тему создать не получилось, но данная тема чем то похожа на мою проблему.
Имеются 3 поля, к примеру назовем их: Значение 1, Значение 2 и Значение 3. Мне нужно что бы в поле Значение 1 было следуещее: "Значение 2, Значение 3". Какой код нужно вставить в вычисление?
Версия 2.0.2

#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 04 Февраль 2015 - 10:21

Я же ответил вам тут: clientbase.ru/forum/index.php?showtopic=6426 Тема создалась, просто была скрытая, как у всех новичков.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных