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

Przekazanie zmiennej do innego pliku w PHP

Object Storage Arubacloud
0 głosów
3,183 wizyt
pytanie zadane 6 maja 2015 w PHP przez Else Stary wyjadacz (12,260 p.)
edycja 6 maja 2015 przez Else

Witam wszystkich, mam problem z kodem który piszę do swojej nowej prostej gry przeglądarkowej. Jestem na etapie dodawania rankingu i stanołem w miejscu bo nie mam pojęcia jak najlepiej mógłbym rozwiązać swój problem. 

Chciałbym aby po kliknięciu na nick danego gracza przenosiło nas do jego profilu, ale nie wiem w jaki sposób przenieść wartość zmiennej login z tej linii:

<td><a href="game.php?a=inform"><form>'.$row['login'].'</a></td>

tak aby później na jej podstawie można było wyciągnąć resztę informacji z bazy danytch.

Myślałem o użyciu metody GET, ale sam link jest już swtorzony za pomocą tej metody i wychodziło coś takiego:

/game.php?a=inform?login=Konrad co nie działało

Jak wy rozwiązalibyście ten problem? Może odpowiedź jest oczywista dla was, ale ja dostałem całkowitego zaćmienia. Tutaj cały kod:

        
​<?php
        if (empty($_GET['s'])) $players = call("SELECT * FROM users ORDER BY lvl");
        elseif (!empty($_GET['o'])){
            if ($_GET['o'] == 1) $players = call("SELECT * FROM users ORDER BY ".vtxt($_GET['s']));
            if ($_GET['o'] == 2) $players = call("SELECT * FROM users ORDER BY ".vtxt($_GET['s'])." DESC");
        } else $players = call("SELECT * FROM users ORDER BY ".vtxt($_GET['s']));
         
        if (empty($_GET['o'])) $_GET['o'] = 0;
        if ($_GET['o'] == 2) $s = 1; else $s = 2;
         
        echo '
        <thead>
            <tr>
                <th>#</th>
                <th><a href="game.php?a=rank&s=login&o='.$s.'">Login</a></th>
                <th><a href="game.php?a=rank&s=lvl&o='.$s.'">Poziom</a></th>
                <th><a href="game.php?a=rank&s=xp&o='.$s.'">Doświadczenie</a></th>
                <th><a href="game.php?a=rank&s=str&o='.$s.'">SI</a></th>
                <th><a href="game.php?a=rank&s=dex&o='.$s.'">ZR</a></th>
                <th><a href="game.php?a=rank&s=sta&o='.$s.'">WY</a></th>
                <th><a href="game.php?a=rank&s=intell&o='.$s.'">IN</a></th>
            </tr>
        </thead>
        <tbody>
        ';
         
        $i = 1;
        while ($row = mysqli_fetch_array($players)){
            echo '
            <tr>
                <td>'.$i++.'</td>
                <td><a href="game.php?a=inform"><form>'.$row['login'].'</a></td>
                <td>'.$row['lvl'].'</td>
                <td>'.$row['xp'].'</td>
                <td>'.$row['str'].'</td>
                <td>'.$row['dex'].'</td>
                <td>'.$row['sta'].'</td>
                <td>'.$row['intell'].'</td>
            </tr>
            ';
        }
        ?>

 

1 odpowiedź

0 głosów
odpowiedź 6 maja 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)

Robi się to trochę inaczej niż chciałeś ale po kolei.

Tak na przyszłość to zmienne GET w aderesie łączy się znakiem & czyli byłoby np tak:

/game.php?a=inform&login=Konrad

I wtedy to by działało tyle, że jest to bardzo zła metoda. Dlaczego? No pomyśl sam, mogę wpisać tu dowolny login bo jest to dostępne w pasku adresu i podać się za kogo innego! ;) Tak się więc nie robi. To co chcesz uzyskać robi się przy pomocy plików cookies lub sesji.

Różnica jest taka, że plik cookie wraz z zapisanym w nim np. loginem przechowywany jest na komputerze użytkownika czyli teoretycznie też istnieje szansa jakiejś zmiany. Dlatego też jeszcze lepsze i nawet myślę wygodniejsze w użyciu są sesje. Dane sesji przechowywane są na serwerze a na komputerze użytkownika zapisany jest tylko ID sesji, dzięki któremu serwer wie kto obecnie o jaką sesję pyta. Oczywiście też istnieje ryzyko przejęcia takiej sesji no ale nie jest to już tak proste.

Jeszcze taka jedna uwaga: przechowywanie loginu gdziekolwiek jest raczej też niezbyt bezpieczne. Lepiej przechowywać ID użytkownika i na tej podstawie wyciągać z bazy resztę jego danych.

Więcej o sesjach jak i zabezpieczaniu kodu przed mysql injection (pewnie tego nie masz a ważna sprawa) dowiesz się w tym filmiku: https://www.youtube.com/watch?v=Pp578w7C9hE

komentarz 6 maja 2015 przez Else Stary wyjadacz (12,260 p.)

Dzięki wielkie. Wiedziałem, że gdzieś widziałem rozwiązanie, ale dopiero teraz sobie przypomniałem, że można zastosować sesje. 

mogę wpisać tu dowolny login bo jest to dostępne w pasku adresu i podać się za kogo innego

Tak swoją drogą login nie byłby mój lecz użytkownika na którego profil wchodzilibyśmy aby go pooglądać. Wpisanie parametru GET zmieniłoby (mam nadzieję) tylko to którego gracza profil aktualnie oglądamy, ale zapomniałem o tym wspomnieć więc to moja wina.

komentarz 6 maja 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie szkodzi, ja też może trochę nie doczytałem i już o czym innym pomyślałem patrząc na login. Jeśli mówimy tylko o "podglądaniu" profilu innego gracza to jak najbardziej wystarczy przekazywanie przez GET no bo przecież kto zapisywał by do sesji jakiego gracza chcemy obejrzeć... To byłoby bez sensu także podane przez Ciebie rozwiązanie przez GET jest jak najbardziej w porządku :)
komentarz 6 maja 2015 przez Else Stary wyjadacz (12,260 p.)
Dzięki, a tak dla potomnych wystarczyło wpisać takie coś:

<a href="game.php?a=inform&login='.$row['login'].'">'.$row['login'].'</a></td>

Dopiero teraz ogarnąłem, że Zamiast bawić się z jakimiś znacznikami form i inputami typu hidden wystarczyło zmodyfikować link ;) i dać & zamiast drugiego ?

Podobne pytania

0 głosów
1 odpowiedź 1,372 wizyt
pytanie zadane 17 lutego 2020 w PHP przez Młody programista Obywatel (1,200 p.)
0 głosów
1 odpowiedź 196 wizyt
pytanie zadane 17 sierpnia 2017 w PHP przez Konfeusz Bywalec (2,810 p.)
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 8 marca 2019 w PHP przez Pico Obywatel (1,330 p.)

92,628 zapytań

141,491 odpowiedzi

319,861 komentarzy

62,010 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!

...