Kliknite tukaj, da si ogledate profil, kot ga vidijo drugi

PHP - 3. del

  V tej lekciji bomo poleg php-ja programirali še z brezplačno in izjemno priljubljeno podatkovno bazo MySql.
 
 
1
 
 
Verjetno veste kaj je baza. To je neka skupina tabel, ki vsebujejo določene podatke. Ko smo nameščali xampp(strežnik) smo namestili tudi mysql. Ta vsebuje baze.

Odprimo stran localhost/phpmyadmin ter se prijavimo. Pristali smo v administratorski plošči vseh baz. Na levi strani vidimo 5 baz, ki so se ustvarile ob namestitvi. Mi bomo ustvarili novo bazo. V polje Ustvari novo bazo vpišite mojaPrvaBaza ter kliknite Ustvari.
 
 
2
 
 
Odpre se nova stran. Sedaj moramo v tej bazi ustvariti neko tabelo. V polje Ime vpišimo naprimer mojaPrvaTabela. V naslednjem polju pa vpišimo število kolon, ki jih želimo imeti. Vpišimo naprimer 3 ter kliknimo Izvedi.
 
 
3
 
 
V to tabelo bomo vpisovali uporabnike, ki se bodo prijavljali na našo stran. Odpre se stran v katero moramo vpisati podatke o poljih. Izpolnite tako kot jaz.

Prva kolona ima ime id in vsebuje zaporedno številko. Nastavimo jo kot primarni indeks (PRIMARY_KEY) in nastavimo auto_increment (številka se bo samodejno povečala ob novem vnosu). Naslednji stolpec vsebuje uporabniško ime, ki je tipa VARCHAR (besedilo) in ima omejitev 20 znakov. Zadnji stolpec vsebuje šifrirano geslo (več o tem kasneje). Omejitev znakov nastavimo na 45.

Vsi stolpci imajo tudi vrednost not_null, kar pomeni, da so obvezni in ne smejo biti prazni.
 
 
4
 
 
Kliknite Shrani. Tabela je ustvarjena in prikazana je struktura tabele. Sedaj je na vrsti php, ki vsebuje kar nekaj ukazov za delo z mysql bazami. Najprej je na vrsti ukaz mysql_connect s katerim se povežemo na bazo.

<?php
mysql_connect('localhost', 'root', 'geslo') OR die('Ne morem se povezati na server!');
?>

S tem smo se povezali na našo bazo. Pri tretjem argumentu moramo seveda ustrezno vpisati naše geslo, ki smo ga izbrali pri postavitvi serverja, včasih pa je potrebno spremeniti tudi prvi argument, ki pove, naslove mysql strežnika, na katerega se povezujemo. Sedaj preizkusite to datoteko. Če se vam ne izpiše nič, je uspelo. Če vam izpiše napako, preverite nastavitve (localhost, root in geslo).
 
 
 
 
 
5
 
 
Z naslednjim ukazom bomo izbrali bazo.

<?php
mysql_connect('localhost', 'root', 'geslo') OR die('Ne morem se povezati na server!');
mysql_select_db('mojaPrvaBaza') OR die('Ne morem izbrati baze!');
?>

Izbrali smo bazo, ki smo jo prej ustvarili.
 
 
6
 
 
Sedaj je na vrsti ukaz mysql_query s katerim izvedemo query - poizvedbo.

<?php
mysql_connect('localhost', 'root', 'geslo') OR die('Ne morem se povezati na server!');

mysql_select_db('mojaPrvaBaza') OR die('Ne morem izbrati baze!');

mysql_query("INSERT INTO mojaPrvaTabela(username, password) VALUES ('kljuka', MD5('geslo'));") OR die('Ne morem vstaviti vrstice!');
?>


Z tem query-jem v tabelo vstavimo vrstico. V polje id ne bomo vpisali nič, ker se bo samodejno (auto_increment), v polje username vnesemo kljuka v polje geslo pa bomo vnesli besedo geslo. Kot sem prej omenil, bomo v bazi hranili kriptirano geslo. Če bi torej kdo prišel do baze, zaradi kriptacije ne bi videl pravega gesla. Funkcija md5 zakriptira geslo, tako da ga ni mogoče veš dešifrirati. V bazo se bo torej vnesel niz: ae404a1ecbcdc8e96ae4457790025f50  to je s funkcijo md5 zakodirana beseda geslo. Vedno ko v tabelo vpisujete gesla uporabite md5 ali sha1 funkcijo (lahko tudi katero drugo kriptacijo). To je enosmerno kodiranje, kar pomeni, da mi niz znakov zakodiramo, ne moremo pa ga odkodirati. Če sedaj gremo nazaj  v phpmyadmin in gremo do naše tabele, vidimo vrstico, ki smo jo vnesli.

 
 
7
 
 
Ustvarimo html stran, v kateri sta dva polja in potrdilni gumb. V prvo polje bomo vpisali uporabniško ime, v drugo pa geslo. Spodaj naredimo gumb, kjer se bomo prijavili.

Kako ustvariti obrazec za prijavo v NVU ?

Odprite NVU.
Kliknite zgoraj na na gumb obrazec.
Ime obrazca: prijava
URI dejanja: prijava.php
Metoda: POST - OK
Napišemo Uporabniško ime:
Obrazec/Polje obrazca
Ime polja: username - OK
Postavimo se eno vrstico nižje in vpišemo Geslo:
Obrazec/Polje obrazca
Vrsta polja: Geslo
Ime polja: password - OK
Nova vrstica
Obrazec/Polje obrazca
Vrsta polja: Potrditveni gumb
Ime polja: Prijava
Vrednost polja: Prijava - OK
 
 
8
 
 
Sedaj ustvarimo datoteko prijava.php

<?php
mysql_connect('localhost', 'root', 'geslo') OR die('Ne morem se povezati na server!');

mysql_select_db('mojaPrvaBaza') OR die('Ne morem izbrati baze!');

$username = mysql_real_escape_string($_POST['username']);
$geslo = mysql_real_escape_string($_POST['password']);

$sql = mysql_query("SELECT * FROM mojaPrvaTabela WHERE username = '$username' AND password = MD5('$geslo');");

if (mysql_num_rows($sql) > 0) {
    echo 'Uspešna prijava';
}else {
    echo 'Napačna prijava!';
}
?>

Začetek kode vam je jasen (prijava na strežnik in izbira baze). V naslednjih dveh vrsticah pa uporabniško ime in geslo, ki smo ga preko POST dobili iz obrazca, vnesemo v spremenljivki $username in $geslo. S funkcijo mysql_real_escape_string odstranimo posebne znake, ki bi jih nepridipravi lahko uporabili in uporabili zlonamerno kodo.

Na vrsti je poizvedba. Ta izbere iz tabele vse vrstice, ki imajo uporabniško ime enako kot tisto vpisano in geslo enako vpisanemu.

Stavek if s funkcijo mysql_num_rows (le-ta nam vrne število vrstic, ki jih je poizvedba našla) preveri, ali je rezultat vrnil več kot 0 vrstic (to pomeni, da se vpisana uporabniško ime in geslo ujemata z neko vrstico v bazi).
 
 
9
 
 
Sedaj lahko naredimo še registracijo. Naredimo novo html datoteko in enak obrazec kot prej. Spremenimo URI dejanja, dodamo pa še eno polje za potrditev gesla. Vse skupaj shranimo kot registracija.html 
 
 
10
 
 
V datoteko registracija.php pa vpišemo

<?php
mysql_connect('localhost', 'root', 'geslo') OR die('Ne morem se povezati na server!');

mysql_select_db('mojaPrvaBaza') OR die('Ne morem izbrati baze!');

$username = $_POST['username'];
$geslo = $_POST['password'];
$geslo2 = $_POST['password2'];

if ($geslo != $geslo2) {
    die ('Vpisana gesla nista enaka');
}

$sql = mysql_query("INSERT INTO mojaPrvaTabela(username, password) VALUES ('$username', MD5('$geslo'));")  OR die('Registracija ni bila uspešna!');

echo 'Registracija je bila uspešna!';
?>

Povezava na bazo.
V spremenljivke zapišemo podatke.
Nato preverimo, če sta vpisana gesla enaka.
Sledi poizvedba, s katero vpišemo podatke v tabelo.

 
 
11
 
 
Nadgradimo našo registracijo še s preverjanjem uporabniškega imena. Takoj za preverjanjem gesla dodamo še:

if (mysql_num_rows(mysql_query("SELECT * FROM mojaPrvaTabela WHERE username='$username';")) > 0) {
    die ('Uporabniško ime že obstaja!');
}

Tudi ta if stavek uporabi funkcijo mysql_num_rows in poizvedbo, ki pogleda, ali uporabinško ime že obstaja v bazi.

 
 
12
 
 
Sedaj lahko dodamo še nekaj novega. Dodajmo uporabnikovo vrsto (administrator, navadni uporabnik). Gremo na phpmyadmin in se postavimo v strukturo naše tabele. Kliknemo na Izvedi, da dodamo nov stolpec na konec tabele.
 
 
13
 
 
Izpolnimo tako kot jaz ter kliknemo Shrani.
V ta stolpec bomo vpisali le število 0 ali število 1.
0 bo pomenilo navaden uporabnik, 1 pa administrator - uporabnik z nekimi posebnimi pravicami.

V stolpec Privzeto vpišite število 0. Sam sem to na sliki žal pozabil ... :(

Vrednost, ki jo vpišete v Privzeto, bo samodejno uporabljena pri vstavljanju nove vrstice (privzeto je torej število 0 - navaden uporabnik).
 
 
14
 
 
Sedaj spremenimo datoteko prijava.php. Vrstico, kjer se izpiše, da je bila prijava uspešna, spremenimo v:

    echo 'Uspešno ste se prijavili kot ';
    switch (mysql_result(mysql_query("SELECT vrsta FROM mojaPrvaTabela WHERE username = '$username';"), 0))
    {
        case 0:
            echo "navaden uporabnik.";
            break;
        case 1:
            echo "administrator.";
            break;
        default:
    }

Najprej izpišemo, da je bila prijava uspešna. Nato s poizvedbo pogledamo, katere vrste je uporabnik, in na koncu to izpišemo.
 
 
15
 
 
Ste že naveličani? Ne. Sedaj bomo vse skupaj zelo izboljšali.
Naredimo osnovno stran ter jo shranimo s končnico PHP (!). Pri prijavi ter registraciji naredimo povezavo na prijava.php ter registracija.php.

Stran si oblikujte po svoje.
 
 
16
 
 
V prijava.php na začetku dodamo

session_start();

Pri prijavi pa

$_SESSION['prijavljen'] = true;

Ko se uspešno prijavimo, se v sejo to zapiše.
 
 
17
 
 
Na začetku dodamo še

if (isset($_GET['odjava'])) {
    unset($_SESSION['prijavljen']);
    die ("Uspešno ste se odjavili!");
}
if ($_SESSION['prijavljen'] == true) {
    die ("Ste že prijavljeni!");
}


Datoteko prijava.php bomo hkrati uporabili tudi za odjavo. Če se bo uporabnik želel odjaviti, bo odprl (ali kliknil) stran prijava.php?odjava
PHP preveri, ali se želimo odjaviti, in zbriše podatek v seji.
Drugi if stavek preveri, ali smo prijavljeni, in to izpiše.
 
 
18
 
 
Sedaj pride na vrsto težji del, zato si poglejte trenutne rezultate, da ne pride do zapletov.
  • prijava.html vsebuje obrazec za prijavo
  • prijava.php vsebuje kodo za prijavo
  • registracija.html vsebuuje obrazec za registracijo
  • registracija.php vsebuje kodo za prijavo
  • index.php pa vsebuje prvo stran
 
 
19
 
 
Za prijavo in vse skupaj potrebujemo 5 datotek ?! Absolutno preveč. Združili jih bomo. prijava.html z prijava.php in registracija.html z registracijo.php.

Kako?

Odpremo prijava.php
Za začetkom dodamo zaključno oznako ?>
Nato prilepimo HTML kodo iz prijava.html
Zapišemo začetno oznako za PHP <?php
Spodaj pa zapišemo if (isset($_POST['Prijava'])) {
Čisto na koncu pa še }

S tistim if stavkom preverimo ali smo potrdili obrazec oz. poslali podatke samemu sebi.
 
 
20
 
 
Enako storimo še z registracija.php. Tukaj dodamo obrazec čisto na začetek.


 
 
21
 
 
prijava.html ter registracija.html lahko sedaj zbrišete. Izbrišite vse uporabnike iz tabele. in preizkusite ali deluje registracija ter prijava.
Nato gremo urejat index.php oz. osnovno stran. Odpremo jo v NVU.

Prvo stran uredite po svoje. V njo vključite spodnjo kodo, ki bo uporabniko povedala, ali je prijavljen, ali ne:

<?php
session_start();
if ($_SESSION['prijavljen']==true) {
echo "TRENUTNO STE PRIJAVLJENI!";
}else {
echo "TRENUTNO NISTE PRIJAVLJENI!";
}
?>


Dodati pa morate tudi povezavo do prijave oz. odjave:

<?php
if ($_SESSION['prijavljen']==true) {

echo '<a href="prijava.php?odjava">ODJAVA</a>';
}else {
echo '<a href="prijava.php">PRIJAVA </a>';
}
?>

 
 
22
 
 
To je to :)
 
 
Komentiraj
 
 
 
 
 
6.4.2009, 20:32
Lp

Na tretji slikci se ne vidi use čisto razločno, lahko daš večjo sliko ali pa usaj povej kaj piše not

Hvala


spremenil: .lolo (6.4.2009 ob 20.34.03)
 
 
 
 
6.4.2009, 21:19
Sedaj imam neko novo verzijo phpmyadmina tako, da bom kar napisal

id...........|...username.......|.......password
INT..........|...VARCHAR........|.......VARCHAR
3............|....20............|.........45
.............|..................|...........
not null.....|.....not null.....|......not null
.............|..................|...........
auto_increment|.................|.............
O............|........-.........|........-....
-............|........-.........|........-....
-............|........-.........|........-....
-............|........O.........|........O....


...
 
 
 
 
6.4.2009, 21:57
Aha, tnx.

Zj pa pri 7. delu pridem do Metoda: POST - OK, kam pa pol napišem uporabniško ime ?

Edit: Aha že vem


spremenil: .lolo (6.4.2009 ob 22.27.57)
 
 
 
 
12.5.2009, 21:00
Zanimiva lekcija, bravo kljuka!

Še neki vprašam/prosim: ali mi lahko pokažete končno kodo za registracija.php in prijava.php.
Hvala, daddy.


spremenil: kljuka (12.5.2009 ob 21.25.16)
 
 
 
 
3.6.2009, 20:46
Lahko po ZS.
 
 
 
 
13.6.2009, 18:01
Čakam ZS - rabm torej kodo za prijava.php, registracija.php in index.php.

HVALA
 
 
 
 
13.6.2009, 18:03
A ne moreš iti lepo po korakih in vpisovati kode. Tako se ne boš nič naučil, če boš le copy&paste.
 
 
 
 
13.6.2009, 18:13
Sej sem, pa mam nakonc vedno neke warninge. Rad bi primerjal kode.

Prosim ...


spremenil: daddy (13.6.2009 ob 18.13.45)
 
 
 
 
13.6.2009, 18:14
Ja, najlažje je reči, ne znam, ne vem, ne morem ... kr neki warningi.

Kakšni warningi. Napiši jih pa bomo skupaj pogledali in rešili.
 
 
 
 
13.6.2009, 18:45
Najlaži je težit.

Dobr - očitno nimam izbire.

Torej; 21. korak preverjanje:

kliknem registracija.php - vedno izpiše Registracija ni uspela.

kliknem prijava.php:
Parse error: syntax error, unexpected '{' in /home/a2401829/public_html/prijava.php on line 7


Mislim, da bi bilo lažje, da sam preverim kodo.
 
 
 
 
13.6.2009, 18:48
Mislim, da nimaš pravilno nastavljene tabele. V registracija.php namesto

$sql = mysql_query("INSERT INTO mojaPrvaTabela(username, password) VALUES ('$username', MD5('$geslo'));") OR die('Registracija ni bila uspešna!');


napiši

$sql = mysql_query("INSERT INTO mojaPrvaTabela(username, password) VALUES ('$username', MD5('$geslo'));") OR die('Registracija ni bila uspešna!' . mysql_error());


V prijava.php pa prilepi prvih 10 vrstic oz. podrobno si oglej vrstico 7. Verjetno ti v prejšnji vrstici manjka ;



 
 
 
 
13.6.2009, 18:59
Registracija.php:
Še vedno nič. Koda:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm....
<html xmlns="http://www.w3.org/1999/xhtml"&g....
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form id="registracija" name="registracija" method="post" action="registracija.php">
<p>Uporabniško ime:
<input type="text" name="username" id="username" />
</p>
<p>Geslo:
<input type="password" name="password" id="password" />
</p>
<p>Ponovi geslo:
<input type="password" name="password2" id="password2" />
</p>
<p>
<input type="submit" name="registracija" id="registracija" value="Registracija" />
</p>
</form>
</body>
</html>

<?php
mysql_connect('mysql8.000webhost.com', 'a2401829_testnik', 'geslo') OR die('Ne morem se povezati na server!');
mysql_select_db('a2401829_baza') OR die('Ne morem izbrati baze!');

$username = $_POST['username'];
$geslo = $_POST['password'];
$geslo2 = $_POST['password2'];

if ($geslo != $geslo2) {
die ('Vpisana gesla nista enaka');
}
if (mysql_num_rows(mysql_query("SELECT * FROM mojaPrvaTabela WHERE username='$username';")) > 0) {
die ('Uporabniško ime že obstaja!');
}

$sql = mysql_query("INSERT INTO mojaPrvaTabela(username, password) VALUES ('$username', MD5('$geslo'));") OR die('Registracija ni bila uspešna!' . mysql_error());
?>


Prijava.php
Imam dvopičje. Koda:
<?php
session_start();

mysql_connect('mysql8.000webhost.com', 'a2401829_testnik', 'geslo') OR die('Ne morem se povezati na server!');
mysql_select_db('a2401829_baza') OR die('Ne morem izbrati baze!');


(isset($_GET['odjava'])) {
unset($_SESSION['prijavljen']);
die "Uspešno ste se odjavili!";
}
if ($_SESSION['prijavljen'] == true) {
die "Ste že prijavljeni!";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm....
<html xmlns="http://www.w3.org/1999/xhtml"&g....
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form id="prijava" name="prijava" method="post" action="prijava.php">
<p>Uporabniško ime:
<input type="text" name="username" id="username" />
</p>
<p>Geslo:
<input type="password" name="password" id="password" />
</p>
<p>
<input type="submit" name="prijava" id="prijava" value="Prijava" />
</p>
</form>
</body>
</html>

<?php
$username = mysql_real_escape_string($_POST['username']);
$geslo = mysql_real_escape_string($_POST['password']);

$sql = mysql_query("SELECT * FROM mojaPrvaTabela WHERE username = '$username' AND password = MD5('$geslo');");


echo 'Uspešno ste se prijavili kot ';
switch (mysql_result(mysql_query("SELECT vrsta FROM mojaPrvaTabela WHERE username = '$username';"), 0))
{
case 0:
echo "navaden uporabnik.";
break;
case 1:
echo "administrator.";
break;
default:
}
$_SESSION['prijavljen'] = true;
}else {
echo 'Napačna prijava!';
}

if (isset($_POST['Prijava'])) {
}
?>


Tako, mislim, da bo sedaj najhitreje rešen problem. Povejte
 
 
 
 
13.6.2009, 19:00
(isset($_GET['odjava'])) {
unset($_SESSION['prijavljen']);
die "Uspešno ste se odjavili!";
}


Le kaj to pomeni? Pravilno:

if(isset($_GET['odjava'])) {
unset($_SESSION['prijavljen']);
die ("Uspešno ste se odjavili!");
}


Pri registraciji pa sedaj povej, kaj ti napiše.


spremenil: kljuka (13.6.2009 ob 19.01.48)
 
 
 
 
13.6.2009, 19:07
Prijava.php

Nov problem:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/a2401829/public_html/prijava.php on line 14


Registracija.php


Ko vstopim na stran je situacija taka:
http://www.shrani.si/f/3T/nS/3nxOiBuU/01....

Ko vpišem up. ime in pass. pa taka:
http://www.shrani.si/f/43/12Q/4mJgqIsn/0....


spremenil: daddy (13.6.2009 ob 19.07.55)
 
 
 
 
13.6.2009, 19:09
V tabeli nimaš pri ID nastavljen Auto Increment (A_I).

Drugače pa povsod, kjer je funkcija die popravi iz npr.

die "Napaka!";


v

die ("Napaka!");


Je prišlo do majhne napakice (v besedilu, na sliki je pravilno).
 
 
 
 
13.6.2009, 20:21
Registracija.php
Vse deluje - hvala.

Prijava.php
Napaka:
Parse error: syntax error, unexpected '}' in /home/a2401829/public_html/prijava.php on line 59


Koda:
<?php
session_start();

mysql_connect('mysql8.000webhost.com', 'a2401829_testnik', 'geslo') OR die('Ne morem se povezati na server!');
mysql_select_db('a2401829_baza') OR die('Ne morem izbrati baze!');


if(isset($_GET['odjava'])) {
unset($_SESSION['prijavljen']);
die ('Uspešno ste se odjavili!');
}

if ($_SESSION['prijavljen'] == true) {
die ('Ste že prijavljeni!');
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm....
<html xmlns="http://www.w3.org/1999/xhtml"&g....
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form id="prijava" name="prijava" method="post" action="prijava.php">
<p>Uporabniško ime:
<input type="text" name="username" id="username" />
</p>
<p>Geslo:
<input type="password" name="password" id="password" />
</p>
<p>
<input type="submit" name="prijava" id="prijava" value="Prijava" />
</p>
</form>
</body>
</html>

<?php
$username = mysql_real_escape_string($_POST['username']);
$geslo = mysql_real_escape_string($_POST['password']);

$sql = mysql_query("SELECT * FROM mojaPrvaTabela WHERE username = '$username' AND password = MD5('$geslo');");


echo 'Uspešno ste se prijavili kot ';
switch (mysql_result(mysql_query("SELECT vrsta FROM mojaPrvaTabela WHERE username = '$username';"), 0))
{
case 0:
echo "navaden uporabnik.";
break;
case 1:
echo "administrator.";
break;
default:
}
$_SESSION['prijavljen'] = true;
}else{

echo 'Napačna prijava!';
}

if (isset($_POST['Prijava'])) {
}
?>


Kot sem rekel, teh napak je (bilo) veliko, zato vas še enkrat naprošam k potrpežljivosti in se vam/ti (kljuka ), zahvaljujem za pomoč.

Daddy.
 
 
 
 
13.6.2009, 20:25
Ti

Lahko bi napisal, ampak, potrudimo se poiskati napake:

$_SESSION['prijavljen'] = true;
}else{

echo 'Napačna prijava!';
}


if ($_SESSION['prijavljen']==true) {
echo '<a href="prijava.php?odjava">ODJAVA</a>';
}else {
echo '<a href="prijava.php">PRIJAVA </a>';
}


Slabo ste prepisovali
 
 
 
 
13.6.2009, 20:38
OK, danke za pomoč.

Ampak, čaka te nov problem (sorry, za tok problemov).

Ko greš na moj index.php, tam klikneš registracija in avtomatično, ko prideš na registracija.php te registrira - up. ime in pass. ne določi. Torej postaneš uporabnik z nicknameom, ki se glasi: in passwordom, ki se glasi: .

Potem klikneš na prijava.php in te avtomatično prijavi, z nickom, katerega ti sistem avtomatično naredi, ko klikneš registracija.php, torej - nickname: in password: .

Can you help me again?
 
 
 
 
13.6.2009, 20:41
No dobro. Mi lahko poveš, ali si sam pisal kodo?

<?php
$username = mysql_real_escape_string($_POST['username']);
$geslo = mysql_real_escape_string($_POST['password']);

$sql = mysql_query("SELECT * FROM mojaPrvaTabela WHERE username = '$username' AND password = MD5('$geslo');");


echo 'Uspešno ste se prijavili kot ';
switch (mysql_result(mysql_query("SELECT vrsta FROM mojaPrvaTabela WHERE username = '$username';"), 0))
{
case 0:
echo "navaden uporabnik.";
break;
case 1:
echo "administrator.";
break;
default:
}
$_SESSION['prijavljen'] = true;
}else{

echo 'Napačna prijava!';
}

if (isset($_POST['Prijava'])) {
}
?>


pravilno:

<?php
if (isset($_POST['Prijava'])) {
$username = mysql_real_escape_string($_POST['username']);
$geslo = mysql_real_escape_string($_POST['password']);

$sql = mysql_query("SELECT * FROM mojaPrvaTabela WHERE username = '$username' AND password = MD5('$geslo');");


echo 'Uspešno ste se prijavili kot ';
switch (mysql_result(mysql_query("SELECT vrsta FROM mojaPrvaTabela WHERE username = '$username';"), 0))
{
case 0:
echo "navaden uporabnik.";
break;
case 1:
echo "administrator.";
break;
default:
}
$_SESSION['prijavljen'] = true;
}else{

echo 'Napačna prijava!';
}
}
?>


Pri registraciji enako.

<?php
mysql_connect('mysql8.000webhost.com', 'a2401829_testnik', 'geslo') OR die('Ne morem se povezati na server!');
mysql_select_db('a2401829_baza') OR die('Ne morem izbrati baze!');

if (isset($_POST['username']) && isset($_POST['password']))
{
$username = $_POST['username'];
$geslo = $_POST['password'];
$geslo2 = $_POST['password2'];

if ($geslo != $geslo2) {
die ('Vpisana gesla nista enaka');
}
if (mysql_num_rows(mysql_query("SELECT * FROM mojaPrvaTabela WHERE username='$username';")) > 0) {
die ('Uporabniško ime že obstaja!');
}

$sql = mysql_query("INSERT INTO mojaPrvaTabela(username, password) VALUES ('$username', MD5('$geslo'));") OR die('Registracija ni bila uspešna!' . mysql_error());
}
?>
 
 
 
 
14.6.2009, 8:17
Še nasvet:

Če ti piše napako in potem on line 8, to pomeni, da imaš v 8. vrstici napako.
Tako da ti ne bo treba skos spraševat za vsako napako. Enostavno preveriš 8. vrstico in stran ponovno naložiš na strežnik.
 
 
 
 
7.11.2009, 19:50
Zakaj mi naredi to pri registracija.php?

0) { die ('Uporabni�ko ime �e obstaja!' ; } $sql = mysql_query("INSERT INTO mojaPrvaTabela(username, password) VALUES ('$username', MD5('$geslo' );" OR die('Registracija ni bila uspe�na!' ; echo 'Registracija je bila uspe�na!'; ?>
 
 
 
 
7.11.2009, 20:41
Problem je, da se PHP ne izvede pravilno.

Ena možnost je, da testiraš na lokalnem računalniku in nimaš ustrezno postavljenega okolja za PHP.

Druga možnost pa je, da so v kodi nepravilno uporabljene oznake <?php ?>, ki označujejo, kjer se izvaja PHP koda.

Da bi vedeli, kaj točno je problem, pa bi rabili več podatkov.

Na kakšen način izvajaš to php skripto?
Prilepi celo kodo, da bomo videli, če je problem v kodi.
 
 
 
 
7.11.2009, 21:06
koda je iz strani:
<?php
mysql_connect('localhost', 'root', 'geslo') OR die('Ne morem se povezati na server!');

mysql_select_db('mojaPrvaBaza') OR die('Ne morem izbrati baze!');

$username = $_POST['username'];
$geslo = $_POST['password'];
$geslo2 = $_POST['password2'];

if ($geslo != $geslo2) {
die ('Vpisana gesla nista enaka');
}

if (mysql_num_rows(mysql_query("SELECT * FROM mojaPrvaTabela WHERE username='$username';")) > 0) {
die ('Uporabniško ime že obstaja!');
}

$sql = mysql_query("INSERT INTO mojaPrvaTabela(username, password) VALUES ('$username', MD5('$geslo'));") OR die('Registracija ni bila uspešna!');

echo 'Registracija je bila uspešna!';
?>


Imam pa WAMPSRVER na localhost, torej PHP 5.3.0
MYSQL 5.1.36
in apache 2.2.11

Aja pa podobno naredi v prijava.php


spremenil: markol (7.11.2009 ob 21.10.22)
 
 
 
 
7.11.2009, 22:29
Problem je, da ti PHP kode sploh ne izvede, ampak jo smatra kot navaden tekst.

Ali odpreš stran preko Apache spletnega strežnik, kot npr. http://localhost/registracija.php ?
 
 
 
 
7.11.2009, 22:53
ja tko jo odprem ja
a je lahko napaka že na prejšni strani, na obrazcu?
mam pa takgale:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>register</title>
</head>
<body>
<form method="post" action="registracija.php" name="registracija">Vpi&scaron;i &#382;eljeno uporabni&scaron;ko ime: <input name="username"><br>
Vpi&scaron;i &#382;eljeno geslo: <input name="geslo" type="password"><br>
Ponovi geslo: <input name="geslo2" type="password"><br>
<input value="POTRDI" name="registracija.php" type="submit">
<br>
</form>
</body>
</html>


spremenil: markol (7.11.2009 ob 22.56.00)
 
 
 
 
7.11.2009, 23:11
evo usposobu sm, ne vem kk, sam pomojem je biv problem ko sem preverjov delovanje sm mev odprt PhpMyAdmin. A je lahko to vzrok?
Zdejle mam zaprtga in mi dela.
 
 
 
 
7.11.2009, 23:25
phpMyAdmin ne bi smel biti problem.

No, glavno, da ti sedaj dela.
 
 
 
 
8.11.2009, 10:31
Zdej mam pa problem pri 17 nalogi. Ne vem kaj je v prijava.php v 5 vrstici narobe: Parse error: parse error in C:\wamp\www\prijava.php on line 5
V njej mam tole:
<?php
session_start();
if (isset($_GET['odjava'])) {
unset($_SESSION['prijavljen']);
die "Uspešno ste se odjavili!";
}
if ($_SESSION['prijavljen'] == true) {
die "Ste že prijavljeni!";
}
if (isset($_POST['Prijava'])) {
mysql_connect('localhost', 'root', '') OR die('Ne morem se povezati na server!');

mysql_select_db('mojaPrvaBaza') OR die('Ne morem izbrati baze!');


$username = mysql_real_escape_string($_POST['username']);
$geslo = mysql_real_escape_string($_POST['password']);

$sql = mysql_query("SELECT * FROM mojaPrvaTabela WHERE username = '$username' AND password = MD5('$geslo');");

if (mysql_num_rows($sql) > 0) {
echo 'Uspešno ste se prijavili kot ';
switch (mysql_result(mysql_query("SELECT vrsta FROM mojaPrvaTabela WHERE username = '$username';"), 0))
{
case 0:
echo "navaden uporabnik.";
break;
case 1:
echo "administrator.";
break;
default:
}
$_SESSION['prijavljen'] = true;
}else {
echo 'Napačna prijava!';
}

}

?>
 
 
 
 
8.11.2009, 11:06
Ko sem delal to lekcijo si nikoli nisem mislil, da bo toliko uporabnikov jo šlo testirat

No ja. Moja napaka je tam. Na sliki je pravilno, spodaj pa napačno napisano. Die je funkcija in manjkajo oklepaji, torej:

die ("Uspešno ste se odjavili!");


Enako dve vrstici spodaj:

die ("Ste že prijavljeni!");
 
 
 
 
8.11.2009, 11:48
zdej mi vrže pa še napako v 7 vrstici: Notice: Undefined index: prijavljen in C:\wamp\www\prijava.php on line 7
tuki je pa takale koda:
if ($_SESSION['prijavljen'] == true) {

enako mi naredi v index kjer je zelo podobna koda, ko pa sem preverjal napako mi je za napako javil: if $_SESSION a je mogoče tukile napaka?
 
 
 
 
8.11.2009, 11:53


Kaj pa če poskusiš z dvojnimi narekovaji?

$_SESSION["prijavljen"]
 
 
 
 
8.11.2009, 12:12
ne še zmerej je isto; na prejšni strani je cela koda če kej pomaga.

spremenil: markol (8.11.2009 ob 12.15.49)
 
 
 
 
8.11.2009, 12:22
V bistvu to ni napaka, ampak samo opozorila, da spremenljivka $_SESSION['prijavljen'] ni definirana.

To ti javlja na domačem strežniku, kjer je privzeto vklopljeno izpisovanje opozoril. Če boš dal do na nek Internet strežnik, tega opozorila ne boš videl.

Vseeno je priporočljivo, da se to reši že v kodi.

To ti bo izpisovalo vedno, ko boš prišel na stran in si neprijavljen, saj se ta spremenljivka nastavi šele ob prijavi.

Ena rešitev bi bila, da uporabiš še funkcijo isset, ki preveri, ali spremenljivka obstaja.

Pogoj bi tako bil:
if ( isset($_SESSION['prijavljen']) && ($_SESSION['prijavljen']==true) ) {


Tako bo najprej preveril, ali res obstaja ta spremenljivka in opozorila tako ne bo več prikazoval.


spremenil: podtalje (8.11.2009 ob 12.23.21)
 
 
 
 
8.11.2009, 12:29
hvala, zdej pa dela normalno.
 
 
 
 
20.11.2009, 15:49
Kako bi pa js lahko zdej naredu na osnovni strani dva različna izpiska besedil ali podobnega, enga za navadne goste in enga za administratorja? Poskušal sem že z tisto kodo, ki je predstavljena pa mi ni uspelo.


spremenil: markol (20.11.2009 ob 15.50.33)
 
 
 
 
21.11.2009, 21:58
Po moje najlažje, da najprej narediš dva HTML izpisa, vsakega v svoji datoteki.

Nato pa na strani uporabiš PHP funkcijo include('ime_datoteke.php' .

Z IF stavkom potem tako izbereš, ali boš vključil datoteko z izpisom za Administratorje ali pa za ostale uporabnike.

 
 
 
 
6.6.2010, 17:57
Koda je odlično napisana in prevrjeno deluje. Delujejo mi vse tri strani (index, prijava in registracija) in še enkrat bi rad pohvalil kljuko, da se je tako potrudil.
 
 
 
 
6.7.2010, 13:12
uh, mal se je blo potrebno potrudt, ampak z veseljem lahko povem da sedaj tudi meni vse deluje, super lekcija! )
 
 
 
 
12.7.2010, 18:57
samo eno vprašanje...Sedaj ko vse deluje, kako naredim, da ko si prijavljen pač neko določeno vsebino vidiš, sicer pa ne? Ali se da narediti tako da ko se prijaviš, te samodejno preusmeri na nek drug .php dokument kjer je tista določena vsebina, ali obstaja kakšna druga metoda? Naprimer kako narediš da če si prijavljen vidiš link na forum iz četrte lekcije , sicer pa ne..
 
 
 
 
12.7.2010, 19:20
Zdravo,
ne bom ti govoril, kako lahko sam spišeš (ker tega ne vem), ti pa bom povedal za eno rešitev.

MicroLogin je zanimiv sistem, ki blokira dostop s strani na katere prilepiš tisto kodo.

Lahko si preneseš in poizskusiš. V tvojem primeru ti pa verjetno ne bo prišlo prav, glede na to, da imaš svoj prijavni sistem.

Povezava: http://www.fileden.com/files/2008/12/19/....
 
 
 
 
12.7.2010, 22:50
Predlagam, da si pogledaš predzadnji (21.) korak v lekciji.

<?php
session_start();
if ($_SESSION['prijavljen']==true) {
echo "TRENUTNO STE PRIJAVLJENI!";
}else {
echo "TRENUTNO NISTE PRIJAVLJENI!";
}
?>


To kodo lahko uporabiš tudi drugje na strani.
Seveda jo lahko malenkost spremeniš.

Poglej npr. naslednji primer:


<?php
session_start();
if ($_SESSION['prijavljen']==true) {
?>
Tu lahko pridejo povezave <a href="povezava1.htm">Povezava z prijavljenega</a>
<?php
}else {
?>
Tu lahko pridejo druge povezave <a href="povezava1.htm">Povezava z neprijavljenega</a>
<?php
}
?>


V tem primeru je prikazano, kako lahko med seboj mešaš PHP kodo ter običajno HTML kodo.
Bistvo je samo, da se mora PHP koda vedno nahajati med <?php in ?>

Upam, da bo v pomoč.


spremenil: podtalje (12.7.2010 ob 22.53.46)
 
 
 
 
15.7.2011, 12:09
Ne razumem razlike med piškotki in sejami, oziroma zakaj se seje uporabljajo pri prijavljanju uporabnika.

Piškotek se ustvari ob prijavi uporabnika in vanj se zapiše recimo uporabniško ime. Poleg tega se da določiti tudi čas trajanja, torej lahko traja tudi leto ali več (če se ga ne pobriše). Piškotek pa je shranjen na računalniku uporabnika.

Seje se pravtako lahko ustvarijo ob prijavi in v njih se ponovno zapišejo določeni podatki. Čas trajanja je dolg toliko, kolikor časa ima uporabnik odprt brskalnik, vsi podatki pa so shranjeni na strežniku.

Odjavo uporabnika s pomočjo piškotkov ni problem narediti, verjetno se pa da tudi z if funkcijo preverjati, če določen piškotek obstaja ipd.

Če nekaj delam, mi je bistvo predvsem to, da vem kaj delam in kaj pišem v kodo. Vidim pa, da jih večina dela samo copy/paste brez vedenja, kaj pravzaprav počnejo.

lp
 
 
 
 
15.7.2011, 16:11
Piškotek lahko uporabnik spremeni. Če stran torej v piškotek zapiše, kot kateri uporabnik sem prijavljen, in jaz nato spremenim to vrednost, bom prijavljen kot nekdo drug. Halo, to pa ja ne gre. Zato se v piškotek zapiše ime seje, kar je 32 znakov dolga koda iz številk in črk. In potem se ta koda navezuje na podatke, ki so shranjeni na strežniku ...

V Cookieje se torej zapišejo kakšni bolj "nepomembni" podatki ... Seja je veliko bolj varna in primerna za prijave.


spremenil: kljuka (15.7.2011 ob 16.15.29)
 
 
 
 
15.7.2011, 16:18
Kar se tiče seje in piškotkov, si kar vse prav povedal.

Drugače pa je tako, da se da prijavo narediti tako s sejo, kot tudi s piškotki.

Iz stališča varnosti pa je vsekakor bolj priporočljivo, da se prijava dela s sejo. Piškotki se nahajajo na lokalnem računalniku in jih uporabnik tako lahko spreminja, kar pa predstavlja nevarnost, če se zanašamo samo na piškotke.

Seje si tudi zapomnijo aktivnost, tako da seja bo avtomatsko pretekla, običajno po okoli 15 minutah neaktivnost. Tako da je manj možnosti, da nekdo pride kasneje na tvoj računalnik in se avtorizira kot ti.

Piškoti se tako uporabljajo predvsem pri stvareh, za katere res želimo, da imamo informacijo o njih tudi v daljšem časovnem obdobju. Pri tem pa je priporoljivo, da tu ne gre za varnostno občutljive podatke, oz. če že so, potem morajo biti na nek način kriptirani, da se onemogoči enostavno spreminjanje.
 
 
 
 
15.7.2011, 16:23
kljuka:Zato se v piškotek zapiše ime seje, kar je 32 znakov dolga koda iz številk in črk. In potem se ta koda navezuje na podatke, ki so shranjeni na strežniku ...


No, tega dela nisem vedel.

Najlepša obema, da sta mi razjasnila zadevo.
 
 
 
 
15.7.2011, 16:44
realife, ja ja .. Kar poglej naprimer v piškotek PHPSESSID od zmage.com naprimer ... Boš videl ... Da ti dam še en primer: pred leti, ko je zmaga bila še v povojih ( ) in je bil id uporabnik, kot sem rekel, zapisan v piškotku, sem jaz vrednost piškotka spremenil in naenkrat sem bil prijavljen kot podtalje
 
 
 
 
19.7.2011, 20:09
Lahko tudi
<?php
session_start();
if(!isset($_SESSION['id']))
{
header ("location: index.php");
}

?>

Sam da boš pri prijavi dodal namesto $_SESSION['uporabnik '] daš $_SESSION['id'].
 
 
 
 
31.8.2011, 1:23
Zdravo!

Imam kar nekaj težav s to lekcijo, kajti nič ne dela .

1. Že ko pridem na začetno stran mi javi napako. Poiskal sem vrstico, katero mi javlja napaka ampak je vse tako kot v lekciji.

Napaka:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\xampp\htdocs\registracija\index.php:12) in D:\xampp\htdocs\registracija\index.php on line 16

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\xampp\htdocs\registracija\index.php:12) in D:\xampp\htdocs\registracija\index.php on line 16


Slika kode:



2. Ko odprem stran registracija.php, vpišem novo uporabniško ime ter geslo, kliknem na gumb Registracija, se ne zgodi popolnoma ničesar (Ne izpiše se Registracija je bila uspešna, podatki se ne shranijo v bazo).

3. Enaka napaka kot v prvi težavi, se pojavlja tudi na strani prijava.php.

Napaka:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\xampp\htdocs\registracija\prijava.php:10) in D:\xampp\htdocs\registracija\prijava.php on line 11

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\xampp\htdocs\registracija\prijava.php:10) in D:\xampp\htdocs\registracija\prijava.php on line 11


Slika kode:



Torej, kaj bi bilo narobe?


spremenil: .lolo (31.8.2011 ob 01.24.26)
 
 
 
 
31.8.2011, 1:57
Kar gledam, je glavni problem v session_start() funkciji.

Ta funkcija upravlja s sejo (session), katera deluje s pomočjo cookijev. Cookie-ji pa vedno delujejo tako, da se pošljejo pred ostalo stranjo.

Zato mora biti funkcija session_start() vedno na začetku. Pred njo je lahko druga php koda, ne sme pa biti nobenega teksta (tudi presledka ne).

Zato naj bo prva vrstica v dokumentu:
<?php
session_start();
 
 
 
 
31.8.2011, 2:21
Sedaj sem prestavil in je ta funkcija prva vrstica v dokumentu. Napake več ne javlja, ko pa se hočem registrirat mi pa še vedno samo "osveži" stran in podatki se ne zapišejo v bazo.
 
 
 
 
31.8.2011, 10:26
Za kaj več bi morali videti celotno kodo, ker narobe je lahko precej stvari.

V splošnem pa ponavadi med kodo lahko vrivaš izpise z echo ter tako vidiš, kateri del kode se izvede in kateri ne. Potem pa preveriš, zakaj se določen del kode ni izvedel, verjetno zaradi napačnega if stavka.
 
 
 
 
31.8.2011, 11:17
Sem dal dva izpisa z echo v kodo in tudi ta dva ne izpiše. Se pravi, da se php koda sploh ne izvede?

Registracija.php

<body>

<form id="registracija" name="registracija" method="post" action="registracija.php">
Uporabniško ime:
<input type="text" name="username" id="username" />
<br />
Geslo:
<input type="password" name="password" id="password" />
<br />
Ponovi geslo:
<input type="password" name="password2" id="password2" />
<br />
<input type="submit" name="registracija" id="registracija" value="Registracija" />

</form>

<?php
if (isset($_POST['Prijava'])) {

mysql_connect('localhost', 'root', '******') OR die("Ne morem se povezati na server!");
mysql_select_db('registracija') OR die("Ne morem izbrati baze!");
echo 'Test1';

$username = $_POST['username'];
$geslo = $_POST['password'];
$geslo2 = $_POST['password2'];

if ($geslo != $geslo2) {
echo 'Test2';
die ('Vpisana gesla nista enaka!');
}

if (mysql_num_rows(mysql_query("SELECT * FROM uporabniki WHERE username='$username';")) > 0) {
die ('Uporabniško ime že obstaja!');
}

$sql = mysql_query("INSERT INTO uporabniki(username, password) VALUES ('$username', MD5('$geslo'));") OR die("Registracija ni bila uspešna!");

echo 'Registracija je bila uspešna!';
}
?>

</body>
 
 
 
 
31.8.2011, 12:02
Zakaj imaš

if (isset($_POST['Prijava']))

?!

Daj

if (isset($_POST['username']))
 
 
 
 
31.8.2011, 12:15
Ja kljuka, to je bilo narobe. Hvala obema!
 
 
 
 
23.7.2015, 13:46
Pri registraciji mi ne dela. Samo napiše Registracija je bila uspešna in doda prazen zapis v bazo. Ali je težava v tem, da je ime datoteke register.php?
 
Prijava in registracija
 
 
 
Zmaga.com ponuja brezplačno in razumljivo učenje računalniških programov, vas na enkraten način spozna z različnimi svetovnimi jeziki, s podrobno obrazloženimi recepti prikaže čare kulinarike in vam prežene strahove pred domačimi opravili.
 
 
Poleg tega lahko prebirate poučne članke, ki so namenjene širjenju naše splošne razgledanosti ter preverite svoje znanje z priljubljenim in enostavnim sistemom za preverjanje znanja. Če med vsebinami, ki se dodajajo vsak dan, ne najdete želenega znanja, je za vaša vprašanja na voljo dobro obiskan forum, kjer lahko tudi aktivno sodelujete. V primeru, da bi radi svoje praktično znanje delili z ostalimi, pa to lahko storite preko preprostega vmesnika za dodajanje vsebin. Zmagajte z znanjem z Zmaga.com!