Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z zapytaniem sql
Forum PHP.pl > Forum > Bazy danych > MySQL
huka
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.
Kinool
[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
huka
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.
Kinool
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
huka
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...
huka
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ć...
Kinool
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
PMadej
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
Kinool
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
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.