Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вопросы по созданию своей CMS / 25 сообщений из 57, страница 1 из 3
13.03.2016, 11:38
    #39190805
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Привет, решил освоить php на примере создания своей cms.
Как правильно следить за количеством сообщений пользователя?
1. Сохранять значение в БД и делать +1/-1 при создании, удалении сообщений?
2. При каждом вызове подсчитывать кол-во выборкой?

POWERED BY LOGIC AND REASON
...
Рейтинг: 0 / 0
13.03.2016, 19:06
    #39190946
anvano
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Посмотреть, как это сделано в других CMS/форумах?

В самом простом случае, если исключить из рассмотрения всякие кеширования и оптимизации, то по вашему пункту №1.
Плюс предусмотреть специальную кнопку в админке для синхронизации, чтобы можно было насильно пересчитать посты.
...
Рейтинг: 0 / 0
15.03.2016, 15:13
    #39192392
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Делаю модуль редактирования данных о пользователе.
У пользователя есть выбор фирмы, к которой он относится.
Раскрывающийся список выводится, но не пойму как автоматически сделать выбранным то поле, которое записано в базе?

таблица firms (firm_id, firm_active,...)
таблица users (uid, username, user_firm...)

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$query = "SELECT * FROM firms WHERE firm_active='1' GROUP BY firm_name ORDER BY firm_name";
	$result = mysql_query($query) or die(mysql_error());
 
	print '<td><p>Предприятие: 
<SELECT name="user_firm" >';
	while ($row2 = mysql_fetch_array($result)) { print '<option value="'.$row2[user_firm].'">'.$row2[firm_name].'</option>'; }
	mysql_free_result($result);
	print ('</p></select></td>');
...
Рейтинг: 0 / 0
15.03.2016, 15:42
    #39192438
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
http://htmlbook.ru/html/option/selected

атрибут option

Можно поворчать? Чтобы кмс была не слишком страшная, лучше поизучать принципы, заложенные в промышленных решениях, например

http://symfony-gu.ru/documentation/ru/html/book/from_flat_php_to_symfony2.html

без принципов - очень плохо. я пробовал, без слез на написанное не взгляну. стыдно.
...
Рейтинг: 0 / 0
15.03.2016, 16:02
    #39192471
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Vladimir Baskakov,

спасибо.

сделал так:

Код: php
1.
2.
3.
4.
5.
if($row["user_firm"] == $row2["firm_id"]) {
	print '<option value="'.$row2[firm_id].'" selected >'.$row2[firm_name].'</option>'; }
	else{	
	print '<option value="'.$row2[firm_id].'">'.$row2[firm_name].'</option>'; }
	} 




Vladimir BaskakovЧтобы кмс была не слишком страшная, лучше поизучать принципы, заложенные в промышленных решенияхСпасибо за ссылку. У меня случай крайне тяжелый - постигаю азы самого PHP.
Синтаксис конечно жуть...
...
Рейтинг: 0 / 0
15.03.2016, 16:12
    #39192492
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Делаю чуть иначе. Список опций формирую без установки "selected". А нужную опцию выставляю яваскриптом.
...
Рейтинг: 0 / 0
15.03.2016, 16:16
    #39192496
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Код: php
1.
2.
3.
//можно короче
$selected = $row["user_firm"] == $row2["firm_id"] ? ' selected' : '';
echo '<option value="'.$row2[firm_id].'"'.$selected.'>'.$row2[firm_name].'</option>'; 
...
Рейтинг: 0 / 0
15.03.2016, 17:08
    #39192560
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Alex721 У меня случай крайне тяжелый - постигаю азы самого PHP.
Синтаксис конечно жуть...

Друг сказал мне - "Учи питон. И руби". Он умный. а синтаксис - если! концептуально верно писать - так нормальный. Логика отдельно, представление отдельно. ООП в каком-то объеме. ничего страшного, если не смешивать логику и представление, т.е. сразу взять шаблонизатор - Smarty или Twig.

(Джаваскрипт, он тоже красив. Очень. Если смотреть как пишет Крокфорд, например).

Всего хорошего.
...
Рейтинг: 0 / 0
16.03.2016, 16:13
    #39193476
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Чото туплю.
Как сделать тройной запрос?
...
Рейтинг: 0 / 0
16.03.2016, 16:17
    #39193482
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Alex721,

почему тройной? какая структура таблиц? В другой теме вроде было это, не?
...
Рейтинг: 0 / 0
16.03.2016, 16:17
    #39193483
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Пробую так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
$qr_result = mysql_query("SELECT p.*, f.firm_name FROM projects p LEFT JOIN firms f ON f.firm_id = p.pr_firm WHERE p.pr_active = '1' LIMIT $start,$project_per_page") or die(mysql_error());
    echo '<table class="cool">';
	echo '<thead>';
	echo '<tr>';
	echo '<th>#</th>';
	echo '<th>Название проекта</th>';
	echo '<th>Предприятие заказчик</th>';
	echo '<th>Ответственный</th>';
	
	echo '<th></th><th></th>';
	echo '</tr>';
	echo '</thead>';
	echo '<tbody>';
	
	$i=1;
	while($data = mysql_fetch_array($qr_result)){ 

	$num=$start+$i;
	$i++;
	
//Дополнительный запрос
        $query2 = "SELECT * FROM users WHERE user_active='1' AND uid=".$data['pr_lid'];
	$result = mysql_query($query2) or die(mysql_error());
	mysql_free_result($result); 
	
		echo '<tr>';
		echo '<td>'. $num.'</td>';
		echo '<td><a href="/modules/projects/project.php?id=' .$data['pr_id']. '">'. $data['pr_name'] . '</a></td>';
		echo '<td><a href="/modules/firms/firm.php?id=' .$data['pr_firm']. '">' . $data['firm_name'] . '</a></td>';
		echo '<td><a href="/modules/users/user.php?id='.$data['pr_lid']. '">q'.$result['username']. '</a></td>';
echo "<pre>";
var_dump($result);
echo "</pre>";


В дампе это:
авторresource(16) of type (Unknown)
resource(17) of type (Unknown)
resource(18) of type (Unknown)
resource(19) of type (Unknown)
resource(20) of type (Unknown)
resource(21) of type (Unknown)
resource(22) of type (Unknown)
...
Рейтинг: 0 / 0
16.03.2016, 16:19
    #39193490
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
структура таблиц:
Код: php
1.
2.
3.
projects (pr_id, pr_active, pr_firm(1), pr_user(2))
firms (firm_id(1), firm_name)
users (uid(2), username)
...
Рейтинг: 0 / 0
16.03.2016, 16:23
    #39193495
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
такой вариант тоже не работает

Код: php
1.
"SELECT p.*,u.username, f.firm_name FROM projects p LEFT JOIN firms f LEFT JOIN users u ON f.firm_id = p.pr_firm AND u.uid = p.pr_lid WHERE p.pr_active = '1' LIMIT $start,$project_per_page"
...
Рейтинг: 0 / 0
16.03.2016, 16:25
    #39193498
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Заработало.

Код: php
1.
$qr_result = mysql_query("SELECT p.*,u.username, f.firm_name FROM projects p LEFT JOIN firms f ON f.firm_id = p.pr_firm LEFT JOIN users u ON u.uid = p.pr_lid WHERE p.pr_active = '1' LIMIT $start,$project_per_page") or die(mysql_error());
...
Рейтинг: 0 / 0
16.03.2016, 16:26
    #39193500
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
1. не делать запросы в цикле
2. добавить join users в первый запрос
3. использовать mysqli_ вместо mysql_, т.к. второе устарело
...
Рейтинг: 0 / 0
16.03.2016, 16:38
    #39193511
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
чем меньше всего написано, тем проще перестроиться на модель-представление-контроллер. Чем больше всего будет написано, тем больше будет путаницы. Возможно, более опытные коллеги помогут с простыми и понятными источниками по хорошему стилю и архитектуре php - проектов

автор. не делать запросы в цикле

а если уж делать - то подготовленные

http://php.net/manual/ru/pdo.prepare.php
...
Рейтинг: 0 / 0
16.03.2016, 20:55
    #39193818
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Спасибо за общение.
Был бы благодарен за простые примеры правильного проектирования бд, конструктора и т.п.
Разбирать с нуля готовую профессиональную цмс могут только профи.
Что же делать тем, кто занимается РНР пару недель...
...
Рейтинг: 0 / 0
16.03.2016, 22:47
    #39193886
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Да не надо разбирать с нуля. Надо взять how to от серьезного проекта и вбить туда ====привет пхп======. И постепенно впиливать туда кусочки.

в приведенном коде - как минимум - изолировать запросы к базе от слоя представления - каждой таблице сопоставить класс. Набор строк из таблицы станет массивом экземпляров класса. Слой общения с базой должен по запросу формировать такие коллекции, а презентационный слой - их показывать.

Презентационный слой сделать на шаблонизаторе. (Смарти, твигю.....) И многое облагородится.

Если что - я не пхп-ист, могу пороть чушь.....
...
Рейтинг: 0 / 0
16.03.2016, 23:27
    #39193913
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
.... а какая цель обучения, ближайшие и перспективные задачи? от разных целей и план изучения неодинаковый.
...
Рейтинг: 0 / 0
17.03.2016, 05:47
    #39193985
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Задача - хочу сделать CRM.
Цель - это как минимум облегчит мою работу (коммерция).
возможно, я сменю профиль работы.
Раньше я писал на Делфи, работал на скада системах, с ПЛК.
С Вебом занимался давно, но не больше html и легкого php.
...
Рейтинг: 0 / 0
17.03.2016, 06:02
    #39193988
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Сделать совсем новую crm? С нуля? Или немного допилить готовую. И почему именно на php. Так или иначе - как китайцы научились делать машины? Привезли готовую, разобрали-собрали. Пересчитали лишнее. Поехало?
...
Рейтинг: 0 / 0
17.03.2016, 08:58
    #39194034
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Объясните мне логику синтаксиса.
В интернете полно только базовой информации - с одним элементом конструкции.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Таблицы:
projects (pr_id, pr_active, pr_firm(1), pr_user(2), pr_author(2))
firms (firm_id(1), firm_name)
users (uid(2), username)
--------

SELECT p.*,u.username, f.firm_name 
	FROM projects p 
		LEFT JOIN firms f ON f.firm_id = p.pr_firm
		LEFT JOIN users u ON u.uid = p.pr_user
	WHERE p.pr_active = '1' LIMIT $start,$project_per_page"


Задача запроса: из таблицы PROJECTS выбрать список проектов, с активным статусом = "1", выбрать id фирмы, id автора проекта и id ответственного пользователя (pr_user). И из таблиц FIRMS и USERS по ID подставить имена пользователей и название фирмы.
В запросе выше все работает, кроме подстановки второго пользователя.

Мне нужно в выделенную строку добавить что-то типа этого AND f.firm_id = p.pr_author
Чтобы я мог получить из uid имя автора проекта (pr_author) и имя пользователя проекта (pr_user)
Не пойму как синтаксис этого должен выглядеть.

Повторюсь, в интернете подобных множественных условий я не нашел...
...
Рейтинг: 0 / 0
17.03.2016, 09:00
    #39194037
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
так не работает...
Код: php
1.
2.
3.
4.
5.
6.
SELECT p.*,u.username, f.firm_name 
	FROM projects p 
		LEFT JOIN firms f ON f.firm_id = p.pr_firm
		LEFT JOIN users u ON u.uid = p.pr_user
		LEFT JOIN users u ON u.uid = p.pr_author
	WHERE p.pr_active = '1' LIMIT $start,$project_per_page"
...
Рейтинг: 0 / 0
17.03.2016, 09:06
    #39194044
Alex721
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
Vladimir BaskakovСделать совсем новую crm? С нуля? Или немного допилить готовуюЯ с PHP вообще не знаком. С БД тоже имею дело почти впервые.
Чтобы ковырять готовую систему я считаю нужно подтянуть знание самого языка.

Столкнулся с большими сложностями с пониманием синтаксиса PHP.
Ну читать книжки это не наш метод, когда есть форум друзей :)
...
Рейтинг: 0 / 0
17.03.2016, 09:22
    #39194063
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по созданию своей CMS
а я б на вашем месте все таки почитал, хотя бы это
у таблиц должны быть разные алиасы
select u1.name AS u1_name, u2.name AS u2_name ..JOIN users u1... JOIN users u2
и если pr_firm(1), pr_user(2), pr_author(2) обязательные, то inner join, а не left
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вопросы по созданию своей CMS / 25 сообщений из 57, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]