Xwab
Форумыnavigate_nextНебольшие вопросы по PHP/MySQL

Разобрать поле на части
Сообщения
DenSBK

Доброго всем времени суток.
И так встал перед вопросом таким как разобрать поле из БД вида "0,1,3,4,7" на части, длина поля может быть до 7 значений но может быть и 4 и 2.
Так вот запись в БД сделал теперь надо както разобрать этот велосипед на куски.
Есть у кого мысли на этот счет?
Тоесть чтобы переменная $name выводила по раздельности данные числа.

29 Янв 2013, 23:47
mixlion

DenSBK, explode

29 Янв 2013, 23:55
Okula

DenSBK, что значит "по раздельности"? Приведи пример желаемого вывода.

29 Янв 2013, 23:56
DenSBK

mixlion, Да но для каждого значеня нужно устанавливать флаг тоесть $name[0],$name[1] и тд.
Имеется 7 строк (checkbox) При выборе пользователем нужные записываются их всего 7 тоесть можно утановить до 7 значений но если устанавливают 2 или 3 то другие не выводятся и начинает ругатся итрепиратор.

30 Янв 2013, 0:02
FeST

[php:1:8de46373ca]$x = explode(",", "0,1,3,4,7");
for($i = 0; $i < count($x); $i++)
echo $x[$i]." ";
[/php:1:8de46373ca]
Выведет 0 1 3 4 7


Если я все прально понял

30 Янв 2013, 0:04
DenSBK

Okula, НУ вот смотри есть такие строки:
0. Дружба и общение
1. Флирт, СМС-переписка
2. Любовь, отношения
3. Брак, создание семьи
4. Виртуальный секс
5. Секс в реале
6. Ищу спонсора
7. Стану спонсором

Так вот если юзер выбирает например 0 и 2 то они записываются в БД как 0,2 все больше ничего не дописывается.
Так вот чтобы при повторном выборе изменении нужные нам checkboxы помечались выделенными.
Както так.
При применении функции explode нужно писать 7 значений вида 0,2,0,0,0,0,0 и тд. но этого не очсобо хочется.
добавлено спустя 28 секунд:
FeST, Хм щас попробую.

30 Янв 2013, 0:07
kos

DenSBK, эксплоде ничего не запишет, она разделит цифры которые ты в последствии применишь при выводе.

30 Янв 2013, 0:10
DenSBK

Короче поля написаные выши в бд пишутся таким способом:
[php:1:71c9ee8955]if (isset($_POST['getting_target']) && is_array($_POST['getting_target']))
{
$result = array();
foreach ($_POST['getting_target'] as $data)
{
if (is_array($data))
{
$result = implode(',', $data);
}
}
$user['getting_target']=my_esc($result);
mysql_query("UPDATE `user` SET `getting_target` = '$user[getting_target]' WHERE `id` = '$user[id]' LIMIT 1");
}[/php:1:71c9ee8955]
Так вот у каждого юзера могут быть разные значения.
Например: у первого 0,2,4 у второго 1,2,3,5
Тоесть длина значения всегда разные. Вот надо сделать чтобы поля (checkbox) которые были ранее отмечены отмечались checked="checked".

30 Янв 2013, 0:17
FeST

[php:1:82fdb32942]
$x = explode(",", "0,1,3,4,7");

echo "<input type='checkbox‘ name='какоето название' “;
for($i = 0; $i < count($x); $i++)
if($x[$i] == 0) echo "checked='checked“;

echo " />0. Дружба и общение <br/>“;
[/php:1:82fdb32942]
ну и далее так каждый чекбокс переделай и вместо нуля подставляй соответствующее число. это первое что пришло в голову.
добавлено спустя 5 минут:
можно еще впринципе вместо фор использовать in_array

30 Янв 2013, 0:32
DenSBK

FeST, Бррр... Чет велосипеды наверно изобритать проще
добавлено спустя 8 часов 54 минуты:
Фух ладно всем спасибо разобрался и пошел немного другим путем.
Незнаю может кому понадобится в будущем то вот.
Запись значаний в одно поле БД:
[php:1:6a091990c7]if (isset($_POST['target']))
{
foreach($_POST['target'] as $val)
{
$res[] = $val;
}
$result = implode(',', $res).'';

$name['target']=mysql_real_escape_string(htmlspecialchars($result));
mysql_query("UPDATE `name_tables` SET `target` = '$name[target]' WHERE `id` = '$name[id]' LIMIT 1");
}[/php:1:6a091990c7]
Ну и собтвенно выводим список чекбоксов которые были уже помечены и которые еще нет:
[php:1:6a091990c7]
$list = explode(",", $name['target']);
$array = array("0" => "Название 1", "1" => "Название 2", "2" => "Название 3", "3" => "Название 4", "4" => "Название 5", "5" => "Название 6", "6" => "Название 7", "7" => "Название 8");

foreach($array as $key => $value)
{

foreach ($list as $element) {

if ($key == $element) {
echo "<input type=\"checkbox\" name=\"target[]\" value=\"".$element."\" checked><label>".$value."</label><br />";
$check = $element;
}
}

if ($check == $key) {
echo "";
} else {
echo "<input type=\"checkbox\" name=\"target[]\" value=\"".$key."\"><label>".$value."</label><br />";
}

}[/php:1:6a091990c7]
Вот такой вот велосипед получается

30 Янв 2013, 10:05
Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.