Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

System poziomów na stronie


tehekozakemm

Pytanie

Opublikowano

Witam mam taki problem chciałem zrobić poziomy użytkownika na stronie lecz nie mogę jakoś sobie poradzić wrzucę tu podobny skrypt do tego co mam na swojej stronie w bazie sql użytkownik ma tabele xp gdzie ma zdobyty exp i chce wywołać to przez kod php 

 

<?php
require 'includes/config.php';
require 'includes/header.php';

// Upewnij się że użytkownik jest zalogowany
if (!$user->check()) {
    echo '<p class="error">Przykro nam, ale ta strona jest dostępna tylko dla zalogowanych użytkowników.</p>';
    require 'includes/footer.php';
    die;
}

$id = intval($_GET['id']);
$profile = $user->data($id);

// Upewnij się, że użytkownik istnieje
if (empty($profile)) {
    echo '<p class="error">Przykro nam, ale użytkownik o podanym identyfikatorze nie istnieje.</p>';
    require 'includes/footer.php';
    die;
}
// Jeżeli skrypt doszedł do tego miejsca, to wszystko jest w porządku i można pokazać profil
?>
<h1>Profil użytkownika <?php echo $profile['login'] ?></h1>
<dl>
    <dt>Login:</dt> <dd><?php echo $profile['login'] ?></dd>
    <dt>E-mail:</dt> <dd><?php echo $profile['email'] ?></dd>
	<dt>EXP:</dt> <dd><?php echo $profile['xp'] ?></dd>
</dl>

<?php

    function check_level($profile['xp']){
       if($profile['xp'] >= 0 & $profile['xp'] <= 300){
          echo 'Twój level to 1';
       }elseif($profile['xp'] >= 301 & $profile['xp'] <= 800){
          echo 'Twój level to 2';
       }elseif($profile['xp'] >= 801 & $profile['xp'] <= 1500){
          echo 'Twój level to 3';
       }elseif($profile['xp'] >= 1501 & $profile['xp'] <= 2500){
          echo 'Twój level to 4';
       }elseif($profile['xp'] >= 2501 & $profile['xp'] <= 4300){
          echo 'Twój level to 5';
       }elseif($profile['xp'] >= 4300 & $profile['xp'] <= 7200){
          echo 'Twój level to 6';
       }elseif($profile['xp'] >= 7201 & $profile['xp'] <= 11000){
          echo 'Twój level to 7';
       }
     
    }

?>

 

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano
9 godzin temu, tehekozakemm napisał:

a nie ma jakiegoś prostszego sposobu ja dopiero się uczę pisać PHP wiec trochę ciężko mi to zrozumieć 

no to powiedziałem Ci, żebyś usunął funkcję i zostawił same ify, przecież to wystarczy.


k4L2ZMS.png

Opublikowano

Funkcja akurat ma sens, ale to zależy jak zostanie wykorzystane przez osobę tworzącą stronę. Oczywiście są inne sposoby jak np. zapisywanie w sesji, przekazywanie lub aktualizowanie poziomu w bazie i późniejsze wyświetlanie.

 

Natomiast kod funkcji powinieneś całkowicie zmienić... Nie rób tego na tych ifach tylko napisz porządnie, aby np. samo obliczało poziom względem doświadczenia którego posiadasz... Chyba nie będziesz w nieskończoność dodawać ify z zakresem doświadczenia który wyswietla dany lvl?

 

Już nie wspomnę o tym, że czemu np. nie zwracasz funkcją poziomu i wyświetlasz w tekście np. 'Twój aktualny poziom: '.mojaFunkcja(Doswiadczenie).' gratulacje' tylko robisz:

 

echo 'Twój level to 1';

 

Szanujmy się...

Opublikowano

@tehekozakemm

Jeżeli chcesz robić to na tablicy, bez żadnej formułki oblizczania exp'a na dany poziom, to możesz zrobić coś w ten deseń:

//definiujesz tablicę z min. i max. expem na dany poziom
const levels = [
    1 => [
        'min' => 0,
        'max' => 300
    ],
    2 => [
        'min' => 301,
        'max' => 800
    ],
    3 => [
        'min' => 801,
        'max' => 1500
    ]
];

//funkcja do pobierania poziomu
function getLevelByExp($xp) {
	//lecisz pętlą po wszystkich wpisach w tablicy levels, gdzie $k to klucz - w toim przypadku poziom, a $v to tablica min i max
    foreach (levels as $k => $v) {
		//sprawdzasz czy zmienna, którą przekazujesz do funkcji (exp) jest w przedziale (range() zwraca w tablicy przedział od, do [np. range(1,5), zwróci tablicę [1, 2, 3, 4, 5]]
        if(in_array($xp, range($v['min'], $v['max']))){
            return $k;
        }
    }
    
	// jeżeli nie znajdzie poziomu to zwracasz false
    return false;
}

 

No i potem na froncie zwracasz wynik, np.

echo "Twój poziom to " . getLevelByExp($profile['xp']);

 

 

b_560_95_1.png

 

Opublikowano

@AlexsanderARG myślę, że jego skrypt to robi. Wszystko jest okej, tylko nie kumam po co robisz funkcję jest ona całkowicie bezsensu, bo nie musisz nic przekazywać, a jak już przekazujesz to samą funkcję potem musisz wywołać. 

 

Usuń funkcję, zostaw same if'y i będzie trybiło. A najlepiej jakbyś sobie komunikaty o LVL zbierał do zmiennej $lvl i wyświetlał potem gdzie chcesz.

 

 


k4L2ZMS.png

Opublikowano

Musisz połączyć się do tej bazy, poprzez PDO. Tutaj masz przykładowy kod

 

<?php

    $dane = [
        "host" => "localhost",
        "user" => "root",
        "pass" => "",
        "dbname" => "dbname",
    ];

    try {

        $db = new PDO("mysql:host={$dane['host']};dbname={$dane['dbname']};charset=utf8", $dane['user'], $dane['pass'], [
            PDO::ATTR_EMULATE_PREPARES => false,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ]);

    } catch (PDOException $error) {
        echo $error->getMessage();
    }

Później musisz pobrać dane z bazy, dla zalogowanego użytkownika. Nie wiem, jakie dane pobierasz przy logowaniu, ale możesz pobierać np. ID użytkownika, więc właśnie masz przykład dla ID

 

$query = $db->prepare("SELECT * FROM `nazwa_bazy` WHERE `id` = :id");
$query->bindValue(":id", $_SESSION['id']);
$query->execute();

 

I sprawdzasz, czy użytkownik z tym ID istnieje, a następnie pobierasz wszystkie rekordy.

 

if($query->rowCount() === 1){

    $get = $query->fetch();

} else {

    exit("Nie ma użytkownika o podanym ID");

}

 

No i na końcu sprawdzasz to, tak samo jak masz u siebie, tylko że, do zmiennej

$profile['xp']

przypisujesz pobraną wartość, czyli

 

$profile['xp'] = $get['xp'];

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...