|
|
|
| Нужна помощь.не могу довести до ума скрип что-бы правильно работал.
Ситуация такая: есть таблица с рецептами пользователей, есть страница где в цикле выводятся названия рецептов.Хочу сделать что-бы при нажатии на название рецепта его описание выводилось в всплывающем окне.Проблема в том что при нажатие на название всплывают все окна рецептов. Как сделать что-бы окно всплывало одно и с нужной информацией. Вот скрипт:
$result = mysql_query("SELECT id,name,ingrid,text FROM recept_user WHERE user_id = '$user_id' and cat = '$cat' ORDER BY name LIMIT $start, $num");
$myrow = mysql_fetch_array($result);
do
{
printf ("
<div class='popup tabs_info'>
<a class='close' href='#'>Close</a>
<h2>%s</h2>
<div class='selectTabs'>
<ul class='lineTabs'>
<li class='active'><a href='#'>Ингридиенты</a></li>
<li><a href='#'>Способ приготовления</a></li>
</ul>
<div class='tab_content'>
<div class='tab1'>
<p>%s</p>
</div>
<div class='tab2'>
<p>%s</p>
</div>
</div>
</div>
</div>
<div class='link_group'>
<a class='show_popup' rel='tabs_info' href='#'>%s</a>
</div><br>",$myrow['name'],$myrow['ingrid'],$myrow['text'],$myrow['name']);
}
while($myrow = mysql_fetch_array($result));
?> | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 03:05)
| | >Как сделать что-бы окно всплывало одно и с нужной информацией.
Получать из базы запрашиваемый рецепт, а не все рецепты пользователя:
WHERE user_id = '$user_id' and cat = '$cat' ORDER BY name LIMIT $start, $num"
Не может у одного рецепта быть не ORDER BY ни тем более лимитов. Кроме $user_id,, который, кстати, кавычками обрамлять не обязательно, ибо это число, должен быть и номер рецепта, который и должен быть указан в выборке. | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 03:23)
| | Выбираются все записи с по этими параметрами и сортируются | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 03:43)
| | Я это вижу и без пояснения, по параметрам запроса, об этом и говорю. А вам что надо, конкретный же рецепт, не так ли? Так почему вы гребете все записи?
По уму у вас должна быть таблица пользователей (авторов рецепта, ну или тех кто его разместил), и таблица самих рецептов, которые связаны друг с другом по id пользователя.
Выборка всех рецептов какого-то пользователя непосредственно из таблицы рецептов в том виде как у вас представлено возможна только в том случае, если происходит отдельный запрос по конкретному пользователю.
В случае же, если например запрашивается страница пользователя, а значит и его рецепты, то такого запроса быть не может, это должен быть один запрос с обращением к двум таблицам.
Таблица рецептов кроме id пользователя связывающего таблицы, будет иметь первичный ключ, которым и должен являться номер рецепта, естественно как поле с автоинкрементом. И если, например, это поле имеет имя id_recipe (или сокращенно idr), а id пользователя как idu, то параметр этого запроса к этой таблице должен быть:
'SELECT * ... WHERE idu='.$id_user.' AND idr='.$id_recipe
|
где $id_user - идентификатор пользователя, $id_recipe - идентификатор рецепта (номер) полученные из url (ну или из формы).
И никаких сортировок, если только таблица рецептов не связана, например, с таблицей ингредиентов, которые описываются отдельно в другой таблице, и при выборке их надо отсортировать. Но тогда и запрос будет с вложением.
PS. Если структура данных именно такова как я написал - пользователи одна таблица, рецепты другая, то каждый номер рецепта уникален, а значит для запроса достаточно только его, и url на странице достаточно иметь только этот параметр. | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 03:58)
| | Да согласен,но я не стал заморачиваться с подвязками а просто сделал при записи рецепта в таблицу записывается и id пользователя. На странице пользователя в цикле выводятся его рецепты.Все нормально выводится, проблема в всплывающем окне. Не могу подвязать окно к конкретному рецепту.При нажатии на название рецепта должно всплыть окно с со все инфой по рецепту.Максимум что добился это всплывают сразу окна всех рецептов.Два дня воюю вот прошу помощи знатоков. | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 10:20)
| | И как вам еще объяснить? Я вам разве не написал, что запрос в таблицу рецептов нужно делать не по id пользователя, а по id рецепта, если у вас таблица рецептов адекватная и содержит уникальные номера рецептов. А id рецепта должны быть прописаны в ссылках при выводе страницы с рецептами.
Что не понятного? | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 10:28)
| | Что то я начинаю путаться.Это страница пользователя и выборка должна быть по его id его же рецептов.Таблица рецептов общая для всех пользователей,как выбрать все рецепты конкретного пользователя по id рецепту? | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 10:44)
| | Вопросы по выборке из базы нужно задавать в соответствующем разделе, и с пояснением структуры данных своих, иначе бог значит чего вы делаете и чего от нас хотите.)
Например, у вас есть таблица пользователей users, в которой под uid есть пользователи, с именем в поле name:
Они разместили свои рецепты в таблице recipe, в которой тоже есть поле uid равное uid пользователя из таблицы users, то есть по этому полю мы знаем кому принадлежит тот или иной рецепт этой таблицы. Но первичным ключом этой таблицы является поле rid, под которым в эту таблицу добавляются рецепты, а так как это поле с автоинкрементом, то номер каждого рецепта уникален. Эта таблица содержит краткое изложение рецепта, пусть в поле short, и полное его описания, пусть в поле full.
Глаша поместила в эту таблицу рецепты:
1, 1, Борщ, Вкуснятина
2, 1, Суп, Пальчики оближешь
3, 1, Котлеты, Сожрешь если голодный
|
Клаша вообще спец по котлетам и поэтому завалила таблицу исключительно котлетами, но ее котлеты совсем под другими номерами:
4, 2, Котлеты с хреном, Ваще что-то
5, 2, Котлеты без хрена, А запах...
6, 2, Котлеты свежие, Сами за себя говорят
|
Откуда-то из далеча приходит запрос под параметром "u" на страницу Клаши, чего она там на готовила? Узнаем:
<?
if($usr = (int)$_GET['u']) {
if($q = mysql_query('SELECT usr.*, rcp.rid, rcp.short
FROM users usr
LEFT JOIN recipe rcp
USING(uid)
WHERE uid = '.$usr.'
ORDER BY rcp.rid')) {
if(mysql_num_rows($q)) {
$usr = '<h3>'.htmlspecialchars($r['name']).'</h3>';
while($r = mysql_fetch_assoc($q)) $usr .= '<p>'.htmlspecialchars($r['short']).' <span data-rcp="'$r['rid']'">Подробнее</span></p>';
echo $usr;
} else echo 'Клаша еще не приготовила';
} else echo 'Извините, но столовая закрылась на ремонт';
} else echo 'Такого повара у нас нет';
|
Если всплывает что-то, это значит Ajax, поэтому обработчик щелчков span должен передать на сервер id рецепта из его атрибута data. Надо ли еще раз повторить, что так как номера рецептов уникальны, то запрашивая котлеты Клаши мы никак не получим котлеты Глаши, а именно Клашины? Надо ли пояснять еще раз, что для запроса именно конкретных котлет Клаши, достаточно в таблице recipe сделать запрос только по номеру рецепта?
<?
if($rid = (int)$_POST['r']) { //где $_POST['r'] - id рецепта переданного Ajax
If($q = mysql_query('SELECT full FROM recipe WHERE rid='.$rid)) {
//получение и ответ сервера
}
} else echo 'Таких котлет Клаша еще не сентезировала';
|
Первый запрос с подробностями для исключения "почему". Что еще пояснять? | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 11:33)
| | Может я не правильно сформулировал вопрос, но у меня подозрение что мы не понимаем друг друга. Опишу весь алгоритм.
1.Есть сайт и на сайте есть раздел "Мои рецепты" куда пользователь заносит свои рецепты(типа записной книги)
2.При переходу на эту вкладку авторизуется и попадает на свою закрытую страницу.
3. На странице навигация рецептов разбитым по категориям. При нажатие на категорию формируется список рецептов данной категории данного юзера. Названия рецептов выведены на страницу. Вот здесь у меня не получается сделать так, что бы при нажатии на название рецепта всплывало окно с полным описанием его.В том то и соль что не могу передать id рецепта.Функция вывода окна записана в этом же скрипте. Как можно сделать что бы страница передала запрос самой себе. | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 12:15)
| | Из всего того что вы написали я понимаю все, вот только 1, 2 и 3 по большей части к вашей проблеме отношения не имеют.
Открыть нечто в слое на странице можно запросив сервер асинхронным запросом, предав параметр характеризующий конкретные данные. Что за параметр и как делать запрос я вам по полочкам описал выше. Если вы этого не понимаете, тогда я не знаю как вам еще это объяснять.
Если на страницу выводится все о рецептах, то какое отношение имеет ваш код вывода к проблеме? Если выводится все, но подробности невидимы, и их надо в видимом слое показать, то это Javascrpit. | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 12:27)
| | Честно говоря я делаю этот сайт для самообразования и не факт что я его когда нибуть выволю в инет. С асинхронными запросами не сталкивался, я так понимаю это передача запроса страницы самой себе.Пытался отправить id рецепта самой себе не получилось.
<a class='show_popup' rel='tabs_info' href='../mystr_cat.php?id=%s'> | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 14:34)
| | Вы не рассказывайте о личных кабинетах и прочем не относящемся к проблеме, лучше покажите дампы своих таблиц (пользователей и рецептов), и запрос которым пытаетесь получить рецепт.
А так что вам ответить? Как получить, я уже все написал, а Ajax не Ajax, это вопрос десятый, как и показать во всплывающем окне, сначала просто понять надо что делать, а остальное уже прикрутить. | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 14:39)
| | Данные получены и сохранены в переменный.Как передать данные плагину всплывающего окна скрипт которого написан на этой же страницы. | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 15:06)
| | echo, ptint - это конструкции РНР выводящие данные. Если обмен происходит посредством JSON, то предварительно требуется привести данные к этому типу - json_encode().
Понятно? Нет? А вы думаете мне понятно, что у вас там за плагин и что вы делаете?
Я же вам сказал - хотите получить конкретный ответ базирующийся на ваших исходных данных, показывайте их, а не задавайте вопросов-загадок. | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 15:14)
| | База рецептов
id
user_id
cat
name
ingrid
text
Запрос и выборка
<?
$result = mysql_query("SELECT id,name,ingrid,text FROM recept_user WHERE user_id = '$user_id' and cat = '$cat' ORDER BY name LIMIT $start, $num");
$myrow = mysql_fetch_array($result);
do
{
printf ("
<div class='link_group'>
<a class='show_popup' rel='tabs_info' href='../mystr_cat.php?id=%s'>%s</a>
</div><br>",$myrow['id'],$myrow['name']);
}
while($myrow = mysql_fetch_array($result));
?>
Плагин popup:
<div class="popup tabs_info">
<a class="close" href="#">Close</a>
<h2>Вкладки (tabs)</h2>
<div class="selectTabs">
<ul class="lineTabs">
<li class="active"><a href="#">Ингредиенты</a></li>
<li><a href="#">Способ приготовления</a></li>
</ul>
<div class="tab_content">
<div class="tab1">
<p>Нужно подставить $myrow['ingrid']</p>
</div>
<div class="tab2">
<p>Нужно подставить $myrow['text']</p>
</div>
</div>
</div>
</div> | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 15:50)
| | $result = mysql_query("SELECT id,name,ingrid,text FROM recept_user WHERE user_id = '$user_id' and cat = '$cat' ORDER BY name LIMIT $start, $num");
Это запрос всех рецептов пользователя, и это я вам повторял уже дважды.
Запрос за конкретным рецептом нужно делать не так, как, я вам уже показывал - смотрите выше пример, в нем нужно только имена полей заменить на ваши и будет выбор нужного.
do
{
printf ("
<div class='link_group'>
<a class='show_popup' rel='tabs_info' href='../mystr_cat.php?id=%s'>%s</a>
</div><br>",$myrow['id'],$myrow['name']);
}
while($myrow = mysql_fetch_array($result));
?>
выбрасывать в помойку и немедленно! Как делать вывод в примере моем тоже есть.
<div class="popup tabs_info">
<a class="close" href="#">Close</a>
<h2>Вкладки (tabs)</h2>
<div class="selectTabs">
<ul class="lineTabs">
и так далее
плагином не является, это просто html-код. Вот как вам еще объяснить еще даже и не знаю.
Научитесь сперва просто получать конкретный рецепт без всяких окошек всплывающих, а обычно, с переходом на страницу этого рецепта, как делать запрос я написал. Может тогда придет понимание что к чему, и что в этом главное не ваш "плагин" в кавычках и как воткнуть, а как получить эти данные из базы. | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 16:00)
| | Мы толчем воду в ступе...как заносить и вытаскивать данные из бд и вставлять где надо я в курсе.
Уперся только с popup. как вставить в него данные взятые из бд. | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 16:31)
| | Вам что еще надо растолковать, чтобы вы поняли, что это не popup?
Если вы все знаете, получаете уже именно конкретный рецепт, то почему:
1. в который раз приводите код запроса совсем не относящийся к запросу к рецепту конкретному?
2. почему вместо п. 1 вы не показываете код получения этого рецепта на клиенте, из которого было бы понятно что вас уже сделано, и дать вам конкретный ответ?
3ю почему указывая на код, который не является никаким окном, вы при этом спрашиваете как вставить в него ключ запроса из п. 1, который уже бог знает в какой раз повторяю, не является запросом к рецепту?
Кто толчет в ступе я или может все таки вы? | |
|
|
|
|
 130 Кб |
|
|
для: confirm
(11.02.2014 в 16:43)
| | Я не знаю как еще обьяснить | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 17:03)
| | Я тоже )
Давайте забудем на время о ваши пользователях и рецептах, и будем говорить отвлеченно, о том как можно вывести подобие окна на странице.
Скажу сразу попутно, хотя повторно, тот код который вы применяете, это гадкая пакость, совсем ненужная и бесполезная для этой задачи. Выкопали вы его видимо на просторах интернета еще времен докрепостных. Лучше найти онлайн учебники современные, и начинать изучение с задач более простых.
И так вывод "в окошечко".
Это можно сделать двумя путями:
1. Сразу выводить все на страницу - ссылки/кнопки вызывающие эти окошечки с необходимым параметром и содержимое для этих окошек. Только кнопки ссылки видимы, а вот содержимое скрыто (имеет такой стиль по умолчанию, и имеют абсолютное позиционирование).
2. На страницу выводятся только ссылки/кнопки вызова этих окошек. Ссылка/кнопка как и в первом случае содержат параметры запроса.
Непосредственное решение.
1. Для этого способа все решается на клиенте посредством Javascript, то есть достаточно скрытое загруженное содержимое сделать видимым.
2. Для второго случая требуется асинхронный запрос к серверу, на который передается параметр указывающий какие данные получить из базы, клиент ждет ответ сервера, сервер отвечает, клиент получив данные опять посредством Javascript помещает эти данные в создаваемый слой выполняющий роль окна.
Вы сказали, что все у вас Ок и знаете как получить конкретный рецепт, но этого не показываете. Возможно вы ошибаетесь принимая одно за другое (по незнанию), и у вас версия 1, и вы не знаете только как вывести эти скрытые блоки сразу со ссылками, то ответ прост - там же где выводятся и ссылки, в той части кода.
Если знаете действительно и проблемы как вставить готовый ответ, то где код действительно этого окна, запроса и возврата ответа сервера?
Кто вам сможет ответить на ваш вопрос догадываясь чего у вас там есть?
Если вообще ни черта нет, что более всего вероятнее, тогда нужна искать примеры подобных уроков в сети, или написать тут с просьбой показать такой пример от А до Я. | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 17:29)
| | 2. На страницу выводятся только ссылки/кнопки вызова этих окошек. Ссылка/кнопка как и в первом случае содержат параметры запроса.
2. Для второго случая требуется асинхронный запрос к серверу, на который передается параметр указывающий какие данные получить из базы, клиент ждет ответ сервера, сервер отвечает, клиент получив данные опять посредством Javascript помещает эти данные в создаваемый слой выполняющий роль окна.
Вот именно то что у меня не получается..с явой раньше не сталкивался и асинхронный запросов не делал. | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 17:59)
| | Можете подключить библиотеку jQuery, и лучше с ресурсов Гугла, вот так:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
Под jQuery написано много плагинов таких окошек, которые сами могут делать Ajax запросы и помещать ответ, нужно только передать в плагин необходимые параметры запроса. Для применения плагина достаточно почитать справку о нем на странице разработчика (некоторые описаны и на русскоязычных ресурсах, нужно просто поискать).
Как самому написать асинхронный запрос и поместить ответ сервера в нужный элемент на странице можно почитать тут, где описана укороченная версия асинхронного POST запроса. Там есть и пример, если внимательно читать и попробовать, то разобраться не сложно.
Ну а если проблемы будут именно как поместить, то этот вопрос задавайте не в этом разделе, а в HTML. | |
|
|
|
|
|
|
|
для: confirm
(11.02.2014 в 18:21)
| | а такая простая задача то была....
:D | |
|
|
|
|
|
|
|
для: moonfox
(12.02.2014 в 04:45)
| | Задача то простая, беда только в том, что он не понимает, что выполняет совсем не то.
Попытайтесь вы ему это объяснить, может у вас это получится. | |
|
|
|
|
|
|
|
для: vlggera
(11.02.2014 в 15:50)
| |
что за маразм?
1. SELECT ... FROM .... WHERE `user_id` - выборка всех рецептов пользователя
2. SELECT .... FROM .... WHERE `id` - выборка содержимого конкретного рецепта
|
далее в тексте страницы название рецептов
например:
<a href="/no-js-recept?id=25" onclick="showrecept(25);">КАША ГРЕЧНЕВАЯ</a>
ну или просто вешайте id ссылкам и отлавливайте id по нажатию родитель-ссылка
<div class="link">
<a id="a25">каша</a>
<a id="a26">суп</a>
</div>
что-то типа:
$('.link a').on('click', function(){
$(this).attr('id');
});
|
далее в теле страницы размещаем div id="mydiv" со стилем display none и позиционируем его, например, по центру - это контейнер для содержимого рецепта
далее вешаем jquery в тело страницы
далее пишем js код что-то типа того:
function showrecept(id)
{
$.get(
"/showrecept.php",
{
id:id
},
onAjaxSuccess
);
return false;
}
function onAjaxSuccess(data)
{
// Здесь мы получаем данные, отправленные сервером и выводим их на экран.
меняем у div id="mydiv" display="block"
print data;
}
в showrecept.php пишем выборку по id из GET рецепта и формируем страницу
|
читаем ман
http://jquery.page2page.ru/index.php5/Ajax_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_GET
ну или загружать php вот так
http://jquery.page2page.ru/index.php5/Ajax_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_HTML-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85
так более понятней)))) | |
|
|
|
|
|
|
|
для: moonfox
(12.02.2014 в 16:01)
| | Спасибо большое всем за подсказку.Путь ясен буду читать, пробовать.. | |
|
|
|
|