• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ustawienie zmiennej po kliknięciu w hiperłącze

Object Storage Arubacloud
+1 głos
378 wizyt
pytanie zadane 3 sierpnia 2020 w PHP przez persikk Obywatel (1,140 p.)

Witam mam problem tego typu że chciałbym aby po kliknięciu w hiperłącze ustawiała mi się zmienna.

<a  href="x.php?  <?php $_SESSION['xx']=1 ?>" >[+]</a>
 // to jest źle bo ustawia przy ładowaniu strony

Jest mi to potrzebne do np takiej sytacji.

Chce żeby po kliknięciu w hiperłącze możliwe było wejście na inną stronę, a żeby nie dało się wejść tam wpisując na sztywno adres.

1 odpowiedź

+1 głos
odpowiedź 3 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

PHP nie ma bezpośredniej kontroli nad tym, co dzieje się na stronie (w tym przypadku - kliknięcie w link). Jeśli chcesz na kliknięcie przekierować użytkownika na konkretną stronę, ale aby nie mógł on na tę stronę przejść wpisując adres "z palca", to możesz np. wysłać Ajax, który w odpowiedzi zwróci nagłówek header z nowym adresem URL: https://www.php.net/manual/en/function.header.php. Dodatkowo w PHP zrób walidację, np. sesyjną, która zweryfikuje, czy źródłem request'a jest strona, od której chcesz zrobić przekierowanie - jeśli nie, to przekieruj na stronę reprezentującą kod błędu HTTP 403.

komentarz 3 sierpnia 2020 przez persikk Obywatel (1,140 p.)
Kurczę nie miałem jeszcze styczności z Ajaxem i nie wiem jak się za bardzo za to ugryźć bo ogólnie jestem początkującym ale widzę że chyba muszę się zagłębić żeby zrobić krok w przód. Dzięki za nakierowanie
komentarz 3 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

W sumie możesz w PHP umieścić dowolny link w <a href=""> i w odpowiedzi przekierować użytkownika na docelowy adres - nie zapominając o walidacji tego requesta po stronie serwera.

komentarz 3 sierpnia 2020 przez persikk Obywatel (1,140 p.)
W sumie też nie głupie ale w mojej sytuacji się to za bardzo nie sprawdzi, no nic z chęcią się o tym Ajaxie pouczę zawsze to czegoś nowego się nauczę
komentarz 3 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

w mojej sytuacji się to za bardzo nie sprawdzi

Dlaczego? Nie musi być Ajax, wysłanie formularza też powinno załatwić sprawę - w końcu to też request i też (jak kliknięcie w link) może być typu GET.

komentarz 3 sierpnia 2020 przez persikk Obywatel (1,140 p.)
Nie no ma to prawo działać bo pierwotnie założenie było takie żebym mógł dodać punkt statystyk tylko z miejsca do tego przeznaczonego po kliknięciu w dany przycisk.

Żeby załóżmy jakiś grać nie spamował sobie z palca i nie dodawało mu statystyk.

Ale chwilowo pisałem na zasadzie żeby działało i nie wrzuciłem sprawdzenia czy jest możliwość dodania np czy posiada daną ilość złota.

Problem się rozwiązuje w momencie dopisana sprawdzenia czy danego gracza stać na dodanie punktu wtedy może wklepywać sobie nawet z palca, a jak przyjdzie co do czego to i tak sprawdzi go czy może dodać.
komentarz 3 sierpnia 2020 przez VBService Ekspert (253,340 p.)
edycja 3 sierpnia 2020 przez VBService

Moim zdaniem możesz wstawić link na sztywno, np.:

<a href="x.php?xx=<?php echo $_SESSION['xx']; ?>">[+]</a>

i w pliku x.php sprawdzić, np.: czy gościu jest zalogowany, jak tak, wykonać akcję przypisaną, jeżeli nie to, wyświetlić komunikat (przekierować na stronę z komunikatem), że nie dozwolona akcja itp.

Ajax (w tym przykładzie: jQuery)

<body>

<a href="#" id="bt_xx">[+]</a>
<div id="message"></div>
<script>
    $("#bt_xx").click(function() {
        let request = $.ajax({
                url: "x.php",
  	         method: "GET",
               data: { xx : <?php echo $_SESSION['xx']; ?> },
        });
 
        request.done(function(msg) {
            $("#message").html(msg);
        });
 
        request.fail(function(jqXHR, textStatus, codeStatus) {
            $("#message").html("Request failed: " + textStatus + " : " + codeStatus);
        });
    });
</script>
</body>

x.php

if ($_SESSION['logged'] == true) {
   $xx = $_GET['xx'];
   if ($_SESSION['gold amount'] > $price) {
      $_SESSION['points'] += $xx;
      $_SESSION['gold amount'] -= $price;
  
      echo 'Punkty zostały dodane';
   } else {
      echo 'Niewystarczająca ilość złota do dodania punktów';
   }
} else {
   ...
   echo 'Tylko zalogowany użytkownik, może ...';
   ...
}

 

Podobne pytania

0 głosów
1 odpowiedź 468 wizyt
0 głosów
1 odpowiedź 130 wizyt
pytanie zadane 11 grudnia 2017 w PHP przez marcolo Obywatel (1,530 p.)
+2 głosów
3 odpowiedzi 928 wizyt
pytanie zadane 8 maja 2015 w PHP przez kamilwdg18 Obywatel (1,080 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...