Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
19 страниц V  « < 11 12 13 14 15 > »   
Ответить в данную темуНачать новую тему
> Вопросы по Web-программированию
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
SaneX
сообщение 25.02.2013, 23:11
Сообщение #242


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


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


Сообщение отредактировал SaneX - 25.02.2013, 23:53


--------------------
Перейти в начало страницы
 
SaneX
сообщение 28.02.2013, 20:00
Сообщение #243


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


На этом форуме контент различных вкладок в профиле пользователя показывается через ajax?

Сообщение отредактировал SaneX - 28.02.2013, 20:00


--------------------
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
StUnDeR
сообщение 05.03.2013, 11:56
Сообщение #245


Ололо, старый аккаунт <3
******************

Репутация:   351  
Группа: Участник
Сообщений: 3187
Награды: 6
Регистрация: 25.02.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Switch не легче будет использовать?

Столько элсифов)
Перейти в начало страницы
 
SaneX
сообщение 05.03.2013, 22:47
Сообщение #246


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Ух. Полностью реализовал постраничную навигацию для своего форума, включая все нюансы типа отображение 2-х страниц до и 2-х после текущей страницы, кнопок "на следующую" и "на предыдущую" страницу, кнопок "на первую страницу" и "на последнюю страницу", и всяких условий связанных с этими кнопками, кнопки отображающей блок для ручного ввода нужной страницы, склонения слова "страница" в зависимости от кол-ва страниц в теме и т.п. Мозг сломан, мне нужен сон.

Но появился вопрос - все это дело занимает довольно большое кол-во кода (конкренто вывод div-ов - 40 строк), а мне постраничную навигацию хотелось бы выводить ещё и внизу страницы. Можно как-то вывести туда всё это дело без повторного использования такого кол-ва кода? Мб в php можно как-то сделать ссылку на кусок кода?

upd: попробовал в функцию код пихнуть, но почему-то при вызове функции работает некорректно.

Сообщение отредактировал SaneX - 05.03.2013, 23:40


--------------------
Перейти в начало страницы
 
Son1c
сообщение 05.03.2013, 23:48
Сообщение #247


Продвинутый геймер
********

Репутация:   74  
Группа: Забанен
Сообщений: 359
Награды: 2
Регистрация: 24.08.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 05.03.2013, 21:47) *
Но появился вопрос - все это дело занимает довольно большое кол-во кода (конкренто вывод div-ов - 40 строк), а мне постраничную навигацию хотелось бы выводить ещё и внизу страницы. Можно как-то вывести туда всё это дело без повторного использования такого кол-ва кода? Мб в php можно как-то сделать ссылку на кусок кода?

upd: попробовал в функцию код пихнуть, но почему-то при вызове функции работает некорректно.

Идеальный вариант конечно юзать функции, но если не получается с функцией, можно не выводить 40 строк, а "загнать" их в переменную и потом выводить где угодно и сколько угодно раз.
Перейти в начало страницы
 
SaneX
сообщение 05.03.2013, 23:53
Сообщение #248


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Даже если в этих строках куча других переменных?


--------------------
Перейти в начало страницы
 
Son1c
сообщение 06.03.2013, 00:05
Сообщение #249


Продвинутый геймер
********

Репутация:   74  
Группа: Забанен
Сообщений: 359
Награды: 2
Регистрация: 24.08.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 05.03.2013, 22:53) *
Даже если в этих строках куча других переменных?

Да, а почему нет? Например
Код
                         $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>';
Перейти в начало страницы
 
OlegatoR
сообщение 12.03.2013, 19:02
Сообщение #250


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 08.03.2013, 21:52) *
По какому принципу на форумах реализована панелька "N чел. читают эту тему (и далее перечисление)"?

Есть подозрение что надо делать ещё одну таблицу, при заходе на страницу берем текущее время, и записываем в таблицу с ID пользователя, ID темы форума, временем. А в запросе выводим все неповторяющиеся имена пользователей у которых текущее время - время их посещение <= 5 минут, к примеру. Но тогда, если форум большой, за пару дней такая таблица будет иметь огромное кол-во записей.

Хотя, если при повторном заходе на страницу всего лишь обновлять запись в таблице, то, по идее, макс. кол-во записей в таблице будет равняться: count(пользователей)*count(тем)

Есть таблица, в которой для каждого активного пользователя заводится запись (гость, поисковый бот, залогиненый пользователь и т.д.). При каждом обращении к форуму в этой таблице в записи этого юзера обновляется текущее "местоположение".
Запись существует в таблице от запроса до запроса к форуму. Если в течении ~20 минут от юзера не было никаких обращений - считается что пользователь ушёл оффлайн и запись из таблицы "присутствующих на форуме" удаляется.

Цитата(SaneX @ 05.03.2013, 21:47) *
Можно как-то вывести туда всё это дело без повторного использования такого кол-ва кода? Мб в php можно как-то сделать ссылку на кусок кода?

Выноси в функцию, в качестве параметров передавай всё, что меняется (текущая страница, количество записей на страницу и общее кол-во записей).


--------------------
Перейти в начало страницы
 
SaneX
сообщение 13.03.2013, 19:09
Сообщение #251


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Кто имел дело с Paypal и IPN?

Сообщение отредактировал SaneX - 13.03.2013, 19:17


--------------------
Перейти в начало страницы
 
SaneX
сообщение 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-акк на http://www.000webhost.com/

код:

Код
<?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
}
?>




--------------------
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
SaneX
сообщение 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


--------------------
Перейти в начало страницы
 
SaneX
сообщение 04.04.2013, 15:05
Сообщение #257


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


16 запросов на страницу форума (с учетом запросов по условиям, например на блокировку пользователя или удаления сообщения) это нормально? или многовато?


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 06.04.2013, 18:46
Сообщение #258


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(SaneX @ 04.04.2013, 15:05) *
16 запросов на страницу форума (с учетом запросов по условиям, например на блокировку пользователя или удаления сообщения) это нормально? или многовато?

Более-менее.

Главное в цикл запросы не запихивай, я один раз так сделал - в итоге получил 500 запросов на одну страницу. Неделю сайт проработал, а потом меня попросили "что-нибудь с ним сделать" =)


--------------------
Перейти в начало страницы
 
SaneX
сообщение 07.04.2013, 15:10
Сообщение #259


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Делаю сейчас систему репутации, и столкнулся с проблемой.

У меня репутация изменяется в отдельном новом окне, после изменения, выводится надпись о успешном изменении и кнопка "закрыть окно".


Разумеется, на основной странице форума с сообщениями репутация обновится только после обновления страницы, а хотелось бы, чтоб изменения отобразились одновременно с внесением их в базу данных. На gameru.net репутация мгновенно изменяется без перезагрузки страницы.

Кроме как через AJAX это можно сделать?

Сообщение отредактировал SaneX - 07.04.2013, 15:13


--------------------
Перейти в начало страницы
 
SaneX
сообщение 26.04.2013, 17:08
Сообщение #260


Игровой Бог первой степени
***********************

Репутация:   1167  
Группа: Участник
Сообщений: 9404
Награды: 5
Регистрация: 15.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Посоветуйте хороший бесплатный редактор кода по типу sublime text но обязательно с фичей, чтобы если открываешь файл XXX.PHP, то автоматом бы открывались все его зависимости, инклуднутые php файлы, стили, java скрипты и т.п. как в dreamweaver'е.









--------------------
Перейти в начало страницы
 

19 страниц V  « < 11 12 13 14 15 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 13.05.2024, 02:01