Kliknite tukaj, da si ogledate profil, kot ga vidijo drugi
 
Domov > Forum > Računalništvo

Pomoč pri PHP napaki

 
 
21.11.2011, 22:19
Pozdravljeni!

Jaz se ukvarjam z neko PHP skripto, ki pa mi ne deluje in sicer mi javi napako:


Parse error: syntax error, unexpected T_IS_NOT_IDENTICAL, expecting ',' or ')' in /home/vmesnikg/public_html/Stuff/connadmin.php on line 10


Moja koda pa je tukaj:

<?
$povezi = mysql_connect("localhost", "uporabniskoime", "geslo") or die(mysql_error());
mysql_select_db("vmesnikg_prijava") or die(mysql_error());

if(!isset($_COOKIE['uporabnik']))
{
header("Location: prijava.php");
}
else
if(!isset($_COOKIE['rank'] !== ['2']))
{
header("Location: index.php");
}
elseif(isset($_COOKIE['rank'] == ['2']))
?>


Zanima me, kaj pravzaprav ta napaka pomeni in kako se je reši.


spremenil: NikMan (22.11.2011 ob 08.55.30)
 
 
 
21.11.2011, 23:43
Napako imaš v vrstici:
if(!isset($_COOKIE['rank'] !== ['2']))

Koda za to vrstico je vsekakor malo čudna.

isset preverja, ali spremenljivka obstaja, za spremenljivko pa uporabiš kar primerjavo dveh vrednosti.

Na drugi strani pa tudi ne vem, če je res potrebno, da vrednost '2' daš v oglate oklepaje.

Verjetno bi moral to napisati ločeno in sicer posebej, da preverjaš isset($_COOKIE['rank']) ter šele nato, če je ta pogoj izpolnjen, preverjaš ali je $_COOKIE['rank'] !== ['2']

Torej nekako tako:
if ( (isset($_COOKIE['rank'])) AND ($_COOKIE['rank'] !== ['2']) )

Ker pa ne vem točno, kaj naj bi skripta dejansko morala početi, je lahko logika tu tudi napačna.

P.S. Podoben problem je tudi pri zadnjem elseif stavku.


spremenil: podtalje (21.11.2011 ob 23.45.14)
 
 
 
22.11.2011, 0:08
Oprosti, vendar sem se odločil zadevo izpeljati nekoliko drugače - brez piškotkov, in sicer, da bi koda med vhodom na stran uporabniki.php v glavi preverila, če ima uporabnik rank 2 (uporabnikovo ime je v piškotku) in bi mu pustila na stran, sicer pa bi ga vrnila nazaj.

Če potrebuješ še kaj kode, le pove.
 
 
 
22.11.2011, 11:42
Kje pa bo potem shranjen rank, če ne boš uporabljal piškotke.

Če bi jih že uprabljal, bi mogoče šlo z naslednjim IF stavkom:
if ( (!isset($_COOKIE['rank'])) OR ($_COOKIE['rank'] !== '2' ) ) header("Location: index.php" );

Se pravi, če cookie ni definiran ali pa če ima vrednost, različno od 2, ga preusmeri na index.php.


spremenil: podtalje (22.11.2011 ob 11.43.08)
 
 
 
22.11.2011, 15:26
Zdaj pa imam problem. In sicer koda deluje, vendar ne vem kako bi v cookie zapisal rank sepravi št. 1 ali 2, le to število pa bi program prenesel iz baze.
Zdaj imam kodo takšnole:


$cas = time() + 3600;
setcookie(uporabnik, $uporabnik, $cas);
setcookie(geslo, $geslo, $cas);
setcookie(rank, $rank, $cas);


Vse ostalo pa je definirano takole:


@$uporabnik = $_POST['uporabnik'];
@$geslo = $_POST['geslo'];
@$geslo = sha1($geslo);
$rank = $_GET{'rank'};
 
 
 
22.11.2011, 18:09
Ali bazo že imaš postavljeno? Običajno pa take stvari prebereš in shraniš ob prijavi.

Si mogoče kaj razmišljal, da bi namesto Cookie raje uporabil Session, ki je lažji za uporabo in tudi iz varnostnega stališča bolj priporočljiv, kot pa cookie.

P.S. Pri zadnji vstici $rank = $_GET{'rank'}; bi morali biti verjetno navadni oklepaji in ne zaviti.
 
 
 
22.11.2011, 19:16
Da bazo imam že postavljeno, tudi poveže se mi z bazo, ne vem samo ali si mislil samo, da bi session nastavil za prijavo (se pravi, bi se bilo potrebno prijaviti po vsakem ponovnem zagonu računalnika), ali bi session uporabil le za rank?

In sicer, kako se naredi session?
 
 
 
22.11.2011, 19:48
Ponavadi se cookie uporablja za avtomatsko prijavo, pri čemer je bistveno, da je notri shranjen id uporabnika in pa nek hash, ki je enoličen za uporabnika, da ne more vsak ponarediti cookie-ja.

Nato ob prijavi (lahko je avtomatska) iz baze prebereš vse podatke o tem uporabniku in jih shraniš v Session.

Sesstion se uporablja podobno kot običajne spremenljivke, npr.
$_SESSION['ime_spremenljivke']='abc';

Sama vrednost te spremenljivke se potem hrani na strežniku, vrednost pa se avtomatsko prenaša med različnimi stranmi. Edino, kar je, da moraš čisto na vrhu vsake take strani dodati naslednjo PHP kodo:
session_start();

Session spremenljivka pa avtomatsko poteče ob neaktivnosti uporabnika, običajno je to nastavljeno okoli 15 minut.
 
 
 
22.11.2011, 20:06
Ok vredu, vse sem razumel, vendar mi koda še vedno ne deluje tako, kot pričakujem. V datoteki 'Stuff/adminconn.php', sem dopisal tale stavek:
session_start(); (na vrh glave)

potem pa sem pri prijavi spremenil staro prijavo v takole obliko:
$cas = time() + 3600;
setcookie(gigahost_uporabnik, $uporabnik, $cas);
setcookie(gigahost_geslo, $geslo, $cas);
$_SESSION['gigahost_rank']=($rank);


Vendar me še vedno ne spusti naprej (sem preveril v bazi če imam rank 2 in ga imam).
Lahko bi mi napisal, kako bi iz baze vzel uporabnikove podatke (rank), ga dal v Session in, kako bi preveril če ima admin rank 2.


spremenil: PowerZan (22.11.2011 ob 20.06.33)
 
 
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!