PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (31): В начало « ... 4 5 6 7 [8] 9 10 11 12 ... » В конец

> Найдено сообщений: 463
Prizma Отправлено: 30 Января, 2016 - 13:26:48 • Тема: Не видит параметры GET • Форум: Вопросы новичков

Ответов: 5
Просмотров: 674
MrSullex пишет:
Код почему то не видит параметры GET запросы. Перехожу по /account/register?refid=1 и в итоге значение 1 он не видит, а записывает значение 0. В чем проблема?
MrSullex пишет:
RewriteRule ^(.*)$ index.php?action=$1 [L,QSA]

короче ваш запрос преобразовывается к виду:
index.php?action=/account/register?refid=1
Если запрос будет такого рода, то параметры должны в $_GET появится:
/account/register&refid=1

Если же не хотите менять запрос сделайте вот так:
PHP:
скопировать код в буфер обмена
  1. $getString = explode('?',$_SERVER['HTTP_REFERER']);
  2. $getString = $getString[2];
  3. $getString = explode('&',$getString);
  4. $get = [];
  5. foreach($getString as $param) {
  6.     $param = explode('=',$param);
  7.     $get[$param[0]] = $param[1];
  8. }
  9. // Теперь в $get будут все ваши параметры переданные после ? в запросе
  10. // а в $_GET['action'] будет относительная ссылка на страницу без параметров
Prizma Отправлено: 30 Января, 2016 - 12:01:46 • Тема: подсчет рефералов • Форум: Вопросы новичков

Ответов: 10
Просмотров: 536
Рачей пишет:
Да примерно так, спасибо. Жаль кнопку спасибо нажать не могу, говорит сообщений мало. Сколько же их надо набрать и смысл в этом наборе...

Мне не совсем понятно зачем тут (($p = getParent($userId)) > 0)
больше нуля? Оно может быть равно или меньше?

и тут
$k = [0.2,0.05, 0.0125 ...]; // коэффициент
если тут он руками задан руками...

Я исходил из того, что функция getParent селектит из базы данных id пользователя который пригласил этого пользователя. Результат записываем в $p, однако если учесть, что пользователя возможно некто не пригласил, тогда функция getParent вернет 0, и цикл прервется т.к. дойдет до логического предела цепочки.

Ну в первом примере коэффициент задан руками для каждого уровня, однако вместо этого можно сделать, как я описал в предыдущем посте:
PHP:
скопировать код в буфер обмена
  1. $userId = 115; // id реферала
  2. function getParent($userId) {
  3.     /* ... */
  4.     return $parentId;
  5. }
  6. $i = 0;
  7. $k = 0.1; // 10%
  8. $s = 30; // число от которого считать бонусы допустим в рублях
  9. while(($p = getParent($userId)) > 0) {
  10.     $k /= 2;
  11.     $bonus = $s*$k; // в руб.
  12.     if($bonus < 0.01) {
  13.         break; // если сумма меньше одной копейки прерываем цикл т.к. считать уже нечего
  14.     }
  15.     echo sprintf('Пользователю %s получит вознаграждение в размере %.2F%% от пользователя %s',
  16.         $p, $bonus, $userId);
  17.     // обновляем данные для следующего уровня
  18.     $userId = $p;
  19.     $s = $bonus;
  20.     $i++;
  21. }
  22.  
Prizma Отправлено: 30 Января, 2016 - 02:07:24 • Тема: Вывод значений двумерного ассоциативного массива • Форум: Вопросы новичков

Ответов: 8
Просмотров: 13637
Это то что вы там написали...
PHP:
скопировать код в буфер обмена
  1. $array[1] = array("Name1"=> array("2"=>"1460","3"=>"1868","4"=>"2158","5"=>"2537","6"=>"2915","8"=>"3673"));
  2. $array[2] = array("Prod2"=> array("3"=>"3079","4"=>"3625","5"=>"4172","6"=>"4718","8"=>"5811"));
  3. $cnt = 0;
  4. for ($x = 0; $x < 100; $x++) {    
  5.     $product = $array[$x]; // dynamic all product`s - $name
  6.     foreach ($product as $good =>$massiv) {
  7.         $name = key($product);      // prod name
  8.         $proklkadok = array_keys($massiv);  // prod prokladok
  9.         foreach ($massiv as $inner_key =>$price) {
  10.             echo "<tr><td>". $name. "</td>";
  11.             $pr_val = array_keys($massiv);
  12.             echo "<td>".$pr_val[0]. "</td>";
  13.             echo "<td>".$price."</td></tr>\r\n"; // product price
  14.         }  
  15.     }
  16. }

Это то, как бы это сделал я.. думаю поможет
PHP:
скопировать код в буфер обмена
  1.  
  2. $array = array();
  3. $array[0] = array("Name1"=> array("2"=>"1460","3"=>"1868","4"=>"2158","5"=>"2537","6"=>"2915","8"=>"3673"));
  4. $array[1] = array("Prod2"=> array("3"=>"3079","4"=>"3625","5"=>"4172","6"=>"4718","8"=>"5811"));
  5. echo '<table rules="all" border="1">';
  6. foreach($array as $v) {
  7.     foreach($v as $name => $ar) {
  8.         foreach($ar as $v1 => $v2) {
  9.             echo sprintf('<tr><td>%s</td><td>%s</td><td>%s</td></tr>'."\r\n",
  10.                 $name, $v1, $v2);
  11.         }
  12.     }
  13. }
  14. echo '</table>';
Prizma Отправлено: 29 Января, 2016 - 23:42:04 • Тема: подсчет рефералов • Форум: Вопросы новичков

Ответов: 10
Просмотров: 536
Рачей пишет:
В принципе ваша идея мне понятна, но мне кажется, поправьте если ошибаюсь, тут с коэфицентами надо поработать.. У вас они задаются железно.. А надо наверное их создавать под каждого юзера в зависимости от вложенности.. То есть есть уровень вложенности и на него надо поделить сумму отдачи процента пользователя выстроив в какой-то прогрессии.
Не, гоню? Или как?

Вообще то массив коэффициентов для того и нужен чтобы в нем определить бонусы для всех уровней и количество этих уровней.
$i - определяет уровень вложенности,
$k[$i] - коэффициент для данного уровня,
count($k) - количество уровней
Рачей пишет:
Теперь бы еще придумать откуда брать бонусы на партнеров вверх.. Закладывать в цену рекламодателя? тут надо крепко будет подумать.

тут всё просто на самом деле, определить одну цифру:
со сколькими % готов расстаться - допустим это Х
а далее делаешь так:
1) Х/2 отдаешь первому уровню
2) каждый последующий получает в 2 раза меньше т.е. Х/4, Х/8, X/16 и т.д.
3) больше 10 уровней делать думаю смысла нет (т.к. доля % будет слишком ничтожна мала), другой вопрос, что врятли когда нибудь их столько будет - поэтому вообще можно не ограничивать уровни, а разделять до последнего пока сумма допустим не будет меньше копейки. В итоге до 6-8 уровня максимум что еще и дойдет.
(Добавление)
Если решишь реализовывать по этой схеме, тогда сумма издержек на бонусы будет стримится к Х, но никогда не будет больше... собственно поэтому этот Х и надо определить ;)
Prizma Отправлено: 29 Января, 2016 - 22:20:15 • Тема: подсчет рефералов • Форум: Вопросы новичков

Ответов: 10
Просмотров: 536
Рачей пишет:
Думаю на сайте сделать партнерку, сижу думаю как их считать.. До какого уровня? Как обычно высчитываются, у кого опыт есть? Там еще до второго третьего уровня не сложно, а если их будет от первого до последнего 30 уровней... Как быть? Составлять дерево или при совершении действия крайнего пользователя пересчитывать все до первого уровня? Поделитесь опытом.

Конкретно с партнеркой дело не имел, но с многоуровневыми зависимыми данными возился..

тут всё просто отмечаешь, кто чей реферал и при возникновении события за которым должно последовать вознаграждение до требуемого "колена" циклично начисляешь "бонусы" всё просто..

я бы как то так сделал:
PHP:
скопировать код в буфер обмена
  1. $userId = 115; // id реферала
  2. $k = [0.2,0.05, 0.0125 ...]; // коэффициент
  3. function getParent($userId) {
  4.     /* ... */
  5.         return $parentId;
  6. }
  7. $i = 0;
  8. while((($p = getParent($userId)) > 0) || ($i >= count($k))) {
  9.     echo sprintf('Пользователю %s получит вознаграждение в размере %.4F%% от пользователя %s',
  10.         $p, $k[$i]*100, $userId);
  11.     $i++;
  12. }
  13.  
Prizma Отправлено: 29 Января, 2016 - 22:07:00 • Тема: 20 000 запросов в минуту • Форум: Вопросы новичков

Ответов: 7
Просмотров: 338
И так сделал таймлаин и замерил скорость на разных этапах..
До оптимизации 1065 строк обновлял в пределах 12-13 секунд
С транзакцией 17-18к строк глотает за 4 секунды, всё круто спасибо... с учетом загрузки выборки и манипуляций за 8 секунд отработал - всё супер

PS: начал PDO вылетать с неизвестной ошибкой... заглянул в класс соединения и о боже заметил, что там для каждого запроса создается новый экземпляр PDO.. теперь всё ок
Prizma Отправлено: 29 Января, 2016 - 21:10:05 • Тема: 20 000 запросов в минуту • Форум: Вопросы новичков

Ответов: 7
Просмотров: 338
Мелкий пишет:
Всосать 30тыс записей, сверить их с имеющимися данными в таблице, отчитаться на приложение о найденных аномалиях, смержить с таблицей, прогнать весь массив этих данных через реферальную программу, пересчитать ещё штуки 3 таблицы аггрегации - запросто. Всё перечисленное - 5 секунд реального времени.

т.е. сделать селект устаревших данных прогнать аномалии и внести изменения через транзакцию как то так?
Prizma Отправлено: 28 Января, 2016 - 23:05:22 • Тема: 20 000 запросов в минуту • Форум: Вопросы новичков

Ответов: 7
Просмотров: 338
DelphinPRO пишет:
Заключить в транзакцию? По идее должно обновляться быстрее.

Попробую, у меня в этом случае на это время блокируется таблица эта так? (структура Innodb)
Prizma Отправлено: 28 Января, 2016 - 22:39:30 • Тема: 20 000 запросов в минуту • Форум: Вопросы новичков

Ответов: 7
Просмотров: 338
3,5 Мб. текста через preg_match_all довольно быстро делятся на 20 000 строк (в пределах секунды) для обновления параметров в бд, все данные это цифры. Данные должны обновляться раз в минуту. Проблема в том, что обновление параметров идет крайне медленно... за минуту еле успевает обновится половина.
Не силен в настройке mysql сервера, может стоит что то там поковырять и выделить больше ресурсов (ЦП и память далеки от полной нагрузки)?

По хорошему то на редис или мемкеш перебросить все это и тогда бы проблема отвалилась, но пока так, как есть.

Apache-2.4+Nginx-1
PHP-5.6
MySQL-5.6
(Добавление)
если mysql в любом случае не сможет обработать хотя бы 1000, а лучше 2000 update в секунду на 5 чисел int, тогда буду менять концепцию... или все таки может?
Prizma Отправлено: 14 Января, 2016 - 12:40:35 • Тема: Запись в массив значения из POST • Форум: Вопросы новичков

Ответов: 12
Просмотров: 644
мэлс пишет:
Проверки это хорошо, конечно, но у меня просто меняется значение с каждым новым POST, хоть убейте.

$arr = [1,25,12,48, вот сюда добавляет, а потом только меняет];
if(isset($_POST['id']) || die('Значение не передано')) {
$arr[] = $_POST['id'];
}

ахах) ну конечно, же... потому, что каждый новый раз, при отправке POST данных у вас запускается новый скрипт, который не может иметь прямого доступа к данным из уже отработавшего скрипта.

Для того, чтобы собирать все значения, Вам нужно записывать их в файл или базу данных и потом оттуда доставать
Prizma Отправлено: 14 Января, 2016 - 12:20:07 • Тема: Запись в массив значения из POST • Форум: Вопросы новичков

Ответов: 12
Просмотров: 644
PHP:
скопировать код в буфер обмена
  1. $arr = [1,25,12,48];
  2. if(isset($_POST['id']) || die('Значение не передано')) {
  3.    $arr[] = $_POST['id'];
  4. }

В первом примере у вас всё было верно, так и надо добавлять. Только проверку лучше ставить на существование, потому что если допустим id будет равно 0, тогда условие не пройдет.
Так же рекомендую проверять post-данные, если это число int то как то так:
PHP:
скопировать код в буфер обмена
  1. if((isset($_POST['id']) && preg_match('#^[0-9]{1,10}$#', $_POST['id']) || die('Передано не корректное значение')) || die('Значение не передано')) {
  2.    $arr[] = $_POST['id'];
  3. }
Prizma Отправлено: 09 Января, 2016 - 00:14:03 • Тема: Ошибка при работе с функцией array_sum() • Форум: Вопросы новичков

Ответов: 7
Просмотров: 353
Trosel пишет:
Всего находится по данному запросу($result) 2 строчки у одной из которых mnen=0 у другой mnen=1.


Попробуй
Вместо:

вот так:
PHP:
скопировать код в буфер обмена
  1. $est = 0;
  2. foreach($row as $r) {
  3.     $est += $r['mnen'];
  4. }

Если не поможет значит ищи ошибку в запросе, может поле иначе называется.
Prizma Отправлено: 08 Января, 2016 - 23:17:47 • Тема: Выделение активной ссылки • Форум: Вопросы новичков

Ответов: 7
Просмотров: 513
RockeT пишет:
а насчет этого как правильно сделать .

обычно выделяю ссылку таким образом:

к примеру у меня do

$do = (isset($_GET["do"])? htmlspecialchars_uni($_GET["do"]):"");

что еще за do?
Prizma Отправлено: 08 Января, 2016 - 22:51:21 • Тема: удалить пустые ячейки • Форум: Вопросы новичков

Ответов: 3
Просмотров: 329
sergoVL пишет:
Подскажите как удалить пустые ячейки. При этом сохранив структуру таблицы.

т.е. у тебя есть HTML-таблица, из которой ты хочешь удалить ПУСТЫЕ ячейки. Каким именно образом?
Задача не ясна, куда должны исчезнуть пустые ячейки? что должно быть на их месте?

И да, очень лютая абракадабра в реализации...
(Добавление)
Запустил я это счастье и ужаснулся результату) У вас там явно лишний цикл, далее какая то охинея с выводом <tr> почему то он выводится в разных циклах, поэтому таблица и едет к чертям. Причем в шапке <tr> напрочь отсутствует.
Так вроде лучше:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //этот массив будем выводить
  3. $newmassiv = [
  4.     "bar",
  5.     "foo",
  6.     "hii",
  7.     "привет",
  8.     "",
  9.     "первая новая строка",
  10.     "вторая новая строка",
  11.     "третья новая строка",
  12.     "",
  13.     "я пятый массив и хочу во вторую строку",
  14.     "пятая новая строка",
  15.     "шестая новая строка",
  16.     "седьмая новая строка",
  17.     "восьмая новая строка",
  18.     "",
  19.     "",
  20.     "",
  21.     "девятая новая строка",
  22.     "десятая новая строка",
  23.     "",
  24.     "одиннадцатая новая строка",
  25.     ""
  26. ];
  27.  
  28.  
  29. echo "<table widht=300 border=1>";
  30. echo "<tr>";
  31. echo "<td>1-q</td>";
  32. echo "<td>2-q</td>";
  33. echo "<td>3-q</td>";
  34. echo "<td>4-q</td>";
  35. echo "<td>5-q</td>";
  36. echo "</tr>";
  37.  
  38.  
  39. $columns = 5; //кол-во столбцов
  40. $i = 0; // счетчик столбцов
  41. $td = '';
  42. foreach($newmassiv as $k => $el) {
  43.     // пропускаем пустые строки
  44.     if(empty($el)) {
  45.         continue;
  46.     }
  47.     $i++; // считаем сколько у нас ячеек в строке
  48.     // если ячеек больше чем надо, выводим строку таблицы
  49.     if($i > $columns) {
  50.         echo '<tr>'.$td.'</tr>';
  51.         // сбрасываем переменные
  52.         $td = '';
  53.         $i = 1;
  54.     }
  55.     /* ВАШ КОД */
  56.  
  57.     $patterns = "/вторая новая строка/Um";
  58.     $replacements = "ЖОЛПА";
  59.     $el = preg_replace($patterns, $replacements, $el);
  60.     //echo $newmassiv[++$k];
  61.    
  62.     /* КОНЕЦ ВАШЕГО КОДА */
  63.     $td .= '<td>'.$el.'</td>'; // создаем ячейку
  64. }
  65. if(!empty($td)) {
  66.     echo '<tr>'.$td.'</tr>';
  67. }
  68. echo '</table>';
  69.  
  70. ?>
Prizma Отправлено: 08 Января, 2016 - 22:24:17 • Тема: str_replace • Форум: Вопросы новичков

Ответов: 17
Просмотров: 735
DemoN1810 пишет:
как-то всё слишком запутанно, это всё-таки раздел для новичков, никак попроще нельзя?

Для каждой задачи, есть много вариантов решения, я тебе подсказал, один из наиболее логичных и правильных(по моему мнению) из поставленной задачи, если запустишь код, поковыряешь, разберешься с ним, затем прочитаешь мануал про то, чего не понимаешь, думаю всё будет легко и просто.
(Добавление)
Сейчас добавлю комментарии в предыдущий пост, чтобы тебе было проще и понятней

Страниц (31): В начало « ... 4 5 6 7 [8] 9 10 11 12 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB