Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z zapytaniem sql
huka
post 30.04.2004, 09:15:07
Post #1





Grupa: Zarejestrowani
Postów: 96
Pomógł: 0
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam,

mam takie pytanie jak podczas logowania do bazy danych wyciągać hasła i loginy z dwóch tabel. Chodzi mi o coś takiego że mam dwie tabele studenci i wykładowcy i w każdej z nich znajdują sie loginy i hasła. Jak należy napisać zapytanie żeby to dobrze funkcjonowało?
Skrypt logowania wygląda tak:
[php:1:9d98bc23a5]<?php

# Inicjujemy funkcje z ktorej bedziemy pózniej korzystac:)
session_start(); # inicjowanie sesji (musimy tutaj, bo inaczej wywala błędy:(
session_name(logowanie.php); # sesja otrzyma nazwę Twojej strony:)
function logowanie()
{
echo("<form method="POST">n
<h1> Zaloguj sie! </h1><br>n
User: <input type="text" name="login"><br>n
Pass: <input type="password" name="haslo"><br>n
<input type="submit" name="submit" value="Zaloguj"><br>n
<br>
</form>n");
}
# i po funkcji tongue.gif

# w tym pliku są zmienne potrzebne do łaczenia się z baza danych
include("config.cfg");

if(!isset($submit)) # jeżeli nie zaznaczono submit, odpal logowanie
{
logowanie();
}
else # w innym przypadku....
{
$db=mysql_connect("$sql_host") or die("Nie można się połączyć z serwerem"); # łaczenie się z bazą danych
mysql_select_db("$sql_base", $db) or die("Problem z łączeniem się z bazą danych sad.gif"); # jeżeli występują problemy to przerywa skrypt
$sql="SELECT * FROM Studenci WHERE Login = '$login'"; # zapytanie do mysql o wyswietlenie komórki USER_NAME w której figuruje zmienna $login
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$Haslo=$row["Haslo"]; # tutaj definiujemy komorki winksmiley.jpg
$Login=$row["Login"]; # $zmienna_używana_w_skrypcie=$komórka["nazwa_komórki_ze_sql"];
$ban=$row["ban"];
if (($haslo != $Haslo) || ($login != $Login)) # jeżeli hasło / login się nie zgadzają
{
echo("Zly login/pass"); # pokazuje "Zly login/pass" oraz logowanie (z wczesniej zadeklarowanej funkcji:)
logowanie();
} else { # w innym przypadku (tj. login i pass są prawdziwe)
session_register("login"); # rejestrowanie w sesji "loginu", "ban" (czy gostek ma bana czy nie tongue.gif"
include("index.php");
exit(); # koniec smile.gif
}
}
}


?>[/php:1:9d98bc23a5]

I jeszcze jedno jak ustawić prawa dostępu do podstron dla osób zalogowanych?

Jeżeli macie jakieś propozycje to podeślijcie.
Go to the top of the page
+Quote Post
Kinool
post 30.04.2004, 09:27:34
Post #2





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


[sql:1:d361d7b42b]SELECT tabela1.pole1, tabela1.pole2, tabela2.pole1, tabela2.pole2 FROM tabela1, tabela2 WHERE tabela1.pole1='$form' OR tabela2.pole1='$form'[/sql:1:d361d7b42b] $form to dane pochodzace z formularza np. login

o cos takiego ci chodzilo questionmark.gif

a co do pytanie 2
chodzi ci o to ze jak ktos nie jest zaogowany to wtedy nie moze przegladac tresci witryny?questionmark.gif

jak tak to przy logowaniu (jesli jest login i haslo sie zgadza) dodajesz zeminna sesyjna np. $_SESSION['user']=1; potem przy wysylaniu zawartosci sprawdzasz czy istnije zmienna sesyjna user i czy ma wartosc 1 jak nie to nie wysylasz. W twoim przypadku mozesz wykorzystac zmienna sesyjna login jesli isnieje lub jesli nie jest pusta lub rowna 0 wtedy ten ktos pomyslnie przeszedl proces weryfikacji winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
huka
post 30.04.2004, 09:53:12
Post #3





Grupa: Zarejestrowani
Postów: 96
Pomógł: 0
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


W pytaniu 2 chodzi mi o to że użytkownik już po zalogowaniu ma prawa przeglądać tylko odpowiednie odnośniki np. student może przeglądać trzy pierwsze odnośniki a do następnych nie ma prawa dostępu, natomiast wykładowca może również przeglądać te trzy pierwsze odnośniki ja i kolejne bo przykładowo jest moderatorem tej strony.
Go to the top of the page
+Quote Post
Kinool
post 30.04.2004, 10:12:24
Post #4





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


mozesz zrobic dodatkowe pole np status domyslnie dla studenta bedzie one wynosic 0 dla wykladowcy 1, przy kogowaniu pobierasz je i wrzucasz do sesji przy wyswietlaniu sprawdzasz status i odpowiednio wyswietlasz

zaleta tego jest to ze niekturym studentom bedzi mozna dac mozliwosc przegladania tresci ktora dla innych jest niedostepna smile.gif oczywisie tylko wtedy gdy w jego polu status pojawi sie 1 smile.gif podobie jest z wykladowcami ktorym mona dac 0 winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
huka
post 30.04.2004, 10:17:47
Post #5





Grupa: Zarejestrowani
Postów: 96
Pomógł: 0
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


czy mógłbyś podać jakiś przykład jak to zastosować bo przyznam ze nie bardzo wiem jak się pobiera i wrzuca do sesji i jak sprawdza sie ten status...
Go to the top of the page
+Quote Post
huka
post 30.04.2004, 11:19:45
Post #6





Grupa: Zarejestrowani
Postów: 96
Pomógł: 0
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


po wpisaniu zapytania tak jak mi radziłeś znowu pojawił sie bład bo tym raze pobiera loginy i hasła tylko z tej drugiej tabelki a z pierwszej nie. Nie mam pojęcia dlaczego tak się dzieje.
I jeszcze jedno podczas logowania po wpisaniu loginu i hasła z z tej pierwszej tabeli pojawiaja mi sie zapętlony formularz logowania (kilka pól do logowania) z komunikatem zły login/pass.
A tak wygląda mój skrypt logowania:
[php:1:110da302cf]<?php
session_start(); # inicjowanie sesji (musimy tutaj, bo inaczej wywala błędy:(
session_name(log.php); # sesja otrzyma nazwę Twojej strony:)
function logowanie()
{
echo("<form method="POST">n
<h1> Zaloguj sie! </h1><br>n
User: <input type="text" name="login"><br>n
Pass: <input type="password" name="haslo"><br>n
<input type="submit" name="submit" value="Zaloguj"><br>n
<br>
</form>n");
}
# i po funkcji tongue.gif

# w tym pliku są zmienne potrzebne do łaczenia się z baza danych
include("config.cfg");

if(!isset($submit)) # jeżeli nie zaznaczono submit, odpal logowanie
{
logowanie();
}
else # w innym przypadku....
{
$db=mysql_connect("$sql_host") or die("Nie można się połączyć z serwerem"); # łaczenie się z bazą danych
mysql_select_db("$sql_base", $db) or die("Problem z łączeniem się z bazą danych sad.gif"); # jeżeli występują problemy to przerywa skrypt
$sql="SELECT Studenci.Login, Studenci.Haslo, Prowadzacy.Login, Prowadzacy.Haslo FROM Studenci, Prowadzacy WHERE Studenci.Login = '$login' OR Prowadzacy.Login = '$login'"; # zapytanie do mysql o wyswietlenie komórki USER_NAME w której figuruje zmienna $login
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$Haslo=$row["Haslo"]; # tutaj definiujemy komorki winksmiley.jpg
$Login=$row["Login"]; # $zmienna_używana_w_skrypcie=$komórka["nazwa_komórki_ze_sql"];
$ban=$row["ban"];
if (($haslo != $Haslo) || ($login != $Login)) # jeżeli hasło / login się nie zgadzają
{
echo("Zly login/pass"); # pokazuje "Zly login/pass" oraz logowanie (z wczesniej zadeklarowanej funkcji:)
logowanie();
} else { # w innym przypadku (tj. login i pass są prawdziwe)
session_register("login"); # rejestrowanie w sesji "loginu", "ban" (czy gostek ma bana czy nie tongue.gif"
include("dodaj_przedmiot.php");
exit(); # koniec smile.gif
}
}
}

?>[/php:1:110da302cf]

Czekam na jakąś wskazówke jak to poprawić...
Go to the top of the page
+Quote Post
Kinool
post 30.04.2004, 11:27:17
Post #7





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


no jak z bazy pobrac to chyba wiesz smile.gif no ale na wszelki wypadek napisze smile.gif
[sql:1:3b66051faf]SELECT login, haslo, status FROM tabela WHERE login='$login'[/sql:1:3b66051faf](jesli chesz z dwuch tabel pobierac to tak jak przyklad wyzej)

potem po pozytywnym przejsciu logowania zapisujesz do sesji status
Kod
$_SESSION['status']=$to_co_pobierasz_z_bazy;

przy wyswietlaniu tresci:
[php:1:3b66051faf]<?php
// dla wszyskich
echo "wyswietla sie dla wszystkich";
if (isset($_SESSION['status']){

if ($_SESSION['status']==0) {
echo "to co ma byc dla zalogowanych userow";
} else {
echo "to co bedzie dla wykladowcow";
}
?>[/php:1:3b66051faf]

to jest skromny przyklad mozesz zrobic kilka statusow np,
0-zwykly_user 1-moderator 2-administrator itp i sprawdzac po statusie kim jest zalogowany uzytkownik


--------------------
Go to the top of the page
+Quote Post
PMadej
post 30.04.2004, 11:27:18
Post #8


Vice-Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 395
Pomógł: 0
Dołączył: 7.08.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


a ja proponuje taka konstrukcje tabeli z userami:

Kod
-------------------------------------------

| user_id |  login |  pass | user_type |

--------------------------------------------

|    1     |  ble    | xadsf|   1            |

--------------------------------------------


u pobierasz to i sprawdzasz do razu typ usera tak jak to wyzej napisali ... to duze uproszczenie i bazy i kodu ja obslugujacego


--------------------
Go to the top of the page
+Quote Post
Kinool
post 30.04.2004, 11:31:09
Post #9





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


no napewni jest lepiej miec jedna tabele userow niz 2

z 2 tabelami sporo komplikacji moze byc, np powtarzajace sie loginy moze sie zdazyc ze np beda dwa takie same loginy i dwa takie same hasla i co wtedy questionmark.gif biggrin.gif kto bedzie zalogowany?? loteria winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 11:04