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

Форум MySQL

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

 

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

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

тема: Динамическое создание и выделение чекбоксов
 
 автор: alver   (02.12.2008 в 14:48)   письмо автору
 
 

Всем Привет!
Суть проблемы:
Имеется массив чекбоксов. Количество их известно, но оно может менятся. Их мы достаём из БД с 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));

  Ответить  
 
 автор: Valick   (02.12.2008 в 17:01)   письмо автору
 
   для: alver   (02.12.2008 в 14:48)
 

А что набор всех (не только выбранных) чекбоксов для каждого пользователя разный?
И вообще не совсем понятные у вас структуры таблиц.
И вообще описывайте подробнее, что за юзеры, что за чекбоксы и т.д. и что имеете вначале и что хотите получить в конце.

  Ответить  
 
 автор: alver   (02.12.2008 в 17:13)   письмо автору
 
   для: 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.

  Ответить  
 
 автор: Valick   (02.12.2008 в 18:40)   письмо автору
 
   для: 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]";
}
?>

  Ответить  
 
 автор: Trianon   (02.12.2008 в 19:08)   письмо автору
 
   для: 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]";

  Ответить  
 
 автор: Valick   (02.12.2008 в 19:18)   письмо автору
 
   для: Trianon   (02.12.2008 в 19:08)
 

Ну во-первых и во-вторых - согласен лоханулся))
А в-третьих... дейтсвительно эх... на это моего уровня знаний пока не хватает.

  Ответить  
 
 автор: alver   (02.12.2008 в 20:43)   письмо автору
 
   для: 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 - название профессии

  Ответить  
 
 автор: Trianon   (02.12.2008 в 20:46)   письмо автору
 
   для: alver   (02.12.2008 в 20:43)
 

Ошибки, вероятно, вызваны тем, что у Вас совпадают имена полей в таблицах.
В таких случаях (а это вполне естественно) эти имена следует уточнять именами таблиц.
Показывайте Ваш вариант запроса. Поправим.

  Ответить  
 
 автор: alver   (02.12.2008 в 22:10)   письмо автору
 
   для: 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

Но разумеется не работает.

  Ответить  
 
 автор: Trianon   (02.12.2008 в 23:52)   письмо автору
 
   для: 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 (в своем первом ответе) - был неправ. Не со зла.

  Ответить  
 
 автор: alver   (03.12.2008 в 00:01)   письмо автору
 
   для: Trianon   (02.12.2008 в 23:52)
 

Ой я идиот. Сам не знаю зачем.
Вы Гений Trianon. Всё работает наконец.
Спасибо, что уделили время. Всё очень красиво получилось. Я даже и не надеялся)

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

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