Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.70/92: Рейтинг темы: голосов - 92, средняя оценка - 4.70
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868

Счётчик просмотров

29.09.2010, 00:51. Показов 18052. Ответов 89
Метки нет (Все метки)

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

Написал так, но обновление идёт сразу на всех постах находящихся на странице, а не на
тех на которых нажал на кнопку подробнее зашёл на этот пост.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
//Вывод постов
for($i = 0; $i < $num; $i++)  
{  
$prosmotrov = mysql_query("select * FROM lessons",$connect);
$rez = mysql_fetch_array($prosmotrov);
$enlarge = $rez['obnovlenie']+1;
$obnovlenie_rez = mysql_query("UPDATE lessons set obnovlenie = '$enlarge' where  id = id ");
echo 'Просмотров: '.$enlarge;
 
if(isset($postrow[$i]['id'])) echo  '&nbsp;'.$postrow[$i]['text'].'<br/>';
 
}
Миниатюры
Счётчик просмотров  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.09.2010, 00:51
Ответы с готовыми решениями:

Счётчик просмотров
Как написать счетчик просмотров по типу: Просмотров за 24 часа: Посетителей за 24 часа: Просмотров за 7 дней: Посетителей за...

Счётчик уникальных просмотров новости
Привет. Есть страница с новостями, при просмотре полной новости хочу вести учёт уникальных просмотров. Простые просмотры записываю...

Счётчик уникальных просмотров материала
Поискал по форуму, не нашёл ничего годного, думаю этот тред будет полезен многим кто ищет ответ в рамках этого сайта. Есть у меня...

89
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
05.10.2010, 00:30
Syltan, блин не пойму в чем проблема, как я понимаю, для ссылки надо приписать GET.. и все что с ним связано, и в этом же разделе кода включить счетчик..
либо я ни х не понимаю что ты хочишь сделать..
просто ты как то по другому код пишешь. ты используешь шаблоны? меня этот вопрос тоже интерисует.
товарищи ученые хелпните немного
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
05.10.2010, 00:34
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
почему я про маяк говорю, инет - это сеть, также как и локалка. по локалке можно заливать даже админу все что угодно (по моему определяется по IP).
Я не особо силен в сетях, но что можно еще залить кроме файлов? Знаю лишь то, что все сети построены на протоколах. У каждого протокола свои преимущества и недостатки. К тому же протоколы локальной сети отличаются от протоколов глобальной сети.

Добавлено через 40 секунд
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
хранить не в куках, а где нить в дебрях папок, чтобы не догадался
Политика безопасности этого не позволяет.

Добавлено через 2 минуты
Цитата Сообщение от Syltan Посмотреть сообщение
То есть кода пхп не должно быть в ячейках в которых размещаются выводы после нажатия подробнее?
Да, PHP-кода там не должно быть.
Сейчас вернусь и набросаю примерчик...
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
05.10.2010, 00:38
> Политика безопасности этого не позволяет.
в тихаря можно
ладно, бабки на модеме не резиновые, пойду поужинаю..

Добавлено через 3 минуты
Syltan, когда закончишь свою работу, выложи, если не жадный )
0
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
05.10.2010, 00:40  [ТС]
Извиняюсь,я не спец,поэтому попробовал так:
PHP
1
2
3
4
5
6
7
8
9
10
11
$prosmotrov = mysql_query("select * FROM lessons",$connect);
$counter = 0;
//Вывод постов
for($i = 0; $i < $num; $i++)  
{  
$rez = mysql_fetch_array($prosmotrov,$connect);
$obnova = mysql_query("UPDATE lessons set obnovlenie = obnovlenie + 1 where  id = {$_GET['id']}");
$counter++;
echo 'Просмотров: '.$counter;
if(isset($postrow[$i]['id'])) echo  '&nbsp;'.$postrow[$i]['text'].'<br/>';
}
А в тех постах которые хранятся в базе данных, ссылки выглядят таким образом:
?id=1 - Пост 1, ячейка 1
?id=2 - Пост 2, ячейка 2
............
Извиняюсь, но у меня ничего не выходит,получается бред.
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
05.10.2010, 09:31
...Syltan, в таблице вообще не нужно хранить ссылки.
Пример:
Имеем следующую таблицу в БД:
SQL
1
2
3
4
5
6
CREATE TABLE `test` (
`id` TINYINT(1) UNSIGNED NOT NULL AUTO_INCREMENT,
`news` CHAR(255) NOT NULL,
`views` TINYINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY ( `id` ) )
ENGINE=InnoDB CHARSET=utf8;
В этой таблице имеются следующие записи:
SQL
1
2
3
INSERT INTO `test` SET `test`.`news` = 'HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных (изначально — в виде гипертекстовых документов).';
INSERT INTO `test` SET `test`.`news` = 'HTTP в настоящее время повсеместно используется во Всемирной паутине для получения информации с веб-сайтов. В 2006 году в Северной Америке доля HTTP-трафика превысила долю P2P-сетей и составила 46 %, из которых почти половина — это передача потокового видео и звука.';
INSERT INTO `test` SET `test`.`news` = 'Microsoft официально подтвердила, что выпуск новой мобильной операционной системы Windows Phone 7 назначен на 11 октября.';
Теперь PHP-код:
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
34
35
36
37
38
39
40
41
42
<?php
//Переменный для соединения с MySQl-сервером
$host = 'localhost';
$login = 'Syltan';
$password = '123';
$db = 'Syltan_db';
 
//Соединяемся с MySQL-сервером
mysql_connect ( $host, $login, $password ) or die ( mysql_error() );
mysql_select_db ( $db ) or die ( mysql_error() );
mysql_set_charset ( 'utf-8' ) or die ( mysql_error() );
 
if ( isset ( $_GET['id'] ) ) {
    
    //Увеличиваем заданный счетчик
    $update = mysql_query ( "UPDATE `test` SET `test`.`views` = `test`.`views` + 1 WHERE `test`.`id` = {$_GET['id']} LIMIT 1" ) or die ( mysql_error() );
 
    //Запрос на выборку из нашей таблицы
    $query = mysql_query ( "SELECT * FROM `test` WHERE `test`.`id` = {$_GET['id']} LIMIT 1" ) or die ( mysql_error() );
 
    //Получаем результат
    $resalt = mysql_fetch_assoc ( $query );
 
    //Выводим полную новость
    echo $resalt['news'], '<br /><span style="color: #CACACA;">Просмотров: ', $resalt['views'], '</span><br /><a href="', $_SERVER['HTTP_REFERER'], '" title="Назад">Назад</a>';
 
}
else {
 
    //Запрос на выборку из нашей таблицы
    $query = mysql_query ( "SELECT * FROM `test`" ) or die ( mysql_error() );
 
    //Немного урезаем новость и выводим ссылки
    while ( $resalt = mysql_fetch_assoc ( $query ) ) {
 
        $news = substr ( $resalt['news'], 0, 20 );
 
        echo '<a href="?id=', $resalt['id'], '" title="', $news, '">', $news, '</a> <span style="color: #CACACA;">Просмотров: ', $resalt['views'], '</span><br />';
 
    }
}
?>
Пробуйте... Мог ошибиться... Старался побыстрее.

Добавлено через 7 часов 57 минут
Syltan, utf-8 -> utf8
Я имею ввиду это:
Цитата Сообщение от romchiksoad Посмотреть сообщение
mysql_set_charset ( 'utf-8' ) or die ( mysql_error() );
нужно заменить на это:
PHP
1
mysql_set_charset ( 'utf8' ) or die ( mysql_error() );
Сейчас попробовал этот скрипт в действии... Работает как и было задумано ( за исключением строчки выше ) Думаю теперь Вы поймете как реализовать счетчик.
1
191 / 191 / 31
Регистрация: 04.10.2010
Сообщений: 505
05.10.2010, 13:41
Я разбил все на несколько файлов... По ходу дела буду объяснять что и для чего.
sql.sql (создание таблиц в бд и заливка тестовых данных). Тут есть таблица users там у всех пользователей пароль 12345. В базе он специально хранится после шифрования функцией md5()
SQL
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
34
35
36
37
CREATE TABLE `news` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL,
  `counter` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
 
INSERT INTO `news` (`id`, `title`, `counter`) VALUES
(1, 'HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных (изначально — в виде гипертекстовых документов).', 0),
(2, 'HTTP в настоящее время повсеместно используется во Всемирной паутине для получения информации с веб-сайтов. В 2006 году в Северной Америке доля HTTP-трафика превысила долю P2P-сетей и составила 46 %, из которых почти половина — это передача потокового вид', 0),
(3, 'Microsoft официально подтвердила, что выпуск новой мобильной операционной системы Windows Phone 7 назначен на 11 октября.', 2),
(4, 'Убит самый неординарный тюнер современности.', 0),
(5, 'ОСАГО подорожает как минимум вдвое.', 0),
(6, 'На ноябрьские праздники россиян ожидают 4-дневные каникулы.', 0),
(7, 'В московском клубе неизвестные расстреляли охрану.', 0),
(8, 'На Бухарестской улице в Петербурге ищут бомбу.', 2);
 
CREATE TABLE `newsconnectusers` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `id_news` INT(10) UNSIGNED NOT NULL,
  `id_user` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
 
CREATE TABLE `users` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `email` VARCHAR(50) NOT NULL,
  `password` VARCHAR(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
 
INSERT INTO `users` (`id`, `name`, `email`, `password`) VALUES
(1, 'Гость', 'none', ''),
(2, 'user', 'user@mail.ru', '827ccb0eea8a706c4c34a16891f84e7b'),
(3, 'петя', 'petr@mail.ru', '827ccb0eea8a706c4c34a16891f84e7b'),
(4, 'bill', 'bill@mail.ru', '827ccb0eea8a706c4c34a16891f84e7b');
index.php (файл который подключает все остальные, ну и отображает на экран все что получилось)
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
<?php
include("config.php"); // файл конфигурации
include("mysql.php");  // файл подключения к бд
include("auth.php");   // файл авторизации
include("user.php");   // файл с панелькой для авторизации)))
 
if(isset($_REQUEST['module'])) // Проверяем что передали в адресной строке браузера
    $module = $_REQUEST['module']; // если есть переменная module, то сохраняем
else // если в адресной строке пусто
    $module = "news"; // занчит в $module записываем нашу страницу по умолчанию
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
 
<body>
<?php
if (file_exists($module.".php")) // А есть ли вообще такой модуль(файл)
    include($module.".php"); // ага, есть. Подключаем его.
else // Нету такого файла
    include("news.php"); // Подключаем модуль(файл) по умолчанию
?>
</body>
</html>
config.php (настройки к бд и количество новостей на страницу)
PHP
1
2
3
4
5
6
7
8
<?php
// некоторые конфигурационные данные
$dbuser   = ""; // Имя пользователя для базы данных
$dbuserpw = ""; // Пароль
$database = ""; // Имя базы данных
 
$rawsonpage = 3; // Количество новостей на странице
?>
mysql.php(подключение к бд)
PHP
1
2
3
4
5
6
<?php
// тут просто подключение к бд, решил вынести в отдельный файл)))
$link = mysql_connect( "localhost", $dbuser, $dbuserpw );
if (! $link ) die ("Не могу подключиться к MySQL" );
mysql_select_db( $database, $link ) or die("Не могу открыть $database: ".mysql_error() );
?>
auth.php (запуск сессии)
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
34
35
36
37
38
39
<?php
if (isset($_POST['name'])) // Если человек попробовал авторизоваться, то сверяем его данные(логин и пароль) с тем что хнанится в бд
{
    $query = "SELECT id, name FROM users WHERE name=\"".$_POST['name']."\" AND password=md5(\"".$_POST['password']."\")";
    $result = mysql_query($query);
    if (mysql_num_rows($result) != 0)// Ага, есть такой пользователь
    {
        session_start(); // Запускаем сессию
        list($_SESSION['userid'], $_SESSION['username']) = mysql_fetch_row($result); // Сохранияем в сессию id и name пользователя
    }
}
 
if (isset($_REQUEST['logout'])) // Если получили такую переменную, то убиваем сессию и переходим на главную страницу
{
    session_start(); // Запускаем сессию
    session_destroy(); // удаляем сессию
    header("Location: http://".$_SERVER['HTTP_HOST']."/");
}
 
if (isset($_REQUEST[session_name()])) // Здессь проверяется наличие сессии в переменной REQUEST, если сессия была создана, то она тут передается.
{
    session_start();
}
 
if (isset($_SESSION['username'])) // если пользователь уже залогинен - ничего не делаем
{
    return;
}
else // А вот если не залогинен... то назначаем его гостем
{
    $query = "SELECT id, name FROM users WHERE id='1'"; // id гостя = 1
    $result = mysql_query($query);
    if (mysql_num_rows($result) != 0)
    {
        session_start(); // Запускаем сессию
        list($_SESSION['userid'], $_SESSION['username']) = mysql_fetch_row($result);// Сохранияем в сессию id и name пользователя
    }
}
?>
user.php (отображение блока для ввода логина и пароля / или кнопка выхода)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if (isset($_SESSION['userid']) && $_SESSION['userid'] != 1) // если пользователь залогинен, то одна форма
{
    echo "
        Здравствуйте, ".$_SESSION['username']."!
        <form action='index.php' method='post'>
        <input type='submit' name='logout' value='Выйти'>
        </form>
    ";
}
else // иначе, другая форма
{
    echo "
        Вы зашли как, ".$_SESSION['username'].". Зарегистрируйтеси или авторизируйтесь!
        <form action='index.php' method='post'>
        <div>Логин <input type='text' name='name'></div>
        <div>Пароль <input type='password' name='password' ></div>
        <div><input type='submit' value='Войти'></div>
        </form>
    ";
}
?>
view.php (основной модуль для отображения новостей)
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
<?php
if(isset($_REQUEST['page'])) // вслучае если в адресной строке передается номер страницы
    $page = $_REQUEST['page'] - 1;
else // если нету таковой, то приравниваем 0
    $page = 0;
 
$sql = "SELECT id, title, counter FROM news WHERE 1";
$result = mysql_query($sql);
$numrows = mysql_num_rows($result); // вычисляем общее количество записей
$numpages = ceil($numrows/$rawsonpage); // вычисляем общее количество отображаемых страниц
 
$sql = "SELECT id, title, counter FROM news WHERE 1 LIMIT ".($page*$rawsonpage).", ".$rawsonpage;
$result = mysql_query($sql);
 
while(list($newsid, $newstitle, $newscounter) = mysql_fetch_row($result)) // перебираем то что выбрали из базы
{
    echo "
        <div style='margin-bottom: 30px; border: 1px solid black;'>
            <div class='news'>Название новости<h3>".$newstitle."</h3></div>
            <div class='viewnews'><a href='?module=viewnews&id=".$newsid."'>Подробнее</a></div>
            <div class='counter'>Количество просмотров: ".$newscounter."</div>
        </div>
    ";
}
for( $i=1 ; $i<=$numpages ; $i++ ) // формируем нумерацию страниц
{
    echo "
        <a href='?module=news&page=".$i."' style='display: block; border: 1px solid black; float: left; padding:5px;'>".$i."</a>
    ";
}
?>
viewnews.php (модуль для просмотра выбранной новости)
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
<?php
$id = $_REQUEST['id']; // номер новости переданной в адресной строке
 
// выборка из связывающей таблицы таким образом, чтобы в одной записи присутствовали id новости и id пользователя
$sql = "SELECT * FROM newsconnectusers WHERE id_news='".$id."' AND id_user='".$_SESSION['userid']."'";
$result = mysql_query($sql);
if(mysql_num_rows($result)==0) //Значит пользователь тут впервые
{
    $sql = "INSERT INTO newsconnectusers SET id_news='".$id."', id_user='".$_SESSION['userid']."'";
    mysql_query($sql); // добавляем запись в связывающую таблицу
    
    $sql = "UPDATE news SET counter = counter + 1 WHERE id = '".$id."'";
    mysql_query($sql); // увеличиваем счетчик +1
}
 
$sql = "SELECT id, title, counter FROM news WHERE id='".$id."'";
$result = mysql_query($sql);
 
// перебираем то что выбрали из базы
list($newsid, $newstitle, $newscounter) = mysql_fetch_row($result);
    echo "
        <div style='margin-bottom: 30px; border: 1px solid black;'>
            <div class='news'>Просмотр новости:<h2>".$newstitle."</h2></div>
            <div class='back'><a href='javascript:history.back();'>Назад</a></div>
        </div>
    ";
?>
Так же я прикрепил архив со всеми файлами.
Вложения
Тип файла: rar counter.rar (4.8 Кб, 9 просмотров)
2
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
05.10.2010, 18:35
у меня появились вопросы:
1. зачем отдельный файл писать для БД(?), можно же все в РНРмуАдмин сделать.
2.
Цитата Сообщение от hellpass Посмотреть сообщение
index.php (файл который подключает все остальные, ну и отображает на экран все что получилось)
допустим..., но есть еще и этот файл
Цитата Сообщение от hellpass Посмотреть сообщение
index.php (файл который подключает все остальные, ну и отображает на экран все что получилось)
зачем 2 файла для отображения главной страницы??

3. // тут код. я читал что сессию включают до любых действий в коде. а здесь в середине подключается, не закрыв первую сессию подключается вторая. не пойму этот момент.
........................................ .............
Цитата Сообщение от hellpass Посмотреть сообщение
session_start(); // Запускаем сессию
list($_SESSION['userid'], $_SESSION['username']) = mysql_fetch_row($result); // Сохранияем в сессию id и name пользователя
}
}
if (isset($_REQUEST['logout'])) // Если получили такую переменную, то убиваем сессию и переходим на главную страницу
{
session_start(); // Запускаем сессию
session_destroy(); // удаляем сессию
header("Location: http://".$_SERVER['HTTP_HOST']."/");
}
if (isset($_REQUEST[session_name()])) // Здессь проверяется наличие сессии в переменной REQUEST, если сессия была создана, то она тут передается.
{
session_start();
и 4-ый вопрос, не по теме:
хочу apple (ОС МАС) приобрести, стоит ли это делать? может кто сталкивался с этим
как он совмешается с РНР, CSS, html?
у него свой браузер, или Виндовские тоже поддерживает?
знаю что паралельно Винду подключать, меня интерисует как это все в МАС?
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
05.10.2010, 21:33
 Комментарий модератора 
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
и 4-ый вопрос, не по теме:
хочу apple (ОС МАС) приобрести, стоит ли это делать? может кто сталкивался с этим
как он совмешается с РНР, CSS, html?
у него свой браузер, или Виндовские тоже поддерживает?
знаю что паралельно Винду подключать, меня интерисует как это все в МАС?
Правило 2.4. гласит:
На каждый вопрос создавайте по одной теме - это помогает избежать путаницы в ответах и облегчает поиск.
Love_and_Peace, не пихайте всё в одну тему. Задайте этот вопрос в соответствующем разделе. Соответствующий раздел


hellpass, у меня так же есть некоторые замечания к Вашему коду. А именно:
1)
Цитата Сообщение от hellpass Посмотреть сообщение
varchar(255)
Поле CHAR работает быстрее, т.к. является статическим, а не динамическим, как VARCHAR.

2)
Цитата Сообщение от hellpass Посмотреть сообщение
DEFAULT '0'
Не вижу смысла число брать в кавычки. Ведь MySQL все равно при работе с этим значением будет преобразовывать его к числу 0 из строки '0'( в нашем случае )

3)
Цитата Сообщение от hellpass Посмотреть сообщение
index.php
Задумка интересная, но не безопасная. Ничто не мешает подсунуть, к примеру, файл admin.php. Если админка написана нормально, то ничего очень страшного может и не произойти...

4)
а)
Цитата Сообщение от hellpass Посмотреть сообщение
include("config.php"); // файл конфигурации
include("mysql.php"); *// файл подключения к бд
include("auth.php"); * // файл авторизации
include("user.php"); * // файл с панелькой для авторизации)))
require работает быстрее, т.к. подключается до начала выполнения кода в файле.

б) если Вы используете этот файл в качестве основного, то зачем тратить время на подключение файлов, содержимое которых, можно просто вставить в текущий файл. Ведь один...

5)
Цитата Сообщение от hellpass Посмотреть сообщение
$module.".php"
Если Вы используете двойные кавычки, то можно обойтись и без конкатенации строк.

6)
Цитата Сообщение от hellpass Посмотреть сообщение
mysql.php
Цитата Сообщение от hellpass Посмотреть сообщение
<?php
// тут просто подключение к бд, решил вынести в отдельный файл)))
$link = mysql_connect( "localhost", $dbuser, $dbuserpw );
if (! $link ) die ("Не могу подключиться к MySQL" );
mysql_select_db( $database, $link ) or die("Не могу открыть $database: ".mysql_error() );
?>
а) Сохранять линк соединения нужно, если используется несколько подключений к MySQL-серверу. А в этом случае можно обойтись и без этого.
б) Условие if там вообще лишнее. Конструкция
PHP
1
mysql_connect ( 'localhost', $dbuser, $dbuserpw ) or die ( mysql_error() );
работает не хуже.
7)
Цитата Сообщение от hellpass Посмотреть сообщение
auth.php
Честно говоря, даже боюсь вникать в этот код. Этим я не хочу никого обидеть, по этому обижаться не нужно!
а)
Цитата Сообщение от hellpass Посмотреть сообщение
if (isset($_SESSION['username'])) // если пользователь уже залогинен - ничего не делаем
{
* * return;
}

if (isset($_REQUEST[session_name()])) // Здессь проверяется наличие сессии в переменной REQUEST, если сессия была создана, то она тут передается.
{
session_start();
}
Зачем это вообще в том файле?
б) Нет проверки на безопасность введенных пользователем данных. Даже нет проверки на целостность введенных данных.
в)
Цитата Сообщение от hellpass Посмотреть сообщение
else // А вот если не залогинен... то назначаем его гостем
{
* * $query = "SELECT id, name FROM users WHERE id='1'"; // id гостя = 1
* * * * $result = mysql_query($query);
* * * * if (mysql_num_rows($result) != 0)
* * * * {
* * * * * * * * session_start(); // Запускаем сессию
* * * * * * * * list($_SESSION['userid'], $_SESSION['username']) = mysql_fetch_row($result);// Сохранияем в сессию id и name пользователя
* * * * }
}
А без запроса к БД нельзя записать в сессию
PHP
1
2
$_SESSION['userid'] = 1;
$_SESSION['username'] = 'Гость';
. Та и вообще, зачем это записывать в сессию?

8)
Цитата Сообщение от hellpass Посмотреть сообщение
user.php
Ну с этим, я думаю всё понятно. Эта форма выведется раньше всего остального и вряд ли впишется даже в самый скудный дизайн. И echo может выводить несколько строк без конкатенации. Вместо точки, используйте запятую.

Честно признаться, дальше лень разбираться, но если интересно, то скажите и я продолжу.

hellpass, без обид, я просто высказал свое мнение о Вашем коде без Вашего разрешения

P.S. Спасибо за код!
P.P.S. Надеюсь, что не нагрубил...
0
191 / 191 / 31
Регистрация: 04.10.2010
Сообщений: 505
05.10.2010, 22:26
Ну сначала ответы дляLove_and_Peace.
1. зачем отдельный файл писать для БД(?), можно же все в РНРмуАдмин сделать.
А это для того чтобы скопировать или импортировать в phpmyadmin. Иначе как бы я показал структуры и тестовые данные?
зачем 2 файла для отображения главной страницы??
Ложь и провокация! Файл index.php только один
3. // тут код. я читал что сессию включают до любых действий в коде. а здесь в середине подключается, не закрыв первую сессию подключается вторая. не пойму этот момент.
Тут есть доля правды, на наличие logout нужно проверять в самом начале файла. Просто писал на работе и не досмотрел)))
Про МАС ни чего сказать не могу... на фиг он не нужен (Моё мнение)
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
05.10.2010, 22:38
hellpass,
> Ложь и провокация! Файл index.php только один
- я про файлы -
index.php - index.php (файл который подключает все остальные, ну и отображает на экран все что получилось)

view.php - (основной модуль для отображения новостей)
тот и другой отображают главную страницу. я как понимаю на главной странице отображаются урезанные новости. получается 2 файла отображают ожно и то же

Добавлено через 2 минуты
хотя делают разные вещи..
а про мак слышал что вирусов нет, перезагрузки операционки нет (пергружаешь зависшую прогу), да компактные они. я ох.. когда системник увидел, как книга
0
191 / 191 / 31
Регистрация: 04.10.2010
Сообщений: 505
05.10.2010, 23:03
Теперь ответы для romchiksoad.
varchar(255)
Да, char работает быстрее, но есть одно но. Собственно это но находится тут
е вижу смысла число брать в кавычки. Ведь MySQL все равно при работе с этим значением будет преобразовывать его к числу 0 из строки '0'( в нашем случае )
Какая разница, в базе данных все данные хранятся как строки, а все эти integer, char, varchar и прочие нужны только когда эти данные выбираются из базы... только при выборке они приводятся к нужному типу. И по безопасности mysql все данные должны находиться в кавычках
Задумка интересная, но не безопасная. Ничто не мешает подсунуть, к примеру, файл admin.php. Если админка написана нормально, то ничего очень страшного может и не произойти...
Ну я ведь и не движок писал, а только лишь пример. Тем более в admin.php все равно будут проверки, да и те "модули" (news и viewnews) будут находиться в папках modules
require работает быстрее, т.к. подключается до начала выполнения кода в файле.
В данном примере это ни на что не влияет.
если Вы используете этот файл в качестве основного, то зачем тратить время на подключение файлов, содержимое которых, можно просто вставить в текущий файл. Ведь один...
Ну тут еще можно поспорить)))
1 Глупо конфиг запихивать в основной файл
2 С mysql тоже... вед вместо подключения к бд, там может находится класс для работы с бд, а каждый класс лучше хранит в отдельном файле
3 и авторизацию зачем пихать в основной файл...
4 user.php - это вообще как отдельный блок
Но при желании можно засунуть все в один файл, но зачем такое месиво, кто потом будет разбираться?
Если Вы используете двойные кавычки, то можно обойтись и без конкатенации строк.
Но таким способом понятнее что это именно переменная, а не набор символов.
а) Сохранять линк соединения нужно, если используется несколько подключений к MySQL-серверу. А в этом случае можно обойтись и без этого.
б) Условие if там вообще лишнее. Конструкция
Ну к примеру там кроме die можно что-то написать более интересное, перенаправление на статичную страницу, где будет что-нить интересное написано.
Честно говоря, даже боюсь вникать в этот код. Этим я не хочу никого обидеть, по этому обижаться не нужно!
Над этими стоками я сильно не задумывался))) Но без этого работать не будет. Там где return можно было написать чуть меньше кода
б) Нет проверки на безопасность введенных пользователем данных. Даже нет проверки на целостность введенных данных.
Ну это логично, еще бы я и проверку бы сделал. это уж кому надо тот пусть и делает.
А без запроса к БД нельзя записать в сессию
А вот я так решил сделать, так и сделал. И с моей точки зрения так корректнее
Та и вообще, зачем это записывать в сессию?
Чтобы гостя по 10 раз не считать
Ну с этим, я думаю всё понятно. Эта форма выведется раньше всего остального и вряд ли впишется даже в самый скудный дизайн. И echo может выводить несколько строк без конкатенации. Вместо точки, используйте запятую.
Ну тут я забил на дизайн... конечно вместо echo надо было писать в какую нибудь переменную и уже ее выводить там где надо.
без обид, я просто высказал свое мнение о Вашем коде без Вашего разрешения
Я никогда не обижаюсь!)))

Ну вообще-то я не писал проект на заказ, а просто предложил примитивную схему действия для счетчика просмотров.
Ну а кто еще что-то сможет скинуть?

Добавлено через 5 минут
index.php - index.php (файл который подключает все остальные, ну и отображает на экран все что получилось)
На самом деле все что требуется от файла index.php - это то чтобы он собрал весь проект в единое целое
получается 2 файла отображают ожно и то же
Ну если почитать что там написано, то view.php это файл показываемый по умолчанию... в случае ошибки или в случае первоначальной загрузки.

Ну на маке тоже есть вирусы. но там нету бесплатного/пиратского ПО. и это не очень-то дешево)
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
05.10.2010, 23:49
Я так понимаю, Вы писали этот код, что бы человек мог его использовать. Если нет, то Вы явно перетрудились. Человеку, который еще не сильно "въехал в тему"( я про PHP ) писать для примера столько кода - лишнее. Я думаю, что большинству новичков будет "впадлу" разбираться в этом. К тому же, пример должен быть правильным ( без
Цитата Сообщение от hellpass Посмотреть сообщение
конечно вместо echo надо было писать в какую нибудь переменную и уже ее выводить там где надо.
), что бы оппонент видел как правильно писать код.
Если Вы взялись писать такой пример, то там и должна быть переменная, а не echo ( я не только об этом, перечислять всего не хочется по новой ).

Вы как-то не определенно пишите код. То "это всего лишь пример", то "ну там может быть и что-то серьезнее, по этому пусть будет"
Цитата Сообщение от hellpass Посмотреть сообщение
1 Глупо конфиг запихивать в основной файл
Такой конфиг вообще никуда не нужно запихивать...
Цитата Сообщение от hellpass Посмотреть сообщение
2 С mysql тоже... вед вместо подключения к бд, там может находится класс для работы с бд, а каждый класс лучше хранит в отдельном файле
Вот если бы там был написан класс, то я бы этого не писал.
Цитата Сообщение от hellpass Посмотреть сообщение
3 и авторизацию зачем пихать в основной файл...
Затем, что это всего лишь пример... А вообще, если разобраться, то в Вашем примере index.php больше похож на "конфиг", чем config.php/

Цитата Сообщение от hellpass Посмотреть сообщение
Но таким способом понятнее что это именно переменная, а не набор символов.
Нужно давать переменным нормальные имена, а не набор символов. К тому же во многих редакторах есть подсветка кода, которая и выделит переменную из текста.

Цитата Сообщение от hellpass Посмотреть сообщение
И с моей точки зрения так корректнее
В чем заключается корректность?

Цитата Сообщение от hellpass Посмотреть сообщение
Какая разница, в базе данных все данные хранятся как строки, а все эти integer, char, varchar и прочие нужны только когда эти данные выбираются из базы... только при выборке они приводятся к нужному типу. И по безопасности mysql все данные должны находиться в кавычках
БД и есть файл, в котором все данные хранятся в текстовом виде. А вот по поводу "а все эти integer, char, varchar и прочие нужны только когда эти данные выбираются из базы..." не согласен! При записи это тоже имеет не маловажное значение. И это Вы должны были понять из статьи по ссылке, которую Вы оставили в этой теме. А про безопасность можно говорить долго и в итоге ни к чему общему не прийти. Я, честно говоря, не понимаю связи между кавычками и безопасностью MySQL. Кавычки скорее нужны для того, что бы указать, что это строка. Ведь если выполнить такой запрос:
SQL
1
INSERT INTO `test` SET `test`.`news` = текс текст text, `test`.`views` = 0;
будет ошибка из-за отсутствия скобок при записи текста ( строковый тип ). А вот такой запрос нормально "проканает":
SQL
1
INSERT INTO `test` SET `test`.`news` = 'текст текст текст', `test`.`views` = '0'
т.к. MySQL при записи в целочисленный столбец преобразует строку 0 к целому числу 0.

Цитата Сообщение от hellpass Посмотреть сообщение
В данном примере это ни на что не влияет.
Влияет. Я выше писал на что.

Цитата Сообщение от hellpass Посмотреть сообщение
Ну к примеру там кроме die можно что-то написать более интересное, перенаправление на статичную страницу, где будет что-нить интересное написано.
Это после отладки. На момент тестирования кода нужно видеть свои ошибки.

Цитата Сообщение от hellpass Посмотреть сообщение
Ну это логично, еще бы я и проверку бы сделал. это уж кому надо тот пусть и делает.
Об этом я тоже писал выше, но повторюсь: если Вы взялись писать такой пример, то пишите его по человечески до последнего ?>.

Цитата Сообщение от hellpass Посмотреть сообщение
Чтобы гостя по 10 раз не считать
Та чё там... Уже бы всё, что можно о нем узнать ( ip-адрес, имя, версия браузера и т.п. ), записывали бы в БД... Это же пример...

Вроде всё сказал.


Цитата Сообщение от hellpass Посмотреть сообщение
Я никогда не обижаюсь!)))
Слабо вериться, но если Вы так говорите, то значит не обиделись
0
191 / 191 / 31
Регистрация: 04.10.2010
Сообщений: 505
06.10.2010, 00:13
Блин, у меня больше нету настроения все это комментировать))) устал за сегодня.
Если ты модератор, то сможешь удалить мои записи... и я с удовольствием посмотрю на продолжение темы... Когда ни кто не знает чего хочет))
Этот код я сделал исключительно для примера, уж точно я не хотел чтобы его использовали как эталон.

Давайте оставим меня и посмотрим, что вы там напридумываете, а я покомментирую.
П.С. Ну а если кто-то мне не верит, что я не обижаюсь, то этого его проблемы. Я этого ни как не смогу доказать)
Я сюда зашел вообще только для этого
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
06.10.2010, 00:32
Цитата Сообщение от hellpass Посмотреть сообщение
Блин, у меня больше нету настроения все это комментировать))) устал за сегодня.
Сочувствую
Цитата Сообщение от hellpass Посмотреть сообщение
Если ты модератор, то сможешь удалить мои записи...
Никто и ничего удалять не будет.
Цитата Сообщение от hellpass Посмотреть сообщение
Давайте оставим меня и посмотрим, что вы там напридумываете, а я покомментирую.
комментируйте, я только за.
Цитата Сообщение от hellpass Посмотреть сообщение
П.С. Ну а если кто-то мне не верит, что я не обижаюсь, то этого его проблемы. Я этого ни как не смогу доказать)
Так и не нужно что-то кому-то доказывать. Вас никто об этом не просит.
0
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
06.10.2010, 02:05  [ТС]
romchiksoad,у вас встретил пару непонятных мест:
1)$_SERVER['HTTP_REFERER'] что это даёт в вашем коде, который вы писали ранее?
2)Зачем нужно LIMIT 1?
Code
1
2
    $query = mysql_query ( "SELECT * FROM `lessons` WHERE `lessons`.`id`
 = {$_GET['id']} LIMIT 1" ) or die ( mysql_error() );
и вот это растолкуйте что даёт:
or die ( mysql_error() );
3) Как сделать,чтоб если с того же компа пользователь просмотрел пост несколько раз, чтоб не обновлять счётчик, именно на том коде который вы писали мне для примера?
0
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
06.10.2010, 03:01  [ТС]
Вроде всё выдаёт но проблема в том, что постраничная навигация теперь перестала у меня работать,хотя код вроде сильно не менял. Вот переделал ,счётчик работает ,а постраничная не работает,я имею ввиду на страницу не выходят 3 поста,а остатки на др.страницу постов.
Вложения
Тип файла: rar s.ru.rar (109.2 Кб, 6 просмотров)
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
06.10.2010, 07:00
Цитата Сообщение от Syltan Посмотреть сообщение
1)$_SERVER['HTTP_REFERER'] что это даёт в вашем коде, который вы писали ранее?
Это просто для минимального удобства. $_SERVER['HTTP_REFERER'] - содержит путь предыдущей ссылки, т.е. откуда мы пришли. Мы её используем, что бы вернуться назад:
<a href="', $_SERVER['HTTP_REFERER'], '" title="Назад">Назад</a>
Цитата Сообщение от Syltan Посмотреть сообщение
2)Зачем нужно LIMIT 1?
Затем, что бы не тратить лишнее время на выполнение запроса. Указывая лимит в запросах мы ускоряем запрос. В нашем случае, запрос прекращает выполняться после того, как найдется одна соответсвующая запись. К примеру, в таблице 100 записей, а нам нужна только первая. Указывая LIMIT 1, запрос прекратит выполняться сразу после нахождения первой записи.
Цитата Сообщение от Syltan Посмотреть сообщение
и вот это растолкуйте что даёт:
or die ( mysql_error() );
В случае ошибки, скрипт прекратит выполнятся и выведет ошибку, из за которой прекращена работа.

Цитата Сообщение от Syltan Посмотреть сообщение
3) Как сделать,чтоб если с того же компа пользователь просмотрел пост несколько раз, чтоб не обновлять счётчик, именно на том коде который вы писали мне для примера?
Я уже не успеваю, прийду на работу и постараюсь найти время на апдейт кода
1
191 / 191 / 31
Регистрация: 04.10.2010
Сообщений: 505
06.10.2010, 11:14
romchiksoad, а почему ты для id использовал тип TINYINT?
Не маловато ли 255 записей?

Добавлено через 18 минут
Цитата Сообщение от Syltan Посмотреть сообщение
Вроде всё выдаёт но проблема в том, что постраничная навигация теперь перестала у меня работать,хотя код вроде сильно не менял. Вот переделал ,счётчик работает ,а постраничная не работает,я имею ввиду на страницу не выходят 3 поста,а остатки на др.страницу постов
в kontent.php в 53-ей строке написано
PHP
1
$query = mysql_query ( "SELECT * FROM `lessons`" ) or die ( mysql_error() );
а нужно
PHP
1
$query = mysql_query ( "SELECT * FROM lessons LIMIT $start, $num" ) or die ( mysql_error() );
1
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
06.10.2010, 13:36
Цитата Сообщение от hellpass Посмотреть сообщение
romchiksoad, а почему ты для id использовал тип TINYINT?
Не маловато ли 255 записей?
Я не писал скрипт, который готов к использованию. Я писал пример. Для примера не обязательно использовать INT и TEXT.
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
06.10.2010, 14:19
ребята, я так и не понял, если использовать сессию, разве счетчик не обнулится для пользователя, когда он в следущий раз посетит сайт??
как сайт узнает пользователя если куки не используются?
и последний вопрос, допустим я написал пример правильно, значит счетчик для меня уже не будет увеличиватся. теперь чтобы убедиться в правильности примера мне надо с другого компа зайти?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2010, 14:19

Счетчик просмотров !
Проблема такова хочу сделать количество просмотров что бы отображалось вывел табличку в цикл в базц поместил 2 пункта для пробы в 1м...

Количество просмотров
Есть новости, каждая из которых доступна по адресу http://sait/news.php?id= ID Как сделать подсчет переходов к новости (подсчет кол-ва...

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

Узнать число просмотров
Доброго времени суток господа! Мучаюсь тут с одной головоломкой, суть работы такая. Узнаем сколько просмотров, если 0 то просмотров,...

Счетчик уникальных просмотров статьи
Здравствуйте. Можете подсказать как лучше реализовать счетчик уникальных просмотров статьи? В одной статье пишут хранить данные в БД,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru