PHP.SU

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

Страниц (6): [1] 2 3 4 5 6 »

> Найдено сообщений: 77
igosja Отправлено: 07 Января, 2017 - 21:47:31 • Тема: Помогите оптимизировать sql выборку • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 496
Можно убрать перебор цикла сделав вложенный запрос:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $cnnect = mysql_connect('localhost', 'root', 'PaSSwOD');
  3. mysql_select_db('dbase');
  4.  
  5. $query = "SELECT id,str
  6.           FROM table1
  7.           WHERE id NOT IN
  8.           (
  9.             SELECT id
  10.             FROM table2
  11.             WHERE IP='".$_SERVER["REMOTE_ADDR"]."'
  12.           )
  13.           ORDER BY RAND()
  14.           LIMIT 1";
  15. $result = mysql_query($query);
  16.  
  17. if ($result) {
  18.   $per = mysql_fetch_array($result);
  19.   if (!empty($per['str'])) {
  20.     mysql_query("INSERT INTO table2
  21.                  id='".$per['id']."',
  22.                  ip='".$_SERVER["REMOTE_ADDR"]."',
  23.                  str='".$per['str']."',
  24.                  time=NOW()");
  25.   }
  26. }
  27.  
  28.  
  29. mysql_close($cnnect);
igosja Отправлено: 07 Января, 2017 - 21:29:59 • Тема: Использовать значение одного поля как название другого. • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 429
На сайте есть 3 таблицы (в сокращенном виде):
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `team`
  2. (
  3.   `team_id` INT(11) PRIMARY KEY AUTO_INCREMENT,
  4.   `team_base_id` TINYINT(2) DEFAULT 2,
  5.   `team_basemedical_id` TINYINT(2) DEFAULT 1,
  6.   `team_basephisical_id` TINYINT(2) DEFAULT 1,
  7.   `team_baseschool_id` TINYINT(2) DEFAULT 1,
  8.   `team_basescout_id` TINYINT(2) DEFAULT 1,
  9.   `team_basetraining_id` TINYINT(2) DEFAULT 1
  10.  );

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `buildingbase`
  2. (
  3.   `buildingbase_id` INT(11) PRIMARY KEY AUTO_INCREMENT,
  4.   `buildingbase_building_id` TINYINT(1) DEFAULT 0,
  5.   `buildingbase_team_id` SMALLINT(5) DEFAULT 0
  6. );

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `building`
  2. (
  3.   `building_id` TINYINT(1) PRIMARY KEY AUTO_INCREMENT,
  4.   `building_name` VARCHAR(255) NOT NULL
  5. );
  6. INSERT INTO `building` (`building_name`)
  7. VALUES ('base'),
  8.        ('basemedical'),
  9.        ('basephisical'),
  10.        ('baseschool'),
  11.        ('basescout'),
  12.        ('basetraining');

Вопрос: можно ли как-то в одном запросе склеить `building_name` из третьей таблицы с префиксом team и окончанием id и скормить это системе как название поля? Примерно как-то так:
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `team`
  2. LEFT JOIN `buildingbase`
  3. ON `team_id`=`buildingbase_team_id`
  4. LEFT JOIN `building`
  5. ON `buildingbase_building_id`=`building_id`
  6. SET `team_+building_name+_id`=`team_+building_name+_id`+'1'

Подскажите, пожалуйста, как правильно записать вот эту конструкцию - `team_+building_name+_id`?
Сейчас это делается 6 отдельными запросами (по количеству записей в таблице building). Хотелось бы это все сделать одним запросом.
igosja Отправлено: 14 Июля, 2016 - 08:57:03 • Тема: Как отсортировать значения в переменной • Форум: Хранение данных, их вывод и обработка

Ответов: 2
Просмотров: 592
PHP:
скопировать код в буфер обмена
  1. $sql_where = "10646,10074,10795,10787";
  2. $sql_where = explode(',', $sql_where);
  3. sort($sql_where);
  4. $sql_where = implode(',', $sql_where);
  5. print $sql_where; //Выведет отсортированные данные
igosja Отправлено: 11 Июля, 2016 - 09:29:53 • Тема: Нужна помощь с кодом • Форум: Вопросы новичков

Ответов: 3
Просмотров: 156
The requested URL was not found on this server. - Это неошибка в php коде. Сервер не может найти нужный url. Сверте адрес папки, в которой лежат файлы с адресом Document Root, который указан в настройках apache/nginx для вашего домена.
igosja Отправлено: 08 Июля, 2016 - 14:24:10 • Тема: как выбрать в мускуле из массива (типа таплица) • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 1054
MySQL работает с MySQL таблицами, выбирать из "типа таплица" он не умеет.
Внесите данные в таблицу, потом выбирайте:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM `table`
  3. WHERE `value`='5'; //Цифра 5 взята для примера
igosja Отправлено: 08 Июля, 2016 - 14:14:20 • Тема: Баг в системи отправки=>получения сообщения с сайта • Форум: Вопросы новичков

Ответов: 4
Просмотров: 129
Из-за одинарных кавычек. Попробуйте так:
PHP:
скопировать код в буфер обмена
  1. $from = "From: <message@sportassist.pro>\r\n";
  2. mail($to, $title, $mess, $from);

В моем случае с аналогичной проблемой это помогло.
igosja Отправлено: 05 Июля, 2016 - 17:54:16 • Тема: Как создать движок • Форум: Вопросы новичков

Ответов: 8
Просмотров: 213
Для примера - https://habrahabr[dot]ru/post/150267/
Ну и google в помощь, статей на эту тему очень много.
igosja Отправлено: 05 Июля, 2016 - 17:14:37 • Тема: Обновление форума. Баги и ошибки пишем здесь • Форум: Колонка администратора

Ответов: 16
Просмотров: 4842
Текст, который содержит html, не экранируется, на выводится, как есть.
Тег input - http://prntscr[dot]com/bp3eg4
igosja Отправлено: 05 Июля, 2016 - 14:32:02 • Тема: Как создать движок • Форум: Вопросы новичков

Ответов: 8
Просмотров: 213
Смысл MVC в том, чтобы разделить php, mysql и html.
Когда все это находится в одном файле, его сложно редактировать, особенно если файл большой. Все превращается в кашу.
В mvc "m" отвечает за работу с sql, там настраиваются доступы к таблицам, связи, сортировки, фильтрации, поиск и прочие вещи.
"v" отвечает за вывод html кода
"с" отвечает за объединение этих вещей и прием дополнительной информации - get, post данных, чтение сессии и тому подобное.
Для изучения можете скачать любой mvc-framework с демо страницами. (Пример - http://www.yiiframework.com/demos/)
igosja Отправлено: 01 Июля, 2016 - 14:49:19 • Тема: Футбольный менеджер на PHP • Форум: Вопросы новичков

Ответов: 10
Просмотров: 463
PhpStorm, но это вообще никакого отношения к коду не имеет. Основную часть кода писал в Notepad++, PhpStorm использовал только при написании генератора, ибо без подсказок там было реально сложно.
igosja Отправлено: 01 Июля, 2016 - 14:13:40 • Тема: Футбольный менеджер на PHP • Форум: Вопросы новичков

Ответов: 10
Просмотров: 463
Lo-st пишет:
Форум чат гостевая книга это будет просто для примера на разных фреймворках чтобы посмотреть как они работают внутри, чтобы углубить знания ООП.
Не знаю, самообразование - это конечно хорошо, но я за пару месяцев своей первой работы в вебстудии под шефством у опытных коллег выучил больше, чем за пару лет самостоятельно чтения учебников.
Lo-st пишет:
Кстати у вас на сайте как получить команду?
Зарегистрируйтесь через форму регистрации или кликнув на иконку соцсети, дальше сайт вам предложит выбрать команду.
igosja Отправлено: 01 Июля, 2016 - 12:28:23 • Тема: Футбольный менеджер на PHP • Форум: Вопросы новичков

Ответов: 10
Просмотров: 463
Какой фреймворк использовали если не секрет?
Все написано на "нативном" php. Весь сайт - это выборки из базы данных и их вывод на страницу, больше там почти ничего нет. Все цифры считает генератор, но он насколько "кастомный", что на фреймворке я бы его писал гораздо дольше. Когда я прикинул свои потребности с возможностями фреймворков, то решил обойтись без них.

А генератор тоже на php написали?
Да, генератор тоже на php. На генератор у меня ушло около 50% общего времени работы над сайтом. Пока я поотлавливал все баги, я прогнал порядка тысячи тестовых генераций матчей, копался в дебагере, засекал время выполнения sql-запросов, php-расчетов, потредление памяти. Все это переписывалось, чтобы распределить нагрузку с учетом большого количества людей.

Форум, чат, гостевая книга - это мелочи, дополнения. Если вы хотите футбольный менеджер, то нужно делать футбольный менеджер, а потом его дополнять форумами/чатами. Если начать не с того конца, то, вероятнее всего, архитектура и структура базы данных будет такой, что весь сайт превратить в набор костылей.

Я не в коем случае вас не отговариваю, посто будьте реалистом и постарайтесь объективно оценить ситуацию.
Во-первых, для каких целей вы это делаете? Для себя или для людей, будет ли там кто-то играть не из числа ваших знакомых? Если для себя и знакомых, то можно писать что угодно и как угодно.
Во-вторых, если там будут играть люди, которые туда случайно зайдут, то сколько возможных багов они увидят? Как быстро вы эти баги устраните? Если здесь будут проблемы, то у вас на форуме/чате/гостевой книге/отзывах... напишут таких комплиментов, что придется или сайт закрывать или всех подряд банить. Знаю это по опыту своего первого онлайн-менеджера.
igosja Отправлено: 01 Июля, 2016 - 10:44:38 • Тема: Футбольный менеджер на PHP • Форум: Вопросы новичков

Ответов: 10
Просмотров: 463
Раз уж тут возникла такая тема, то отпишусь автору о своем опыте. Когда я только начал изучать php у меня тоже родилась такая мысль - написать свой спортивный онлайн менеджер. Со скачанными из сети учебниками я с горем пополам его написал, но там была ужасная архитектура, плохо нормализированная база данных, тьма ошибок (я не знал о таких вещах, как фреймворки, тестирование кода, error log, debugger, sql-иньекции...) Итог - после появления в игре ~300 постоянных пользователей все полетело к чертям, ошибок и дырок в безопасности было сколько, что не успевал их закрывать, сервер ложился, и сайт пришлось закрыть.
Сейчас, имея опыт работы в веб студии, воспоминания о том кода меня превращаем в эмо - хочется заплакать и умереть.
Потом я сделал другой менеджер - http://virtual-football-league[dot]ru/ В сравнении с первым это просто небо и земля. Хотя и сдесь я постоянно что-то меняю.

Не рекомендовал бы я вам углублять свои знания при помощи подобного проекта, лучше взять что-то попроще, пока не будет достаточно опыта. В противном случае вы этот менеджер будете 3-5-10 лет переписывать по кругу.

Фреймворк - это не панацея, если его использовать неправильно, то у вас получится говнокод похлеще любого велосипеда - по себе знаю. Здесь вопрос не в фреймворке или велосипеде, вопрос в том, что нужно все хорошо продумать, нужна качесвенная архитектура.
igosja Отправлено: 29 Мая, 2016 - 11:00:40 • Тема: Система выборов • Форум: Вопросы новичков

Ответов: 1
Просмотров: 64
"Как сделать так, чтобы выборы (голосование) проводилось через опеределенный промежуток времени, к примеру через каждый месяц."
Тут все предельно просто - раз в месяц через crontab добавляйте новый id в табличку с голосованиями.
CODE (text):
скопировать код в буфер обмена
  1. INSERT INTO `vote`
  2. SET `vote_id`=NULL

"Как избежать повторного голосования от одного и того же лица."
Нужно записывать в базу данных историю голосований с id голосовавшего, любые другие вещи, в духе cookie, ip и прочее, можно обойти.
Хочет человек проголосовать, проверяете:
CODE (text):
скопировать код в буфер обмена
  1. SELECT COUNT(`id`) AS `check`
  2. FROM `uservote`
  3. WHERE `user_id`='$user_id'
  4. AND `vote_id`='$vote_id'
А потом
CODE (text):
скопировать код в буфер обмена
  1. if (0 == $check) {
  2.     //Человек голосует и мы его записываем
  3.     $sql = "INSERT INTO `uservote`
  4.             SET `user_id`='$user_id',
  5.                 `vote_id`='$vote_id'
  6. } else {
  7.     //Выводим заглушку, мол, вы уже проголосали
  8. }


"Как сделать так, чтобы к примеру если пользователь имеет на банковском счету больше или ровно 10 млн к примеру, то он может зарегистрировать кандидатуру на выборах???"
По аналогии с предыдущим примером. Нужно делать проверку
CODE (text):
скопировать код в буфер обмена
  1. SELECT `balance`
  2. FROM `user`
  3. WHERE `id`='$user_id'
  4. LIMIT 1
Далее проверка
CODE (text):
скопировать код в буфер обмена
  1. if (10000000 < $balance) {
  2.     //Человек выдвигает свою кандидатуру
  3. } else {
  4.     //Выводим заглушку, мол, мало денег
  5. }
igosja Отправлено: 27 Мая, 2016 - 14:18:18 • Тема: проверить попадает ли текущий момент в диапозо дат • Форум: Вопросы новичков

Ответов: 1
Просмотров: 46
PHP:
скопировать код в буфер обмена
  1. $time_start = strtotime('2016-05-27 13:46:00');
  2. $time_end = strtotime('2016-05-28 13:46:00');
  3. $now = time();
  4.  
  5. if ($time_start < $now && $now < $time_end) {
  6.     print 'текущий момент попадает в диапазон дат';
  7. } else {
  8.     print 'текущий момент НЕ попадает в диапазон дат';
  9. }

Страниц (6): [1] 2 3 4 5 6 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB