|
|
|
| Всем Привет!
Суть проблемы:
Имеется массив чекбоксов. Количество их известно, но оно может менятся. Их мы достаём из БД с 2 полями title(текст рядом с чекбоксом) и id(подставляется в value к чекбоксу). Т.е. формируем их динамически.
Так же есть ещё одна таблица, где мы храним выбранные чекбоксы для каждого пользователя, т.е. таблица с двумя полями (use_id, checkbox_id).(m to m junction таблица)
Что надо сделать?
Надо сформировать список чекбоксов на основе первой таблицы и галочками отметить какие из них выбраны на основе второй таблицы.
И я вот не пойму как же мне это реализовать.
Вот как это у меня выглядит в коде: (выводится только спичок доступных чекбоксов)
$query="SELECT title, id FROM table;//список доступных чекбоксов
$result=mysql_query($query, $db);
$myrow=mysql_fetch_row($result);
$query1="SELECT checkbox_id FROM table1, WHERE user_id=".$user_id;//список выбранных
чекбоксов для данного юзера
$result1=mysql_query($query1, $db);
$myrow1=mysql_fetch_row($result1);
do
{
echo "<input type='checkbox' name='hisname[]'value='$myrow[id]'> $myrow[title]";
}
while($myrow = mysql_fetch_array($result));
|
| |
|
|
|
|
|
|
|
для: alver
(02.12.2008 в 14:48)
| | А что набор всех (не только выбранных) чекбоксов для каждого пользователя разный?
И вообще не совсем понятные у вас структуры таблиц.
И вообще описывайте подробнее, что за юзеры, что за чекбоксы и т.д. и что имеете вначале и что хотите получить в конце. | |
|
|
|
|
|
|
|
для: Valick
(02.12.2008 в 17:01)
| | Хм, хотел абстрагироватся от конкретной темы, ладно:
Опишу подробнее:
У меня список этих чекбоксов это список профессий, которых можно выбрать сколько угодно, хоть одну, хоть все.
Юзер регится на сайте и ему выводится этот список чекбоксов (создаётся динамически из БД для того, чтобы не было проблем с добавлением новой профессии или их удлаением).
Соответственно когда пользователь хочет изменить свои профессии этот список должен вывестить с отмеченными чекбоксами (если он конечно что то выбрал уже до этого) для того чтобы он увидел, какие профессии у него выбраны.
Структура таблиц вполне понятна, реализует связь m to m.
users(user_id, ...) < - > users_prof(user_id, prof_id) < - > profesii(prof_id, titlle);
Имеем вначале:
-массив1 со списком доступных профессий (он для всех пользователей один и тот же)
-массив2 с выбранными чекбоксами(а точнее имеем prof_id тех чекбоксов, которые нужно отметить) для данного юзверя (он соответственно для каждого юзера будет свой)
Нужно:
Построиьт список чекбоксов из массива 1 и отметить в нём нужные из массива 2. | |
|
|
|
|
|
|
|
для: alver
(02.12.2008 в 17:13)
| | Попробуйте так
<?php
$query="SELECT title, id FROM table";//список доступных чекбоксов
$result=mysql_query($query, $db);
$query1="SELECT checkbox_id FROM table1, WHERE user_id=".$user_id;//список выбранных
чекбоксов для данного юзера
$result1=mysql_query($query1, $db);
while($checkbox = mysql_fetch_array($result1))
$mass[]=$checkbox[checkbox_id];
while($myrow = mysql_fetch_array($result))
{
$check="";
foreach($mass as $value)
{
if ($value==myrow[id]) $check="cheked";
}
echo "<input type='checkbox' name='hisname[]' value='$myrow[id]' $check> $myrow[title]";
}
?>
|
| |
|
|
|
|
|
|
|
для: Valick
(02.12.2008 в 18:40)
| | во первых, существуют in_array, array_search и т.п.
во вторых, ключ записи можно держать в ключе массива и применить issset
в третьих,
эх...
<?
$query="SELECT id, title, IF(user_id IS NULL , '', 'checked') AS check,
FROM table LEFT JOIN table1 ON id=checkbox_id WHERE user_id=".$user_id;
$result=mysql_query($query, $db);
while($row = mysql_fetch_assoc($result))
echo "<input type='checkbox' name='hisname[]' value='$row[id]' $row[check] /> $row[title]";
|
| |
|
|
|
|
|
|
|
для: Trianon
(02.12.2008 в 19:08)
| | Ну во-первых и во-вторых - согласен лоханулся))
А в-третьих... дейтсвительно эх... на это моего уровня знаний пока не хватает. | |
|
|
|
|
|
|
|
для: Trianon
(02.12.2008 в 19:08)
| | Мда, запрос красивый конечно, но моих знаний на такие запросы тоже не хватает. Видимо поэтому переписать его под свою БД я так и не смог.
Может кто перепишет)
users(user_id, ...) < - > users_prof(user_id, prof_id) < - > profesii(prof_id, titlle);
use_id - id пользователя
prof_id - id профессии, он же значение value для checkbox
titlle - название профессии | |
|
|
|
|
|
|
|
для: alver
(02.12.2008 в 20:43)
| | Ошибки, вероятно, вызваны тем, что у Вас совпадают имена полей в таблицах.
В таких случаях (а это вполне естественно) эти имена следует уточнять именами таблиц.
Показывайте Ваш вариант запроса. Поправим. | |
|
|
|
|
|
|
|
для: Trianon
(02.12.2008 в 20:46)
| | Хм, получилось так
SELECT profesii.prof_id, profesii.title, IF(profesii.user_id IS NULL , '', 'checked')
FROM profesii, users_prof LEFT JOIN users ON users.user_id=users_prof.prof_id
WHERE users_prof.user_id=$user_id
|
Но разумеется не работает. | |
|
|
|
|
|
|
|
для: alver
(02.12.2008 в 22:10)
| |
SELECT profesii.prof_id, profesii.title, IF(users_prof.user_id IS NULL , '', 'checked')
FROM profesii LEFT JOIN users_prof ON profesii.prof_id=users_prof.prof_id AND users_prof.user_id=$user_id
|
Таблица с пользователями вам нахрен не нужна (в данном запросе.)
Какую информацию Вы в ней забыли?
PS. Насчет WHERE (в своем первом ответе) - был неправ. Не со зла. | |
|
|
|
|
|
|
|
для: Trianon
(02.12.2008 в 23:52)
| | Ой я идиот. Сам не знаю зачем.
Вы Гений Trianon. Всё работает наконец.
Спасибо, что уделили время. Всё очень красиво получилось. Я даже и не надеялся) | |
|
|
|