Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [mysql] podstawy
Forum PHP.pl > Forum > Przedszkole
cienk91
Witam.

Mam niedyży problem ale dość duzy jak dla mnie ponieważ dopiero zaczynam...

dokładnie chodzi mi o sprawdzenie w bazie mysql czy w polu ranga(int) jest 1 czy 0.
Nie wiem czy w dobry sposób kombinuje ale chciałem użyć to do logowania admina. Jak widać w kodzie jest i funkcja do sprawdzania czy user jest zalogowany ale chciałem jeszcze zrobić ze gdy w columnie ranga u danego uzytkownika jest cyfra 1 to ma prawa admina.


Kod
$zapytanie= mysql_query("SELECT * FROM users where ranga");

// funkcja na sprawdzanie czy user jest zalogowany, jeśli nie to wyświetlamy komunikat
function check_login() {
    if(!$_SESSION['logged']) {
        header("Refresh: 0; url=login.php");
    } elseif  ($zapytanie['ranga'] == 1)
      
    
      //(!$_POST['ranga'] = 1)
    {
        header("Refresh: 0; url=admin.php");
  
   }

}


Proszę o jak najszybsze poprawienie tego kodu lub podanie nowego, ponieważ sam juz nie wiem jak mogę to zrobić sad.gif
Z góry dziekuje za pomoc.
zidek
Jeśli coś w tym jest dla Ciebie niezrozumiałe to pytaj wink.gif

Kod
function check_login() {
    if (!$_SESSION['logged']) {
        header("Refresh: 0; url=login.php");
    }
    $zapytanie = "SELECT ranga FROM users";
    $wynik = mysql_query($zapytanie) or die ('Błąd zapytania');
    if (mysql_num_rows($wynik) <> 1) {
        header("Refresh: 0; url=login.php");
    }
    $wiersz = mysql_fetch_assoc($wynik);
    if ($wiersz['ranga'] == 1) {
        echo "Admin";
    } else {
        echo "User";
    }
}
cienk91
Dzieki za pomoc, ale jest coś nie tak...

gdy wpisuje nazwe uzytkownika z ranga 0 jest dobrze, ale gdy wpisuje admin czyli z ranga 1 to loguje sie jako normalny uzytkownik czyli nie tak jak chciałem sad.gif

a i jest problem ze zrobieniem czego kolwiek na stronie ponieważ odświeża się cały czas ( akurat wpadłem na to że w drugim przekierowaniu jak zmieniłem na np. 5 to dopiero po tych 5 sekundach mnie odswieża...)

co do kodu ktory poprawiłeś to go troche rozumiem wink.gif
zidek
Kod
$zapytanie = "SELECT ranga FROM users";

Zmodyfikowałeś zapytanie dodając warunek where z loginem/id użytkownika?

np.
Kod
$zapytanie = "SELECT ranga FROM users WHERE id = 214 LIMIT 1";
cienk91
nie robiłem do tego warunku.

mam takie pytanie, bo wydaje mi sie ze ten kod z WHERE to jest tylko dla jednego uzytkownika (admina) ale gdybym dodał jeszcze prawa admina innemy uzytkownikowi? to co wtedy?
zidek
Tak, to jest przykładowe zapytanie. Nie wiem gdzie przechowujesz id użytkownika, więc muszę zgadywać...
Jeśli id zalogowanego przechowujesz w $_SESSION['id'] to robisz coś takiego:
Kod
$zapytanie = "SELECT ranga FROM users WHERE id = {$_SESSION['id']} LIMIT 1";
cienk91
Po wpisaniu tego kodu z WHERE wyskakuje mi "błąd zapytania" sad.gif
zidek
przed zapytaniem sprawdź czy id na pewno istnieje
Kod
var_dump($_SESSION['id']);


Jak wygląda struktura tabeli w bazie danych?
cienk91
pojawiło sie coś takiego:

string(1) \"7\" Błąd zapytania

błąd zapytania to z pierwszego kodu.

nie wiem w jaki sposób pokazac strukture w SQL wiec masz zdjecie
zidek
"WHERE id = {$_SESSION['id']}"

a w bazie nie masz kolumny 'id', tylko 'user_id'. popraw więc zapytanie...
cienk91
od razu poprawiałem smile.gif
mozesz mi wyjasnic po co jest ten LIMIT po Where ?
zidek
LIMIT oznacza liczbę pobieranych rekordów. Jednocześnie sprawdzisz tylko jednego użytkownika, więc nie ma powodu, by pobierać zawartość całej tabeli

Błąd wyskakuje, ponieważ:
a ) nie ma w bazie tabeli 'users'
b ) nie nawiązałeś połączenia z bazą
c ) kolumna 'ranga' lub 'id' nie istnieją w bazie
cienk91
Niestety wszystko jest, połączenie też ponieważ teraz po wpisaniu obojetnie jakiego użytkownika wyskakuje "string(1) "7" " czyli numer id i coś jeszcze

czyli wszystkie punkty są spełnione
zidek
7 to id zapisane w $_SESSION['id'], nie ma związku z bazą danych i może być wyświetlana bez połączenia z DB
cienk91
połączenie jest ponieważ podczas rejestracji normalnie dane sa dodawane do BD ale to w innym pliku
zidek
Wrzuć cały kod wink.gif
cienk91
cały kod ?

Chodzi Ci o tę funkcję co teraz mam czy np. logowanie lub rejesteracja?
zidek
całą stronę, na której mają działać uprawnienia admina
cienk91
Admin miał tylko dodawać i usuwać wydarzenia z kalendarza.

kod jest zbyt długi rzeby go wrzucic tongue.gif


Dziek i za pomoc. jak coś to rano się odezwe wink.gif

podam Inny przykład. Edycja uzytkownika i możliwość poprawienia, dodania danych


Kod
<?php
include '../config.php';
db_connect();
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Wirtualny spacer</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
        
        
</head>
<body>
<div id="wrapper">
  <h1><a href="index.php"><img src="images/logo.gif" width="199" height="39" alt="" /></a></h1>
  <ul id="nav">
    <li class="c"><a href="index.php">Spacer</a></li>
    <li class="a"><a href="kalendarz.php">Kalendarz</a></li>
    <li class="d"><a href="info.php">Informacje</a></li>
  
    
    <li class="a"><a href="login.php">Logowanie</a></li>
    
  
    
    
    
  </ul>
  </div>
  
    <div id="body">
   <div id="container">
    <div id="okno">
    <br><br><br>
            

<?php

check_login();

$user_data = get_user_data();

// jeśli zostanie naciśnięty przycisk "Edytuj profil"
if(isset($_POST['email'])) {
    // filtrujemy dane
    $_POST['telefon'] = clear($_POST['telefon']);
    $_POST['website'] = clear($_POST['website']);
    $_POST['from'] = clear($_POST['from']);
    $_POST['new_password'] = clear($_POST['new_password']);
    $_POST['new_password2'] = clear($_POST['new_password2']);
    $_POST['password'] = clear($_POST['password']);
    $_POST['email'] = clear($_POST['email']);
    
    // zmienne tymczasowe na treść błędu
    $err = '';
    // i zapytanie sql
    $up2 = '';
    
    // jeśli zostanie podane nowe hasło lub inny email
    if(!empty($_POST['new_password']) || $_POST['email'] != $user_data['user_email']) {
        // sprawdzamy czy zostało podane aktualne hasło
        if(empty($_POST['password'])) {
            $err = '<p>Jeśli chcesz zmienić hasło lub adres email musisz podać aktualne hasło.</p>';
        // jeśli zostało podane to sprawdzamy czy jest poprawne
        } elseif(codepass($_POST['password']) != $user_data['user_password']) {
            $err = '<p>Podane aktualne hasło jest nieprawidłowe.</p>';
        } else {
            // jeśli wszystko jest ok...
            
            // sprawdzamy czy user chce zmienić hasło
            if(!empty($_POST['new_password'])) {
                // jeśli podane dwa hasła są różne to wyświetlamy błąd
                if($_POST['new_password'] != $_POST['new_password2']) {
                    $err = '<p>Podane hasła nie są takie same.</p>';
                // jeśli wszystko jest ok, dopisujemy do zmiennej tymczasowej zapytanie do zaktualizowania hasła
                } else {
                    $up2.= ", `user_password` = '".codepass($_POST['new_password'])."'";
                }
            }
            // sprawdzamy czy user chce zmienić email (czy ten podany jest różny od aktualnego)
            if($_POST['email'] != $user_data['user_email']) {
                // sprawdzamy czy podany email jest prawidłowy
                if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
                    $err = '<p>Podany email jest nieprawidłowy.</p>';
                } else {
                    // sprawdzamy czy istnieje taki email w bazie przy czym omijamy usera który jest zalogowany
                    $result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_id` != '{$user_data['user_id']}' AND `user_email` = '{$_POST['email']}'");
                    $row = mysql_fetch_row($result);
                    if($row[0] > 0) {
                        $err = '<p>Już istnieje użytkownik z takim loginem lub adresem e-mail.</p>';
                    } else {
                        // jeśli wszystko jest ok to dopisujemy zapytanie do zaktualizowania emaila
                        $up2.= ", `user_email` = '{$_POST['email']}'";
                    }
                }
            }
        }
    }
    
    // jeśli są jakieś błędy z powyższych działań to je wyświetlamy
    if(!empty($err)) {
        echo $err;
    } else {
        // jeśli nie ma błędów to wykonujemy zapytanie dopisując te na aktualizacje hasła oraz emaila - $up2
        $result = mysql_query("UPDATE `users` SET `user_website` = '{$_POST['website']}', `user_from` = '{$_POST['from']}'{$up2} WHERE `user_id` = '{$user_data['user_id']}'");
        if($result) {
            // jeśli zapytanie się wykonało to wyświetlamy komunikat...
            echo '<p>Twój profil został poprawnie zaktualizowany.</p>';
            // i pobieramy od nowa dane usera aby w poniższym formularze się one zaktualizowały
            $user_data = get_user_data();
        } else {
            // jeśli zapytanie będzie błędne to wyświetlamy treść errora
            echo '<p>Niestety wystąpił błąd:<br>'.mysql_error().'</p>';
        }
    }
}

// wyświetlamy prosty formularz
echo '<form method="post" action="editprofile.php">
    <p>
        Login:
        <input type="text" value="'.$user_data['user_name'].'" disabled="true">
    </p>
    
    <p>
        Numer tel.:
        <input type="int" value="'.$user_data['telefon'].'" name="telefon">
    </p>
    
    
    <p>
        Strona WWW:
        <input type="text" value="'.$user_data['user_website'].'" name="website">
    </p>
    <p>
        Skąd:
        <input type="text" value="'.$user_data['user_from'].'" name="from">
    </p>
    <p>
        Nowe hasło (pozostaw puste jeśli nie chcesz zmieniać):<br>
        <input type="password" value="" name="new_password" autocomplete="off">
    </p>
    <p>
        Powtórz nowe hasło:
        <input type="password" value="" name="new_password2" autocomplete="off">
    </p>
    <p>
        E-mail:
        <input type="text" value="'.$user_data['user_email'].'" name="email">
    </p>
    <p>
        Aktualne hasło (wymagane przy zmianie emaila lub hasła):<br>
        <input type="password" value="" name="password" autocomplete="off">
    </p>
    <p>
        <input type="submit" value="Edytuj profil">
    </p>
</form>';





db_close();
?>


   <ul id="nav">
    <li class="b"><a href="indeks.php" >Profil</a></li>
       <li class="a"><a href="cal_admin/index.php" >Termin</a></li>

     <li class="d"><a href="logout.php" >Wyloguj</a></li>
    
  </ul>

   </div>
  
     <!-- end .inner -->
  </div>
  <!-- end body -->
  <div id="footer" > rok
  </div>
  <!-- end footer -->
</div>
<!-- end wrapper -->
</body>
</html>


w pliku config.php

Mam coś takiego, wiec gdyby połączenia nie było to powinno być wyświetlony komunikat.

Kod
function db_connect() {
    // połączenie z mysql
    mysql_connect(DBHOST, DBUSER, DBPASS) or die('<h2>ERROR</h2> MySQL Server is not responding');

    // wybór bazy danych
    mysql_select_db(DBNAME) or die('<h2>ERROR</h2> Cannot connect to specified database');
}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.