Случайно число с PHP и Javascript - Как?

Ако искаш за всеки продукт различно число, то както каза rombeca на сървъра можеш да записваш числото заедно номера на продукта. Можеш ли в PHP кода да вземеш номера на продукта?

Да мога да го взема.
Затова чисто теретично си мислех че мога да вържа всеки продукт с нова сесия с уникален номер.

За стартирането на сесията пише - session_start() - Start new or resume existing session

В кода аз имам следната проверка - if (is_product) - и показвам случайното число само за продукти. след това идва session_start()
Да приемем че номера на заредения продукт е 1111.
Ако по някакъв начин мога да кажа:

session_start() - стартирай сесия
session_name(1111)

Генерирам число и го запазвам в променлива за тази сесия

След това решавам да отида на друг продукт - с номер 2222
session_start() - стартирай сесия
session_name(2222)

Стартирам нова сесия с ново име 2222 и т.н.


Ако след 2222 се върна на продукт 1111 - не ме интересува дали пази числото - може да го генерира на ново и да е различно.

Въпроса е да не сменя при рефреш (F5) на текущата страница.
 
Бе тия продукти нямат ли си ID в таблицата? Ето ти число, хубаво, уникално и не се сменя при рефреш.
 
Бе тия продукти нямат ли си ID в таблицата? Ето ти число, хубаво, уникално и не се сменя при рефреш.

Имат си но точно това число не ми върши работа.
Виждам, че задачата уж елементарна започна да изнервя и Вас. :)
Аз вече много се изнервих с това. Ще си дам малко почивка по темата и ако в понеделник още ме човърка ще търся пак код който да приспособя.
Но определено ми се искаше да се случва при клиента - javascript, sesion - без бази данни. PHP го добавих само защото не ми се иска всеки да вижда пълния код.

Ако иска някой модератор да сложи ендна червена точак и да пише - не си струва времето

Благодаря на всички които отделиха време за тази тема.
 
Мен ако питаш - не искам нищо да се случва при клиента :).
Само си усложняваш живота... браузъри забиват, трият се кукита, лаг и т.н.

Ти така и не каза за какво точно ти е това число.
 
Ами не казах защото ако кажа утре всички сайтове, които имат на разположение програмист ще са го внедрили. Само аз не :) :)

Дойде идейка и исках да я тествам. :)
Исках да показвам нещо различно на всяка страница и то да е псевдоуникално докато се разглежда тази страница.

А дори не знам дали ще има ефект. :)

И понеже не обичам да оставям нерешени проблеми - цяла седмица загубих с тоя код.
 
Чисто теоретично за да се сменя по веднъж за всеки продукт си мисля, че трябва да задавам нова сесия за всеки продукт примерно като използвам номер на сесия или име и задавам id-то на продукта.

PHP:
 $_SESSION["random"][<productId here>] = $boza;
 
Искаш 1 число да е статит докато не се смени страницата или сесията? Но преди това да се изгенерира на случаен принцип? Ясно, при рефреш да е същото. Ако успееш малко да подскажеш за целта, ще може да захапем и къде да го набиеш. Дори нещо темпорали генерирано и да се чисти при нова сесия. Или друго вю (страница). И се генерира директно след логване.
 
@bgrgroup ти така и не каза какъв е проблема. Споменаваш само ти какво искаш да правиш - звучи нелогично и глупаво, но явно ти трябва за нещо.

Аз първо помислих, че просто се учиш и някой урок от книга Х не ти се получава.
 
PHP:
 $_SESSION["random"][<productId here>] = $boza;

Това ще го тествам другата седмица. Благодаря.
Иначе ми хареса твоя подпис - и точно за това писах, че ми е съвестно дето Ви отнех толкова време и мисли.

Знам че ако платя на някой от вас ще се случат нещата. Но това е за фирмен сайт и както казах не знам дали изобщо имаше смисъл да се захващам - дали ще има ефект. Но пък ако само стандартните неща правим - то ще е много скучно в интернет. Нали всеки иска да покаже продукта си по уникален начин.

Blinky - по ясно от това не мога да го обясня. Не се хващайте за думата, защото аз се уча на код от неволята. Не съм програмист по професия. Ето още веднъж стъплите:

1. Посетител разглежда страница 1 в сайт.
- на стрницата се показва едноцифрено. псевдо-случайно число /или друго свързано с числото, което няма отношение за решаване на задачата/
- случайното число не се променя докато страницата е отворена в броузера на клиента и дори и да рефрешва с F5 или Ctrl+F5 - числото не се променя.
2. Посетителя преминава към страница 2
- на страницата отново се показва псевдо-случайно число. Понеже е псевдо-случайно и няма връзка числото показано на Страница 1 - то може и са съвпадне, но може и да не съвпадне с предишното - това не етолкова фатално. Няма да се случва при всяко преминаване, надявам се.
- отново числото остава непроменено докато страницата е отворена в броузера и дори когато насила се презарежда с F5.
3. Посетителя напуска сайта или затваря броузера - и всичко приключва. Когато отново посети сайта след час или дни - всичко се генерира наново - за всяка страница.

Заради точка 3 мисля че бисквитките не са най-подходяши, защото никой не ги чисти.
Сесийте ми се виждат подходящи защото са времнни. А това че пазят малко данни - ок. Нали ще пазим само 1 или 2 числа.

Така че подсказката на Torbalan Trolski ми се вижда удачна - ще тествам

AMitrev - не е точно от ученмик. Казах много пъти идеята си моя а за кода чета във всякакви форуми. Така стигнах да сесиите. Преди не съм работил със сесии. Затова чета и ръководството на PHP за сътветните функции. А кода който обсъждаме си го сглобих с четене на решения за други случаи - точно това което искам - не намерих.

Но както се казваше в една реклама Само с гледане не става, трябва и ъкъл. Затова реших да попитам специалисти в български форум

За пореден път ще Ви благодаря.
Ако някой се чувства използван - извинявам се. Не това мие целта. Просто да не си губи времето с тази тема.

Ако пък някой, като мен не обича да оставя нерешени задачи - ще съм благодарен да я решим заедно. :)


Приятни почивни дни на всички, които писаха и четоха - и се ядосваха с мен! :)

 
Код:
<?php
    session_start();

    $productID = $_GET['productID'];
    $productRandomNumber = 0;

    if (!isset($_SESSION['products'])) {
        $_SESSION['products'] = [];
    }
 
    if (!isset($_SESSION['products'][$productID])) {
        $productRandomNumber = mt_rand(1,10);
        $_SESSION['products'][$productID] = $productRandomNumber;
    }
    else {
        $productRandomNumber = $_SESSION['products'][$productID];
    }

    echo '$productID = ' . $productID . '<br>';
    echo '$productRandomNumber = ' . $productRandomNumber . '<br>';
    echo 'Session (cookie) name = ' . session_name() . '<br>';
    echo 'Session ID = ' . session_id() . '<br>';

    echo "<pre>";
    var_dump($_SESSION);
    echo "</pre>";

Пробвай това. Обаче на самостоятелно файлче, че номера на продукта се задава като ?productID=123
 
Но определено ми се искаше да се случва при клиента - javascript, sesion - без бази данни.

На клиента имаш бисквитки, Local Storage и някакви други начини за пазене на данни дето не съм ги проучвал.

Както е примера ми горе, може да се подават данни и през адреса горе. Би било кофти за изпълнение и тъпо като решение, но и това може да е начин да задържиш някакви данни докато потребителя е отворил браузъра.
 
Последно редактирано:
Аз не съм програмист, но да се пробвам :D

Доколкото разбрах искаш на всеки продукт да ти излиза някакво random число, което да стои статично за всеки един продукт, за всеки посетител.

Направи си поле в базата за това число при продукта. С един прост PHP скрипт (или RAND() ) налей random числа в базата каквито поискаш.

После с echo ги показвай където намериш за добре.

Имаш заявка към продукта, който тегли id, цена, описание, снимка и кой знае още колко простотии (особено пък wordpress...).

Елементарно е и за мен да викаш инфо от още едно поле в базата ще е доста по-бързо отколкото да се вкараш в някакви сесии, кукита и т.н.

Да прощавате профанността ми :D
 
Код:
<?php
    session_start();

    $productID = $_GET['productID'];
    $productRandomNumber = 0;

    if (!isset($_SESSION['products'])) {
        $_SESSION['products'] = [];
    }
 
    if (!isset($_SESSION['products'][$productID])) {
        $productRandomNumber = mt_rand(1,10);
        $_SESSION['products'][$productID] = $productRandomNumber;
    }
    else {
        $productRandomNumber = $_SESSION['products'][$productID];
    }

    echo '$productID = ' . $productID . '<br>';
    echo '$productRandomNumber = ' . $productRandomNumber . '<br>';
    echo 'Session (cookie) name = ' . session_name() . '<br>';
    echo 'Session ID = ' . session_id() . '<br>';

    echo "<pre>";
    var_dump($_SESSION);
    echo "</pre>";

Пробвай това. Обаче на самостоятелно файлче, че номера на продукта се задава като ?productID=123

Това сработи.
Показва "различно" случайно число за всеки продукт.
Не го променя при презареждане на страницата с F5.

Общо взето това е което търсех като резултат. Сега ще го тествам онлайн и има-няма ефект - след месец два ще споделя.

Благодаря още веднъж на всички колеги, които се включиха в темата и най-вече на AseasRoa - за предложения код.
Модератор може да отбележи темата като решена.
 
Сега остава да си и GDPR ready!

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

Когато човек се логне добре. Тогава в сесията му пазаиш данните за профила, но когато е анонимен... ?
 
Сега остава да си и GDPR ready!

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

Когато човек се логне добре. Тогава в сесията му пазаиш данните за профила, но когато е анонимен... ?

Айде сега GDRP? Претенции :) То не може всичко да е наред. Много хубаво не е на хубаво.

Първо не виждам какво лично има в случайното число, че да не мога да го генерирам!?
Второ тук попитах за решение по-знаещите от мен. И не видях някой да дава дори идея за хиляди решения. Да не говорим, че и като търсих решение преди да пиша не открих хиляди начини.
Аз лично незнам как решението което търсех ще е без сесия. И честно казано не виждам, чисто теоретично, каква е разликата дали ще следя отворена страница от клиент със сесия или някакви javascript events които да генерират заявка към сървъра -> базата -> и обратно към клиента ???

Не се заяждам, но така зададен въпроса без никакви обяснения - ми звучи като поговорката - Не е важно аз да съм добре, а комшията да е по-зле! :)

Аз МОЖЕ БИ ще използвам този код онлайн с тестова цел. На собствена отговорност.
Всеки който чете тази тема и намери приложение на кода - да го използва също на собствена отговорност.
 
@bgrgroup липсват ти основни знания. Числото не е рпоблем. Проблема е сесията, кяото пише куки в браузира на клиента. Това попада под GDPR-то ;).

Питах те каква ти е целта, не казваш. Как тогава очакваш решения?

Ето ти вариант без кукита, като приемам че те устройва всеки ден да бъде едно и също числото за даден продукт.
Друго което приемам за даденост, че ид-то на продуктите са между 100 и 200

Код:
$modifier = date('z') + 2;
$randomNumber = round(  pow($productID, $modifier) / 1000 ) + $modifier;
 
@bgrgroup липсват ти основни знания. Числото не е рпоблем. Проблема е сесията, кяото пише куки в браузира на клиента. Това попада под GDPR-то ;).

Питах те каква ти е целта, не казваш. Как тогава очакваш решения?

Ето ти вариант без кукита, като приемам че те устройва всеки ден да бъде едно и също числото за даден продукт.
Друго което приемам за даденост, че ид-то на продуктите са между 100 и 200

Код:
$modifier = date('z') + 2;
$randomNumber = round(  pow($productID, $modifier) / 1000 ) + $modifier;
Откъде го копна това?
 
И? Това че ти не може да мислиш не значи, че всички са такива.
 

Горе