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

Дискусията в 'Web Development' стартирана от bgrgroup, Ноем 15, 2018.

  1. bgrgroup

    bgrgroup New Member

    Рег.:
    Окт 22, 2018
    Съобщения:
    27
    Харесвания:
    0
    Точки:
    1
    Да мога да го взема.
    Затова чисто теретично си мислех че мога да вържа всеки продукт с нова сесия с уникален номер.

    За стартирането на сесията пише - 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) на текущата страница.
     
  2. rombeca

    rombeca Active Member

    Рег.:
    Ноем 9, 2010
    Съобщения:
    955
    Харесвания:
    213
    Точки:
    43
    Бе тия продукти нямат ли си ID в таблицата? Ето ти число, хубаво, уникално и не се сменя при рефреш.
     
    Blinky харесва това.
  3. bgrgroup

    bgrgroup New Member

    Рег.:
    Окт 22, 2018
    Съобщения:
    27
    Харесвания:
    0
    Точки:
    1
    Имат си но точно това число не ми върши работа.
    Виждам, че задачата уж елементарна започна да изнервя и Вас. :)
    Аз вече много се изнервих с това. Ще си дам малко почивка по темата и ако в понеделник още ме човърка ще търся пак код който да приспособя.
    Но определено ми се искаше да се случва при клиента - javascript, sesion - без бази данни. PHP го добавих само защото не ми се иска всеки да вижда пълния код.

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

    Благодаря на всички които отделиха време за тази тема.
     
  4. rombeca

    rombeca Active Member

    Рег.:
    Ноем 9, 2010
    Съобщения:
    955
    Харесвания:
    213
    Точки:
    43
    Мен ако питаш - не искам нищо да се случва при клиента :).
    Само си усложняваш живота... браузъри забиват, трият се кукита, лаг и т.н.

    Ти така и не каза за какво точно ти е това число.
     
  5. bgrgroup

    bgrgroup New Member

    Рег.:
    Окт 22, 2018
    Съобщения:
    27
    Харесвания:
    0
    Точки:
    1
    Ами не казах защото ако кажа утре всички сайтове, които имат на разположение програмист ще са го внедрили. Само аз не :) :)

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

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

    И понеже не обичам да оставям нерешени проблеми - цяла седмица загубих с тоя код.
     
  6. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,140
    Харесвания:
    489
    Точки:
    83
    PHP:
     $_SESSION["random"][<productId here>] = $boza;
     
    kufeiko и Blinky харесват това.
  7. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    23,172
    Харесвания:
    1,890
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    Искаш 1 число да е статит докато не се смени страницата или сесията? Но преди това да се изгенерира на случаен принцип? Ясно, при рефреш да е същото. Ако успееш малко да подскажеш за целта, ще може да захапем и къде да го набиеш. Дори нещо темпорали генерирано и да се чисти при нова сесия. Или друго вю (страница). И се генерира директно след логване.
     
  8. AMitrev

    AMitrev Well-Known Member

    Рег.:
    Авг 6, 2012
    Съобщения:
    1,641
    Харесвания:
    289
    Точки:
    83
    Пол:
    Мъж
    Място:
    София
    @bgrgroup ти така и не каза какъв е проблема. Споменаваш само ти какво искаш да правиш - звучи нелогично и глупаво, но явно ти трябва за нещо.

    Аз първо помислих, че просто се учиш и някой урок от книга Х не ти се получава.
     
  9. bgrgroup

    bgrgroup New Member

    Рег.:
    Окт 22, 2018
    Съобщения:
    27
    Харесвания:
    0
    Точки:
    1
    Това ще го тествам другата седмица. Благодаря.
    Иначе ми хареса твоя подпис - и точно за това писах, че ми е съвестно дето Ви отнех толкова време и мисли.

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

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

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

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

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

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

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

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

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


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

     
  10. AseasRoa

    AseasRoa Well-Known Member

    Рег.:
    Юни 22, 2014
    Съобщения:
    948
    Харесвания:
    317
    Точки:
    63
    Код:
    <?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
     
    bgrgroup и Blinky харесват това.
  11. AseasRoa

    AseasRoa Well-Known Member

    Рег.:
    Юни 22, 2014
    Съобщения:
    948
    Харесвания:
    317
    Точки:
    63
    На клиента имаш бисквитки, Local Storage и някакви други начини за пазене на данни дето не съм ги проучвал.

    Както е примера ми горе, може да се подават данни и през адреса горе. Би било кофти за изпълнение и тъпо като решение, но и това може да е начин да задържиш някакви данни докато потребителя е отворил браузъра.
     
    Последно редактирано: Ноем 16, 2018
    bgrgroup харесва това.
  12. Fozzy

    Fozzy Well-Known Member

    Рег.:
    Окт 7, 2007
    Съобщения:
    3,632
    Харесвания:
    573
    Точки:
    113
    Аз не съм програмист, но да се пробвам :D

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

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

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

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

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

    Да прощавате профанността ми :D
     
  13. bgrgroup

    bgrgroup New Member

    Рег.:
    Окт 22, 2018
    Съобщения:
    27
    Харесвания:
    0
    Точки:
    1
    Това сработи.
    Показва "различно" случайно число за всеки продукт.
    Не го променя при презареждане на страницата с F5.

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

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

    AMitrev Well-Known Member

    Рег.:
    Авг 6, 2012
    Съобщения:
    1,641
    Харесвания:
    289
    Точки:
    83
    Пол:
    Мъж
    Място:
    София
    Сега остава да си и GDPR ready!

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

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

    bgrgroup New Member

    Рег.:
    Окт 22, 2018
    Съобщения:
    27
    Харесвания:
    0
    Точки:
    1
    Айде сега GDRP? Претенции :) То не може всичко да е наред. Много хубаво не е на хубаво.

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

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

    Аз МОЖЕ БИ ще използвам този код онлайн с тестова цел. На собствена отговорност.
    Всеки който чете тази тема и намери приложение на кода - да го използва също на собствена отговорност.
     
  16. AMitrev

    AMitrev Well-Known Member

    Рег.:
    Авг 6, 2012
    Съобщения:
    1,641
    Харесвания:
    289
    Точки:
    83
    Пол:
    Мъж
    Място:
    София
    @bgrgroup липсват ти основни знания. Числото не е рпоблем. Проблема е сесията, кяото пише куки в браузира на клиента. Това попада под GDPR-то ;).

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

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

    Код:
    $modifier = date('z') + 2;
    $randomNumber = round(  pow($productID, $modifier) / 1000 ) + $modifier;
    
     
  17. хейтър

    хейтър Active Member

    Рег.:
    Авг 23, 2014
    Съобщения:
    405
    Харесвания:
    130
    Точки:
    43
    Откъде го копна това?
     
  18. AMitrev

    AMitrev Well-Known Member

    Рег.:
    Авг 6, 2012
    Съобщения:
    1,641
    Харесвания:
    289
    Точки:
    83
    Пол:
    Мъж
    Място:
    София
    @хейтър защо реши, че съм го копнал?
     
  19. хейтър

    хейтър Active Member

    Рег.:
    Авг 23, 2014
    Съобщения:
    405
    Харесвания:
    130
    Точки:
    43
    Епа не виждам код за първи път :D
     
  20. AMitrev

    AMitrev Well-Known Member

    Рег.:
    Авг 6, 2012
    Съобщения:
    1,641
    Харесвания:
    289
    Точки:
    83
    Пол:
    Мъж
    Място:
    София
    И? Това че ти не може да мислиш не значи, че всички са такива.
     

Сподели страницата

  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies.
    Dismiss Notice