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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Отметить нужные checkbox (чекбоксы) в ссылке при выводе с mysql

Сообщения:  [1-10]    [11-20]  [21-29] 

 
 автор: confirm   (24.04.2012 в 17:04)   письмо автору
 
   для: Valick   (24.04.2012 в 16:56)
 

Valik, не надо комментировать, я говорю о том, что данная картинка может говорить об обратном, так как он упоминал в своих пояснениях чему эти "теги" могут принадлежать.
Я автору задавал вопросы не ради любопытства, а потому, что не понятно было чего он хочет. Я и до сих пор не понимаю чего. А коли вы его поняли - пожалуйста, но все для него, не для меня.

  Ответить  
 
 автор: Valick   (24.04.2012 в 16:56)   письмо автору
 
   для: confirm   (24.04.2012 в 16:44)
 

Выбраны при выводе они могут быть только в том случае
это далеко не так, как бы вам это го не хотелось
значения могут годами хранится в базе и при редактировании должна быть возможность как убрать (разорвать) существующие так и добавить (соединить) новые эти самые чекбоксы

  Ответить  
 
 автор: confirm   (24.04.2012 в 16:44)   письмо автору
 
   для: Ярослав   (24.04.2012 в 15:54)
 

Обязательно прочтите и о mysql_fetch_array, и чем отличается цикл while от цикла do while, а уже если будут вопросы, тогда пояснения дадут, но думаю, что поймете сами. Прочтение материала самостоятельно, это лучшее его закрепление, иначе, я об этом mysql_fetch_array говорил некоторым, а результат ноль, видимо не хотят они себя беспокоить "пустяками всякими".

Что касается сути самого вопроса о чекбоксах. Изначально я вас спрашивал - зачем их сразу отмечать при выводе, ели речь идет о выборе? После долгих вопросов и ответов выяснилось - вам надо снимать отмеченные, чтобы разорвать связи. Картинка же, которую вы прикрепили, и на которой само поле сообщения пусто, может говорить как раз об обратном - о добавлении таких связей. А значит изначально чекбоксы не должны быть выбраны.
Выбраны при выводе они могут быть только в том случае, если к примеру, при отправке формы на сервер, вы выявили ошибки в ее заполнении, и возвращаете форму для исправления их, и нужно отметить те чекбоксы, которые пользователь уже выбрал.

В общем, вы скорее всего просто не можете пояснить, что вам все таки нужно, а значит и ответить вам по сути практически не возможно.

  Ответить  
 
 автор: Ярослав   (24.04.2012 в 15:54)   письмо автору
 
   для: confirm   (24.04.2012 в 15:01)
 

:)

>Нет ничего полезного в коде вашем.
Ну нет, так нет. Это только информация, я не говорю что так нужно делать, это один из (наверное) десятки способов которые бы помогли в данном случае.

>неграмотное использование mysql_fetch_array
Может, и так. Благодаря Вашей критике я поищу книгу по php, буду ознакомляться более глубоко.
Хотя Вы не разу не объяснили почему я делаю не правильно, так-же и по циклу do while.
Был бы признателен за ответ.

>Ну а самое главное ваш код не отвечает на вопрос вами же поставленный - "как распознать среди полученного выбор пользователя".
Код работает.
Может мы, до сих пор не понимаем друг друга.

Но, в любом случае спасибо за то что уделили мне свое время и опыт. Может быть и Вы подбросили мне эту идею, только я еще не понял этого.

  Ответить  
 
 автор: confirm   (24.04.2012 в 15:01)   письмо автору
 
   для: Ярослав   (24.04.2012 в 14:55)
 

Нет ничего полезного в коде вашем - первое, это неграмотное использование mysql_fetch_array, второе, это неоправданное в данном случае использование цикла do while.
Ну а самое главное ваш код не отвечает на вопрос вами же поставленный - "как распознать среди полученного выбор пользователя".

  Ответить  
 
 автор: Ярослав   (24.04.2012 в 14:55)   письмо автору
17.1 Кб
 
   для: confirm   (19.04.2012 в 23:31)
 

Спасибо confirm за попытку помочь мне. Я понимаю как трудно понять когда человек что-то хочет "эдакое", особенно когда он сам не до конца понимает как это все будет.

Я испробовал метод "если долго мучится, что-нибудь получится" и получилось не что-нибудь а именно то что задумал (ушло 3 дня). Результат в прикрепленном файле, нужные темы отмечаются автоматом.

Выложу код может кто поймет мой "почерк" и возьмет для себя что-то полезное.

/* Подключение таблицы TAGS */    
$result_tag = mysql_query("SELECT id,title FROM tags",$db);
if (!$result_tag){echo '<p>Ошибка доступа к таблице tag</p>';exit (mysql_error());}
if (mysql_num_rows ($result_tag) > 0){$myrow_tag = mysql_fetch_array ($result_tag);}else{echo '<p>В таблице tag нет информации</p>';}

/* Вывод тэгов */
do
{
    $result_checkbox = ''; // пустая переменная
    /* Подключение таблицы POST_TAGS */    
    $result_post_tags = mysql_query("SELECT id_tags FROM post_tags WHERE id_post='$id_post'",$db);
    if (!$result_post_tags){echo '<p>Ошибка доступа к таблице post_tags</p>';exit (mysql_error());}
    if (mysql_num_rows ($result_post_tags) > 0){$myrow_post_tags = mysql_fetch_array ($result_post_tags);}else{echo '<p>В таблице post_tags нет информации</p>';}
                                    
    do
    {
        if ( $myrow_tag[id] == $myrow_post_tags[id_tags] )
        {
            $result_checkbox = '<label><input type="checkbox" name="tag[]" value="'.$myrow_tag[id].'" checked>'.$myrow_tag[title].'</label><br>';
            echo $result_checkbox;
        } // выводятся и отмечаются теги которые связаны с заметкой
    }
    while ( $myrow_post_tags = mysql_fetch_array ($result_post_tags) );
                                    
    if ( $result_checkbox == '' )
    {
        echo '<label><input type="checkbox" name="tag[]" value="'.$myrow_tag[id].'">'.$myrow_tag[title].'</label><br>';
    } // выводятся все остальные теги которые есть в базе тегов.
                                
}
while ( $myrow_tag = mysql_fetch_array ($result_tag) );

  Ответить  
 
 автор: confirm   (19.04.2012 в 23:31)   письмо автору
 
   для: Ярослав   (19.04.2012 в 18:48)
 

Я, как пользователь, отношусь к этим облакам тегов нейтрально - и мне они нафик не нужны, я не обращаю на них внимания, и они меня как бы не трогают. Поэтому, я даже не имею представления, что там выводится в них от теме к теме. Но думаю, что один тег может принадлежать нескольким темам. А это значит, что сами теги лучше держать в отдельной таблице, а их связь с родителями (темами) описывать в отдельной таблице связи (внешняя таблица по отношению к таблицам тем и тегов).
Исходя из этого, и еще из того, что ради разрыва связей иметь отдельную страницу управления не стоит, а лучше редактировать темы, включая удаление связей с тегами комплексно, будем выводить примерно такую форму:
<form method=post><input name=title[1] value="Name 1" /><br>
<textarea name=desc[1]>Desc 1</textarea><br>
<input type=hidden name=tag[1][] value=1 />
word 1 <input type=checkbox name=lnk[1][] value=1 checked /><br>
<input type=hidden name=tag[1][] value=2 />
word 2 <input type=checkbox name=lnk[1][] value=2 checked /><br>
<input type=hidden name=tag[1][] value=3 />
word 3 <input type=checkbox name=lnk[1][] value=3 checked /><br><br>
<input name=title[2] value="Name 2" /><br>
<textarea name=desc[2]>Desc 2</textarea><br>
<input type=hidden name=tag[2][] value=1 />
word 1 <input type=checkbox name=lnk[2][] value=1 checked /><br>
<input type=hidden name=tag[2][] value=4 />
word 4 <input type=checkbox name=lnk[2][] value=4 checked /><br>
<input type=hidden name=tag[2][] value=5 />
word 5 <input type=checkbox name=lnk[2][] value=5 checked /><br><br>
<input name=title[3] value="Name 3" /><br>
<textarea name=desc[3]>Desc 3</textarea><br>
<input type=hidden name=tag[3][] value=5 />
word 5 <input type=checkbox name=lnk[3][] value=5 checked /><br>
<input type=hidden name=tag[3][] value=6 />
word 6 <input type=checkbox name=lnk[3][] value=6 checked /><br>
<input type=hidden name=tag[3][] value=7 />
word 7 <input type=checkbox name=lnk[3][] value=7 checked /><br><br>
<input name=title[4] value="Name 4" /><br>
<textarea name=desc[4]>Desc 4</textarea><br>
<input type=hidden name=tag[4][] value=8 />
word 8 <input type=checkbox name=lnk[4][] value=8 checked /><br>
<input type=hidden name=tag[4][] value=9 />
word 9 <input type=checkbox name=lnk[4][] value=9 checked /><br>
<input type=hidden name=tag[4][] value=10 />
word 10 <input type=checkbox name=lnk[4][] value=10 checked /><br><br>
<input type="submit" value="Edit" />
</form>

При отправке формы, на сервере будут получены следующие массивы (в примере удалены некоторые связи, что отражается в массиве lnk.

Array
(
    [title] => Array
        (
            [1] => Name 1
            [2] => Name 2
            [3] => Name 3
            [4] => Name 4
        )

    [desc] => Array
        (
            [1] => Desc 1
            [2] => Desc 2
            [3] => Desc 3
            [4] => Desc 4
        )

    [tag] => Array
        (
            [1] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

            [2] => Array
                (
                    [0] => 1
                    [1] => 4
                    [2] => 5
                )

            [3] => Array
                (
                    [0] => 5
                    [1] => 6
                    [2] => 7
                )

            [4] => Array
                (
                    [0] => 8
                    [1] => 9
                    [2] => 10
                )

        )

    [lnk] => Array
        (
            [2] => Array
                (
                    [0] => 1
                    [1] => 5
                )

            [3] => Array
                (
                    [0] => 7
                )

            [4] => Array
                (
                    [0] => 8
                    [1] => 9
                )

        )

)

Массивы title и desc, это массивы содержащие заголовки тем и их описание, соответственно. Ключами этих массивов служат их id. Массив tag - массив хранящий в себе все текущие теги темы, и первичный ключ этого массива, это как раз id родителя (темы), а значениями id этих тегов. Тоже самое и в массиве lnk - первичный ключ массива, это id родителя (темы), а значения id тегов.
<?
if($_POST) {
   echo 
'<pre>';
   
print_r($_POST);
    
   
$tag = array();
   foreach(
$_POST['tag'] as $k=>$v) {
      if(
array_key_exists($k$_POST['lnk'])) {
         if(
$t array_diff($v$_POST['lnk'][$k])) $tag[$k] = $t;
      } else 
$tag[$k] = $v;   
   }
   
   
print_r($tag);
   echo 
'</pre>';
}

В цикле получается массив $tag, который будет, опять таки, в качестве первичного ключа иметь id родителя, а значения, это id тех тегов, которые нужно удалить из таблицы связей. То есть, из этой таблицы нужно удалить записи, которые содержат первичный ключ этого массива и одно из его значений, например, для темы с id = 1, это будут записи имеющие ключи 1,1; 1,2; 1,3 (предполагается, что первый столбец таблицы связей, это id тем, а второй id тегов).
Array
(
    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [2] => Array
        (
            [1] => 4
        )

    [3] => Array
        (
            [0] => 5
            [1] => 6
        )

    [4] => Array
        (
            [2] => 10
        )

)

Если все будет организовано так, то при удалении самих тегов (редактировании таблицы тегов), необходимо удалять их и из таблицы связей - все записи принадлежащие этим тегам.

Как я говорил ранее, массив tag можно хранить на сервере, например в сессии, формируя его при выводе формы, то есть не обязательно формировать его с помощью скрытых полей в форме. Ну или придется делать лишний запрос к базе.

  Ответить  
 
 автор: Ярослав   (19.04.2012 в 18:48)   письмо автору
 
   для: confirm   (19.04.2012 в 18:16)
 

Боюсь, у нас скоро не будет места для общения :)

Я благодарен что Вы, уделили свое время для поиска решения этого вопроса.

К моему сожалению, мне нужно завершать переписку, и я не смогу выйти на связь несколько дней.
Если этот вопрос решится я выложу инфу о методе который использовал, если нет, я сообщу как реализованы таблицы и их связи, и брошу все в изображении на этот форум. И если Вам будет интересно продолжить общение по решению этого вопроса, тогда до скорого...
И еще раз спасибо. :)

  Ответить  
 
 автор: confirm   (19.04.2012 в 18:16)   письмо автору
 
   для: Ярослав   (19.04.2012 в 17:54)
 

Я уже вам говорил и вы должны это знать, что не отмеченные чекбоксы на сервер не придут. Это не страшно конечно, можно узнать какие из них не пришли. Но...
Вот у вашей заметки три тега. Эта заметка имеет id, например 10. Этот id должен быть родителем для всех этих тегов (связь таблиц по ключам), при этом каждый тег тоже должен иметь свой id - его идентификатор.
Простым вычитанием из массива id тем, массива полученных (отмеченных) чекбоксов по id родителя, можно узнать, id тех чекбоксов, которые не пришли (вы сняли отметку, разорвали связь). Но все было бы замечательно, если бы у каждого родителя было по одному потомку - одному чекбоксу идентифицирующему тег. Если же их несколько, то этот способ не даст полной картины. Если наоборот, отмеченные это изменение, было бы проще.
А в этом случае нужно хранить на сервере id отправленных чекбоксов, и сравнивать их с пришедшими. Либо по известным делать запрос в базу, получая недостающие, то есть те, связи которых нужно разорвать.
Ну а в самой базе изменение, так это просто очистить в таблице id родителя. Тут надо знать как у вас реализованы таблицы, их связи.

  Ответить  
 
 автор: Ярослав   (19.04.2012 в 17:54)   письмо автору
 
   для: confirm   (19.04.2012 в 17:31)
 

К большому сожалению я не владею профессиональными терминами, почему и происходит "непонятка".

Но в данном случае встает вопрос - что делать с этими записями, чьи связи разорваны?

Ничего. Связь (одна или несколько) удаляется (разрывается) в сводной таблице (посредник между таблицей из темами и таблицей из заметками).

Такая заметка выходит на сайт (после редактирования) уже с меньшим (или измененным) количеством тем (тэгов).

Это как "облако тегов". И вот такую заметку мы редактируем, в последствии, этих тем (тэгов) может быть больше, меньше или количество не изменится.

Представьте, что Вам нужно отредактировать заметку с тегами (как на этом сайте http://citaty.info/tema/neizbezhnost-rok-sudba). У этой заметки 3 темы (тэга): горе, жизнь, неудача, так вот Вам нужно убрать одну тему, и добавить две остальные оставить без изменений.

(На следующий вопрос не обязательно отвечать, потому что он заберет много времени, но все-же интересно)
Как бы Вы это сделали?

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-29] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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