Отправка выбора Select в data-group
Есть 2 таблицы mysql.
Первая: sortable в ней колонки ord(отвечает за позицию) id(ai) nick(Varchar имя) rank_name(Varchar должность) Вторая: sortable2 в ней колонка rank(Varchar unicode_ci) в ней написаны значения которые должны отправляться при выборе в data-group элемента в котором был сделан выбор.. Вот php: <?php include( 'db_connection.php' ); $select = "SELECT * FROM sortable, sortable2 ORDER BY ord, rank ASC"; echo mysql_error(); $perform = mysql_query( $select ); echo mysql_error(); while( $array = @mysql_fetch_array( $perform ) ){ $id = $array['id']; $rank = $array['rank']; $nick = $array['nick']; $rank_name = $array['rank_name']; ?> <?php require "body.php" ?> <?php } ?> Вот то что в body.php <figure class="portfolio-item" data-groups='["<?php echo $rank ?>"]'> <figcaption> <div class="col-md-4" id='item-<?php echo $id ?>'> <strong class="st-member-name"><?php echo $nick ?></strong> <p class="st-member-pos"><?php echo $rank_name ?></p> ////тут много много <div> </div> </div> </div> <select> <option value="<?php echo $rank ?>"><?php echo $rank_name ?></option> </select> </div> </div> </div> </figcaption> </figure> Фильтры вынесены каждый на кнопку т.е. при нажатии меняется.. Например жму на кнопку Водители и показывает анкеты водителей.. Жму грузчики.. Убирает водителей и показываются грузчики.. Так вот У меня таких должностей 15 и получается страница "бесконечная" оно дублируется или умножает 15*15 и выводит например: nick Вася rank_name Грузчик 15 раз подряд.. ну с этим разберусь думаю тут чтото связано с UPDATE.. так вот в каждой Анкете человека я установила кнопку <select> в которой выбор все должности. И например Вася стал грузчиком а был водителем)) И должно сработать так чтобы отправило Васю из категории грузчики в категорию водители т.е. смена data-group фильтра самой анкеты где был сделан выбор произошла.. Помогите пожалуйста.. Я просто поставила себе такую задачу научится этому я не делаю не для предприятия не деньги за это не получу и т.д. я делаю для себя.. Вот хочу научится так чтобы при выборе в анкете всю анкету перемещало в другую data-group чтобы фильтр принимал ее там.. :cray: но я похоже не в том разделе создала надо было в php но может тут чтото с джейквери.. Мне ненужно чтобы написали мне код мне нужно помочь подтолкнуть что я делаю не так.. Да и думаю тем кто тут давно тоже интересно будет такая задачка но вам легко.. а мне нет я новенькая(:cray: |
echo mysql_error(); - это зачем?
$perform = mysql_query( $select ) or die(здесь вывод ошибок, но выводить их нужно по условию отладки, а вываливать на страницу всем, это плохо); while( $array = @mysql_fetch_array( $perform ) ){ - убрать собаку, и mysql_fetch_assoc, но $id = $array['id']; (и другие) в цикле будет означать, что после окончании цикла $id будет иметь значение последней записи. А вы чего хотите? Расставьте акценты и приоритеты в описании. Многое чего вам хочется реализуется в рамках sql запроса. |
Цитата:
<form id="filter"><fieldset class="group"><label class="btn btn-default"><input type="radio" name="filter" value="Gruz4ik">Грузчик</label></fieldset> </form>где Gruz4ik это и есть то что записано во второй таблице то что и должно выводится вот сюда <figure class="portfolio-item" data-groups='["<?php echo $rank ?>"]'> |
Цитата:
Если запрос возвращает одну запись, зачем же while и select? Если это список должностей (не одна запись), то уже говорилось $id = $array['id']; $rank = $array['rank']; $nick = $array['nick']; $rank_name = $array['rank_name']; это неверно. Цикл в этом случае должен быть в строке 09 кода выводящего список. mysql_fetch_array возвращает два идентичных набора из ресурса, один из которых индексный массив, а второй ассоциативный. Вы используете ассоциации, зачем же получать два набора? Либо используя mysql_fetch_array указывайте вторым параметром нужный набор, либо сразу получать нужное mysql_fetch_assoc. Приведите дампы таблиц своих (значений много не надо, 3-4 записи хватит), иначе еще туманнее чего надо, ибо таблицы не создаются по принципу "латиница значит другая таблица". |
Цитата:
Первая таблица: INSERT INTO `sortable` (`ord`, `id`, `nick`, `rank_name`) VALUES (2, 2, 'Федя', 'Грузчик'), (3, 3, 'Петя', 'Водитель'), (4, 4, 'Маша', 'Оператор'); Вторая таблица: INSERT INTO `sortable2` (`rank`) VALUES ('Gruz4ik'), ('Voditel'), ('Operator'), |
У вас вторая таблица никоим образом не связана с первой, то есть, запрос
SELECT * FROM sortable, sortable2 еще не означает, что он вернет 'Федя', 'Грузчик', 'Gruz4ik'. Зачем хранить это в другой таблице, это вполне можно хранить и в одной. Зачем вообще нужно иметь 'Грузчик' и 'Gruz4ik'? Вам нужно прочесть о нормализации, этим руководствуются при проектировании баз данных. Федя это субъект, а 'Грузчик', 'Водитель', 'Оператор' должность, которую он может иметь, как и другие субъекты Петя, Маша и т.д., то должности и должны быть описаны в другой таблице связанной с первой по идентификатору. Можно и в одной таблице описать и субъектов и должности - полем типа ENUM. Но такой подход оправдан в том случае, если список должностей фиксирован, не изменяется во времени. То есть вам надо сначала иметь грамотную структуру таблиц исходя из ваших данных. Тогда и остальные вопросы будут разрешимы. |
Вложений: 1
Цитата:
Связала идентификаторами как вы сказали вот что получилось во второй таблице.. Я не знаю что такое ENUM но как поняла оно мне не подходит у меня постоянно например будут меняться должности и анкета будет переходить в другую data_group.. в одну я не могу сделать потомучто опять же мне прийдется каждого нового человека например записывать в mysql напрямую таким образом можно и менять то что есть напрямую через таблицу а я хочу сделать чтобы через админку можно было просто щелчком select менять категорию и все.. Хотела изначально просто сделать Вот есть анкета.. Я беру жму добавить - повляется новая анкета я выбираю там должность и вписываю имя и оно создается.. но после того как прочитала гору ненужных и бесполезных энциклопедий в которых например хотела понять что такое JSON а поняла только что она основана Дугласом Крокфордом в 1999 году забила голову ненужной информацией изза этого и сейчас в голове одна каша которую я не могу теперь применить.. Скрипт я этот взяла а не сама писала.. это с сайта где учили как делать drag n drop с сохранением в базу. я просто вырезала сам .draggable скрипт и оставила только чтобы сохраняло в базу.. Вот изза этой каши в голове я не могу нечего реализовать.. Вроде знаю достаточно а применить просто не могу.. Мне ненужно больше нечего мне нужно только сделать чтобы анкета перемещалась на кнопку в другую категорию и все.. остальные мне знания ненужны там дальше верстка просто все проще с базами mysql я не когда не работала потому не могу понять что она хочет от меня.. опять же прочитала кучу энциклопедий как выбирать то и где что надо - опять одна каша и я запуталась уже.. мне нужно легкое действие а информации впитала в себя наверно уже терабайт ненужной))) Вот так сделала как вы сказали.. добавила идентификатор. INSERT INTO `sortable2` (`rank`, `id`) VALUES ('Gryz4ik', 1), ('Voditel', 2), ('Operator', 3), Я видимо обьяснять не умею вот покажу картинкой что имею ввиду)) Я просто не хочу изучить еще килотонну ненужной мне информации ради одного действия :cray: |
Очень трудно читать когда все кучей одним абзацем. Трудно вникать и отделить главное от второстепенного. Поэтому напишу примеры.
Если вторая таблица связана с первой по идентификатору, тогда поучить записи из второй таблицы связанной с первой, это SELECT * FROM sortable LEFT JOIN sortable2 USING(id) ORDER BY ord Сортировать запрос по полю rank второй таблицы нет смысла, так как первичная сортировка производится по полю ord первичной таблицы, с которым из второй таблицы будет связана только одна запись. Насколько я понял таблица sortable2 вообще лишняя, ее записи должны быть помещены в таблицу sortable. Но тут возникают два вопроса: 1) что такое rank_name, 2) что такое rank. Если одно и тоже значение rank_name могут иметь многие несколько субъектов, то это список. Если это список который может динамически добавляться, то выгоднее его описывать в связанной таблице. Если же это уникальные значения у каждого субъекта, то оперировать списком нельзя, если только не вывести такой ради информации. Если rank_name это список, но фиксированный, то есть кроме этих трех значений более нет и не предвидится, то такие данные удобно хранить в поле типа ENUM. Это текстовое представление данных, но во внутреннем представлении, это числа, которыми и оперирует SQL. То же самое относится и к полю rank. Если rank_name и rank это все таки списки, и связанные, то для субъекта изменение значения из первого должно автоматически менять и значение и из второго. На эти вопросы вы так и не даете ответов, а от этого многое зависит. Постановка же вопроса "мне нужно только сделать чтобы анкета перемещалась на кнопку в другую категорию и все" вообще не понятна: что такое категория, что значит переместить анкету в другую категорию - сменить значения rank? Тогда почему rank_name не является в вашем выводе списком (если это действительно список) и не изменяется, эти значения не связаны? Не пишите о drag&drop и прочем не имеющем отношения к вопросу, дайте лучше ответы на вопросы, и конкретно что есть что. |
Цитата:
Дамп таблицы: CREATE TABLE IF NOT EXISTS `sortable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nick` varchar(155) COLLATE utf8_unicode_ci NOT NULL, `rank_name` varchar(155) COLLATE utf8_unicode_ci NOT NULL, `rank` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16 ; INSERT INTO `sortable` (`id`, `nick`, `rank_name`, `rank`) VALUES (1, 'Федя', 'Грузчик', 'one'), (2, 'Вася', 'Водитель', 'two'), (3, 'Гена', 'Оператор', 'three'); Дамп переписала русские слова в ручную потомучто выдало там где ру Гена и все такое хотя кодировка UTF-8 Есть фильтр: <form id="filter"> <fieldset class="group"> <label class="btn btn-default"><input type="radio" name="filter" value="one">Грузчик</label> <label class="btn btn-default"><input type="radio" name="filter" value="two">Водитель</label> <label class="btn btn-default"><input type="radio" name="filter" value="three">Оператор</label> </fieldset> </form> Есть php скрипт который содержится в index.php <?php include( 'db_connection.php' ); $select = "SELECT * FROM sortable ORDER BY id ASC"; // select every element in the table in order by order column //echo mysql_error(); $perform = mysql_query( $select ); //perform selection query //echo mysql_error(); while( $array = @mysql_fetch_assoc( $perform ) ){ //download every row into array $id = $array['id']; $rank = $array['rank']; $nick = $array['nick']; $rank_name = $array['rank_name']; ?> <?php require "body.php" ?> <?php } ?> Тут поменяла ток assoc все работает Есть часть кода в body.php <figure class="portfolio-item" data-groups='["<?php echo $rank ?>"]'> <figcaption> <div class="col-md-4" id='item-<?php echo $id ?>'> <strong class="st-member-name"><?php echo $nick ?></strong> <p class="st-member-pos"><?php echo $rank_name ?></p> Чуть ниже по коду.. <select> <option value="three">Грузчик</option> <option value="two">Водитель</option> <option value="three">Оператор</option> </select> Нужно - при изменении <option> меняется - <filter data-groups='["СЮДА ВЫВОДИТСЯ ТО ЧТО В БЫЛО ВЫБРАНО В <option value="*"> "]'> Пример: Выбираю id=1 nick = Вася rank_name = Грузчик rank=one.. Выбираю в <option> Водитель(rank_name) и ему соответствует rank = two и само "TWO" должно echo вписать и получится <filter data-groups='["two"]'> и оно сработает и вася уже стал грузчик.. Вот что я хочу.. Ответила на все вопросы)) Вот так |
Не цитируйте мои комменты полностью, зачем?
Если ваша база для работы только с русским и английским, то выгоднее не utf8_unicode_ci, а utf8_general_ci. Чтобы был корректный вывод из базы, а не Гена, нужно указывать кодировку соединения сразу после соединения с базой: mysql_query("SET NAMES utf8"); Естественно, также должна определятся и кодировка страниц. Если предполагается использование функций для работы с многобайтными строками, то можно сразу и для них определить кодировку mb_internal_encoding("UTF-8"); $select = "SELECT * FROM sortable ORDER BY id ASC"; // select every element in the table in order by order column //echo mysql_error(); $perform = mysql_query( $select ); //perform selection query //echo mysql_error(); while( $array = @mysql_fetch_assoc( $perform ) ){... Я уже писал, что это плохо и чревато последствиями, почему продолжается? Цитата:
Пусть в некой фирме определены всего четыре должности и иных должностей не предвидится. В данном случае все можно описать одной таблицей используя для описания должностей поле типа ENUM: Код:
CREATE TABLE `structure` ( 1 - Шеф 2 - Бухгалтер 3 - Бригадир 4 - Рабочий Если в выборке указать поле post, то будет выведено соответственное значение как Бухгалтер, Рабочий и т.д., которое определено субъекту. Если же запросить значение этого поля как post+0 post (в старых версиях MySQL так post+0 AS post), то получим не текстовое значение этого поля, а числовое, то есть от 1 до 4, соответственно определенному. Для того чтобы в форме оперировать этим полем как списком (при добавлении/редактировании субъектов), можно получить структуру этой таблицы, ее поля post и получим список <select> <option value="">Выберите ...</option> <option value="1">Шеф</option> <option value="2">Бухгалтер</option> <option value="3">Боигадир</option> <option value="4">Рабочий</option> </select> При этом, если редактирование, то при выводе таблицы из базы можно получать как текстовое значение поля post так и числовое, сравнивая которое в цикле при построении списка со значениями ENUM отметь в списке должность рабочего (selected). Хотя можно проверять и равенство текстовых значений. Записываться в базу при этом будет числовое значение. Это позволяет облегчить проверку ожидаемых данных. Если же должности предполагают дополнения/изменения, то хранить их в поле типа ENUM не выгодно. В этом случае такие данные описывают в связанной таблице. Но если взять этот пример, то в результате получим такой же список, где число будет являться идентификатором этой таблицы. Поле post основной таблицы будет также будет содержать этот идентификатор. Если отношения Таблицы должностей и основной таблицы более сложные, то их связи описываются внешней таблицей связей. То есть не нужно никаких "телодвижений" для того, что из одного набора переместить выбор в другой набор, достаточно просто выбора в списке, который и нужно отправлять серверу. Разберитесь в конце концов что за данные у вас, каково их назначение и создайте нормальную их структуру. Я так и не понял что к чему у вас. Записи в базе типа 1, 'Федя', 'Грузчик', 'one', это искусственное создание проблем. Если я правильно понял из описанного вами. |
Часовой пояс GMT +3, время: 03:50. |