Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Скрипт за брой четения на статия?

Featured Replies

Здравейте,

трябва ми скрипт, с който да показвам колко пъти е била четена всяка една от статиите/публикациите. Да използва база данни.

Става сума за ето тази страница (примерно):

http://cheeseus.org/translations_read.php?trans_id=1

За всяко от различните ID-та да съхранява брой четения. Предполагам просто трябва да добавя колона в таблицата, която да се казва "views" например, но не ми е ясно как точно да напиша кода. Благодаря предварително за помощта ви!

Здравейте,

трябва ми скрипт, с който да показвам колко пъти е била четена всяка една от статиите/публикациите. Да използва база данни.

Става сума за ето тази страница (примерно):

http://cheeseus.org/translations_read.php?trans_id=1

За всяко от различните ID-та да съхранява брой четения. Предполагам просто трябва да добавя колона в таблицата, която да се казва "views" например, но не ми е ясно как точно да напиша кода. Благодаря предварително за помощта ви!

Сложи функцията в библиотеката си:

Приемаме, че библиотеката е в директория inc/

inc/lib.php

function updateCount($id) {

	$id = intval($id);

	if (!in_array($id,$_SESSION['viewed'])) {

		$query = "UPDATE articles SET views=views+1 WHERE id=$id";

		mysql_query($query) or custom_die("ERROR: in file: `".__FILE__."` on line: `".__LINE__."` DETAIL: `".mysql_error()."`");

		$_SESSION['viewed'][] = $id;

		return true;

	}

	else {

		return false;

	}

}
после, на страницата която ще я ползваш:
include(dirname(__FILE__).'/inc/lib.php');
приемаме, че вечеш имаш конекция към базата данни и си направил mysql_select_db(DATABASE_NAME); Също така приемаме, че си стартирал и сесията:
session_start();
Някъде преди да почнаш показването примерно, но СЛЕД като си се свързал с mysql + старт на сесия пишеш:
updateCount($trans_id);

Функцията custom_die() можеш да я изтриеш и да сложиш там каквото искаш да се случи.

В показания случай, може да си направиш такава функция и да и дадеш да пише в някакъв log грешките и / или да те уведомява по мейла ако има проблем.

Във самата функция може да промениш името на таблицата, с това което ти ползваш.

Сесията се използва, за да предотврати повторно броене за "видяно" на потребителя.*

*като му изтече сесията и отиде на страницата ще увеличи пак броя, но пък поне при рефреш или мултипъл вюс, без да затваря браузъра няма да ти цъка излишни updates

Редактирано от fubar (преглед на промените)

  • Автор

Благодаря!

Обаче нещо не ми се получи... sad.gif

Сложих това в самото начало на "translations_read.php":

<?php

include("publisher/config_publisher.php");

include(dirname(__FILE__)."/lib.php");

session_start();

updateCount($trans_id);

?>
Мога ли всъщност да добавя функцията от lib.php в config_publisher.php? Коригирах няколко първоначални мои грешки и сега страницата се зарежда без никакви съобщения за грешка, но и не ъпдейтва колоната в таблицата "translations.views". Колоната е "int(12)" - така правилно ли е? Направих само няколко "козметични промени" по lib.php:
<?php

function updateCount($trans_id) 

	{

		$trans_id = intval($trans_id);

		if (!in_array($trans_id,$_SESSION['viewed'])) 

			{

				$query = "UPDATE translations SET views=views+1 WHERE trans_id=$trans_id";

				mysql_query($query) or custom_die("ERROR: in file: `".__FILE__."` on line: `".__LINE__."` DETAIL: `".mysql_error()."`");

				$_SESSION['viewed'][] = $trans_id;

				return true;

			}

		else 

			{

				return false;

			}

	}

?>

Ако можеш да ми кажеш къде ми е грешката, ще е супер :)

Редактирано от dalai.lamia (преглед на промените)

Да, можеш да сложиш функцията във всеки файл който поискаш.

Значи, варианти:

1. имаш registered_globals = off -> тогава на функцията подавай:

updateCount($_GET['trans_id'])
2. Преди извикването на функцията, все още нямаш връзка с базата данни:
$CONNECTION = mysql_connect($SERVER,$USERNAME,$PASSWORD);
3. Имаш валидна конекция, но в кода си използваш depreciated още във php 4.06 функцията:
mysql_db_query($DATABASE,$query,$CONNECTION);
-решението е да сложиш вътре във функцията:
mysql_db_query("име_на_БД",$query)
вместо
mysql_query($query)
-най-добре да използваш само веднъж
mysql_select_db($DATABASE);
-или най-най-добре е да ползваш за всяка заявка името на базата данни вътре:
$query = "SELECT * FROM `база_данни`.`моя_таблица` WHERE `нещо`='друго_нещо'";

mysql_query($query);
4. Има проблем със сесията и in_array, трябва да добавиш следния ред:
if (!isset($_SESSION['viewed'])) $_SESSION['viewed'] = array();

$trans_id = intval($trans_id);

...................................

  • Автор

Хм...

Не съм сигурен, че разбирам всичко (нов съм в PHP), но...

registered_globals = on;

Всъщност, заявките, които използвам са със следната структура:

<?php

function updateCount($trans_id) 

	{

		$trans_id = intval($trans_id);

		if (!isset($_SESSION['views'])) $_SESSION['views'] = array();


			{

				$query = mysql_query("UPDATE translations SET views=views+1 WHERE trans_id=$trans_id",$connect);

					while ($rrow = mysql_fetch_array($query))

					{

						$_SESSION['views'][] = $trans_id;

						return true;

					}

			}


	}

?>
Но в начина, по който съм променял твоя код очевидно има грешки. Самата ми връзка става така:
$connect = mysql_connect($dbhost, $dbusername, $dbpassword);

mysql_select_db($dbname,$connect) or die ("Could not select database");

Там е работата, че не ми е ясно как точно да напиша функцията updateCount, та да работи... sad.gif

Редактирано от dalai.lamia (преглед на промените)

function updateCount($trans_id)

{

	/*функцията няма достъп до тази променлива, трябва да си я вземем.*/

	global $connect;


	/*каквото и да пуснеме като ID, винаги ще го направи на число, най-простата защита срещу какъвто и да е sql injection*/

	$trans_id = intval($trans_id); 


	$result = mysql_query("UPDATE translations SET views=views+1 WHERE trans_id=$trans_id",$connect);

	if ($result) {

			$_SESSION['views'][] = $trans_id;

			return true;

	}

	else {

		   return false;

	}

}

Редактирано от fubar (преглед на промените)

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Публикацията ви съдържа термини, които не допускаме! Моля, редактирайте съдържанието си и премахнете подчертаните думи по-долу. Ако замените букви от думата със звездички или друго, за да заобиколите това предупреждение, профилът ви ще бъде блокиран и наказан!
Напишете отговор в тази тема...

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.