Вопросы по Web-программированию |
Здравствуйте, гость ( Авторизация | Регистрация )
Вопросы по Web-программированию |
25.02.2013, 17:01
Сообщение
#241
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Я тут диплом пишу и возник вопрос:
есть запрос вида Цитата $topic_last_post_autor_rows = mysql_query("SELECT posts.post_autor, posts.post_time FROM topics, posts WHERE topics.razdel_id='$_GET[razdel]' AND posts.topic_id=topics.topic_id GROUP BY topics.topic_id ORDER BY posts.post_time DESC"); По замыслу он должен смотреть таблицу posts, искать в ней автора и дату последнего сообщения и выводить их в порядке убывания. Но на деле, если сообщений несколько, то он берет автора и дату самого первого сообщения из поста и выводит их в порядке убывания. Как поправить? Есть идеи? Пример: вот на картинке 2 сообщения, запрос выдаст дату и автора первого сообщения. ID сообщений в разных темах общий, т.е. в 1-й теме сообщение будет иметь ID 1, в другой теме следующее сообщение будет с ID 2. Сообщение отредактировал SaneX - 25.02.2013, 17:07 -------------------- |
 
|
|
|
|
25.02.2013, 23:11
Сообщение
#242
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Все, уже не актуально, спустя 5 часов головоломки таки реализовал.
Сообщение отредактировал SaneX - 25.02.2013, 23:53 -------------------- |
 
|
|
28.02.2013, 20:00
Сообщение
#243
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
На этом форуме контент различных вкладок в профиле пользователя показывается через ajax?
Сообщение отредактировал SaneX - 28.02.2013, 20:00 -------------------- |
 
|
|
05.03.2013, 10:32
Сообщение
#244
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Есть код:
Код if ($post_count_for_pages_number==1){ $pageviewselectorleft=0; $pageviewselectorright=0; } elseif ($post_count_for_pages_number==2){ if (empty($_GET['page']) or $_GET['page'] == 1){ $pageviewselectorleft=0; $pageviewselectorright=1; } else { $pageviewselectorleft=1; $pageviewselectorright=0; } } elseif ($post_count_for_pages_number==3){ if (empty($_GET['page']) or $_GET['page'] == 1){ $pageviewselectorleft=0; $pageviewselectorright=2; } elseif ($_GET['page'] == 2){ $pageviewselectorleft=1; $pageviewselectorright=1; } elseif ($_GET['page'] == 3){ $pageviewselectorleft=2; $pageviewselectorright=0; } } elseif ($post_count_for_pages_number>3){ $pageviewselectorleft=2; $pageviewselectorright=2; switch ($_GET['page']){ case '1': $pageviewselectorleft=0; break; case '2': $pageviewselectorleft=1; break; case $post_count_for_pages_number: $pageviewselectorright=0; break; case ($post_count_for_pages_number-1): $pageviewselectorright=1; break; } } Можно ли его как-то уменьшить, сохранив при этом все условия? Сообщение отредактировал SaneX - 05.03.2013, 10:32 -------------------- |
 
|
|
05.03.2013, 11:56
Сообщение
#245
|
|
Ололо, старый аккаунт <3 Репутация: 351 Группа: Участник Сообщений: 3187 Награды: 6 Регистрация: 25.02.2009 |
Switch не легче будет использовать?
Столько элсифов) |
 
|
|
05.03.2013, 22:47
Сообщение
#246
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Ух. Полностью реализовал постраничную навигацию для своего форума, включая все нюансы типа отображение 2-х страниц до и 2-х после текущей страницы, кнопок "на следующую" и "на предыдущую" страницу, кнопок "на первую страницу" и "на последнюю страницу", и всяких условий связанных с этими кнопками, кнопки отображающей блок для ручного ввода нужной страницы, склонения слова "страница" в зависимости от кол-ва страниц в теме и т.п. Мозг сломан, мне нужен сон.
Но появился вопрос - все это дело занимает довольно большое кол-во кода (конкренто вывод div-ов - 40 строк), а мне постраничную навигацию хотелось бы выводить ещё и внизу страницы. Можно как-то вывести туда всё это дело без повторного использования такого кол-ва кода? Мб в php можно как-то сделать ссылку на кусок кода? upd: попробовал в функцию код пихнуть, но почему-то при вызове функции работает некорректно. Сообщение отредактировал SaneX - 05.03.2013, 23:40 -------------------- |
 
|
|
05.03.2013, 23:48
Сообщение
#247
|
|
Продвинутый геймер Репутация: 74 Группа: Забанен Сообщений: 359 Награды: 2 Регистрация: 24.08.2007 |
Но появился вопрос - все это дело занимает довольно большое кол-во кода (конкренто вывод div-ов - 40 строк), а мне постраничную навигацию хотелось бы выводить ещё и внизу страницы. Можно как-то вывести туда всё это дело без повторного использования такого кол-ва кода? Мб в php можно как-то сделать ссылку на кусок кода? upd: попробовал в функцию код пихнуть, но почему-то при вызове функции работает некорректно. Идеальный вариант конечно юзать функции, но если не получается с функцией, можно не выводить 40 строк, а "загнать" их в переменную и потом выводить где угодно и сколько угодно раз. |
 
|
|
05.03.2013, 23:53
Сообщение
#248
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Даже если в этих строках куча других переменных?
-------------------- |
 
|
|
06.03.2013, 00:05
Сообщение
#249
|
|
Продвинутый геймер Репутация: 74 Группа: Забанен Сообщений: 359 Награды: 2 Регистрация: 24.08.2007 |
Даже если в этих строках куча других переменных? Да, а почему нет? Например Код $floors_html .= '<div id="kv_floor'.$floor->id.'" class="floor_cont">';
$floors_html .= '<div class="back_to_house" onclick="backtoKvartal('.$floor->id.', '.$kvartal->id.', '.$kvartal_or_width.', '.$house->id.', '.$h_or_width.');"><span>'.JText::_('PLG_FLOORPLAN_BACK_TO_HOUSE').'</span></div>'; $floors_html .= '<div class="floor_img" style="width: '.($percent[0] ? $percent[0] : 50).'%;">'; $floors_html .= '<div class="leftside"><div class="floor_desc">'.$floor->title.' '; $floors_html .= '<a href="/images/floorplan/'.$floor->img.'" title="'.$floor->title.'" class="zoom_icon" rel="lightbox"><img src="/plugins/content/floorplan/lightbox/zoom.png" title="'.JText::_('PLG_FLOORPLAN_ZOOM_PLAN').'" class="map" /></a>'; $floors_html .= '</div>'; $floors_html .= '<div id="kv_floor_cntnr'.$floor->id.'"><span class="ramka_left"><img class="map" id="kv_floorimg'.$floor->id.'" src="/images/floorplan/'.$floor->img.'" alt="Floor'.$floor->id.'" usemap="#kv_Floor'.$floor->id.'" '.$style.'/></span></div>'; $floors_html .= '</div></div>'; |
 
|
|
12.03.2013, 19:02
Сообщение
#250
|
|
Gameru DA Репутация: 3704 Группа: Администратор Сообщений: 10206 Награды: 4 Регистрация: 03.02.2006 |
По какому принципу на форумах реализована панелька "N чел. читают эту тему (и далее перечисление)"? Есть подозрение что надо делать ещё одну таблицу, при заходе на страницу берем текущее время, и записываем в таблицу с ID пользователя, ID темы форума, временем. А в запросе выводим все неповторяющиеся имена пользователей у которых текущее время - время их посещение <= 5 минут, к примеру. Но тогда, если форум большой, за пару дней такая таблица будет иметь огромное кол-во записей. Хотя, если при повторном заходе на страницу всего лишь обновлять запись в таблице, то, по идее, макс. кол-во записей в таблице будет равняться: count(пользователей)*count(тем) Есть таблица, в которой для каждого активного пользователя заводится запись (гость, поисковый бот, залогиненый пользователь и т.д.). При каждом обращении к форуму в этой таблице в записи этого юзера обновляется текущее "местоположение". Запись существует в таблице от запроса до запроса к форуму. Если в течении ~20 минут от юзера не было никаких обращений - считается что пользователь ушёл оффлайн и запись из таблицы "присутствующих на форуме" удаляется. Можно как-то вывести туда всё это дело без повторного использования такого кол-ва кода? Мб в php можно как-то сделать ссылку на кусок кода? Выноси в функцию, в качестве параметров передавай всё, что меняется (текущая страница, количество записей на страницу и общее кол-во записей). -------------------- |
 
|
|
13.03.2013, 19:09
Сообщение
#251
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Кто имел дело с Paypal и IPN?
Сообщение отредактировал SaneX - 13.03.2013, 19:17 -------------------- |
 
|
|
14.03.2013, 12:06
Сообщение
#252
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Ничего не понимаю. Пытаюсь прикрутить IPN к сайту. При тестировании средствами paypal-а, ошибка - IPN Delivery Failed. HTTP error code 400: Bad Request.
Код IPN скрипта взят прям с сайта paypal'а, так-же пробовал и друие скрипты - везде 400-я ошибка. Может быть это зависит от хостинга? У меня сейчас free-акк на код: Код <?php // STEP 1: Read POST data // reading posted data from directly from $_POST causes serialization // issues with array data in POST // reading raw POST data from input stream instead. $raw_post_data = file_get_contents('php://input'); $raw_post_array = explode('&', $raw_post_data); $myPost = array(); foreach ($raw_post_array as $keyval) { $keyval = explode ('=', $keyval); if (count($keyval) == 2) $myPost[$keyval[0]] = urldecode($keyval[1]); } // read the post from PayPal system and add 'cmd' $req = 'cmd=_notify-validate'; if(function_exists('get_magic_quotes_gpc')) { $get_magic_quotes_exists = true; } foreach ($myPost as $key => $value) { if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { $value = urlencode(stripslashes($value)); } else { $value = urlencode($value); } $req .= "&$key=$value"; } // STEP 2: Post IPN data back to paypal to validate $ch = curl_init('https://www.paypal.com/cgi-bin/webscr'); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $req); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); // In wamp like environments that do not come bundled with root authority certificates, // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path // of the certificate as shown below. // curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); if( !($res = curl_exec($ch)) ) { // error_log("Got " . curl_error($ch) . " when processing IPN data"); curl_close($ch); exit; } curl_close($ch); // STEP 3: Inspect IPN validation result and act accordingly if (strcmp ($res, "VERIFIED") == 0) { // check whether the payment_status is Completed // check that txn_id has not been previously processed // check that receiver_email is your Primary PayPal email // check that payment_amount/payment_currency are correct // process payment // assign posted variables to local variables $item_name = $_POST['item_name']; $item_number = $_POST['item_number']; $payment_status = $_POST['payment_status']; $payment_amount = $_POST['mc_gross']; $payment_currency = $_POST['mc_currency']; $txn_id = $_POST['txn_id']; $receiver_email = $_POST['receiver_email']; $payer_email = $_POST['payer_email']; } else if (strcmp ($res, "INVALID") == 0) { // log for manual investigation } ?> -------------------- |
 
|
|
21.03.2013, 23:25
Сообщение
#253
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Проблема как никогда актуальна =(
Хм. Походу, я реализовал то, что мне было нужно БЕЗ использования IPN, а именно, без оплаты через PayPal, на страницу сайта с выдачей ссылки не попадешь. Сделал так: в return_url к пейпалу отправляем сгенерированную ссылку вида Код http://kursovik/geturl.php?fn=result.php&key=".$secret." Где $secret - md5 сумма, генерирующаяся каждые 300 секунд (вполне достаточно для оплаты через Paypal). Ссылка генерируется после нажатия кнопки оплатить, перед открытием PayPal. Страница result.php заблокирована через htaccess. Страница geturl.php, без единственно верного параметра key будет выдавать ошибку, и только с верным key, выдаст верную страницу с ссылкой на скачивание файла. А ссылка, собственно, будет видна только на сайте PayPal'а, после оплаты. UPD: проверил - все работает, ссылка сменяется каждые 300 секунд. Собственно есть ли обход такого способа? Собственно, даже если и есть способы обхода, то для диплома такого способа будет достаточно. Сообщение отредактировал SaneX - 22.03.2013, 00:23 -------------------- |
 
|
|
22.03.2013, 00:40
Сообщение
#254
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Upd2: так, пока только одна проблема, у меня ссылка генерируется каждые 600 секунд таким кодом:
Код $timeout = 600; $secret = md5((int)(time() / $timeout)); И в момент перехода на PayPal, когда ссылка отправляется PayPal'у, до момента, когда ссылка сгенерируется снова, может оставаться, например, 30 секунд, соответственно, после прохождения оплаты, при возврате на страницу по сгенерированной ссылке, страница эта уже не будет существовать, и попасть на неё можно будет только через новую ссылку. По идее, надо сделать так, что бы начало отсчета 600 секунд началось в момент перехода на PayPal. Сообщение отредактировал SaneX - 22.03.2013, 00:50 -------------------- |
 
|
|
23.03.2013, 14:52
Сообщение
#255
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Цитата По идее, надо сделать так, что бы начало отсчета 600 секунд началось в момент перехода на PayPal. Долго писал какую то фигню, а в итоге сделал так - проверяю ключ из ссылки как с текущим Код md5((int)(time() / $timeout)) , так и с предыдущим Код md5(((int)(time() / $timeout))-1) ключом.Сообщение отредактировал SaneX - 23.03.2013, 14:55 -------------------- |
 
|
|
27.03.2013, 14:31
Сообщение
#256
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Цитата Есть таблица, в которой для каждого активного пользователя заводится запись (гость, поисковый бот, залогиненый пользователь и т.д.). При каждом обращении к форуму в этой таблице в записи этого юзера обновляется текущее "местоположение".Запись существует в таблице от запроса до запроса к форуму. Если в течении ~20 минут от юзера не было никаких обращений - считается что пользователь ушёл оффлайн и запись из таблицы "присутствующих на форуме" удаляется. Спасибо, сделал у себя так:Осталось прикрутить удаление записей (старше 15 минут) из бд. Я так понимаю, что можно просто сделать на странице запрос на удаление всех записей, где Код date(y-m-d H:i:s) - date_из_БД(y-m-d H:i:s) > 15 ?UPD: кажись работает. Сообщение отредактировал SaneX - 27.03.2013, 14:44 -------------------- |
 
|
|
04.04.2013, 15:05
Сообщение
#257
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
16 запросов на страницу форума (с учетом запросов по условиям, например на блокировку пользователя или удаления сообщения) это нормально? или многовато?
-------------------- |
 
|
|
06.04.2013, 18:46
Сообщение
#258
|
|
Gameru DA Репутация: 3704 Группа: Администратор Сообщений: 10206 Награды: 4 Регистрация: 03.02.2006 |
16 запросов на страницу форума (с учетом запросов по условиям, например на блокировку пользователя или удаления сообщения) это нормально? или многовато? Более-менее. Главное в цикл запросы не запихивай, я один раз так сделал - в итоге получил 500 запросов на одну страницу. Неделю сайт проработал, а потом меня попросили "что-нибудь с ним сделать" =) -------------------- |
 
|
|
07.04.2013, 15:10
Сообщение
#259
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Делаю сейчас систему репутации, и столкнулся с проблемой.
У меня репутация изменяется в отдельном новом окне, после изменения, выводится надпись о успешном изменении и кнопка "закрыть окно". Разумеется, на основной странице форума с сообщениями репутация обновится только после обновления страницы, а хотелось бы, чтоб изменения отобразились одновременно с внесением их в базу данных. На gameru.net репутация мгновенно изменяется без перезагрузки страницы. Кроме как через AJAX это можно сделать? Сообщение отредактировал SaneX - 07.04.2013, 15:13 -------------------- |
 
|
|
26.04.2013, 17:08
Сообщение
#260
|
|
Игровой Бог первой степени Репутация: 1167 Группа: Участник Сообщений: 9404 Награды: 5 Регистрация: 15.03.2007 |
Посоветуйте хороший бесплатный редактор кода по типу sublime text но обязательно с фичей, чтобы если открываешь файл XXX.PHP, то автоматом бы открывались все его зависимости, инклуднутые php файлы, стили, java скрипты и т.п. как в dreamweaver'е.
-------------------- |
 
|
|
Текстовая версия | Сейчас: 23.05.2024, 18:58 |