zerodark
Dobro dosao
Ugled: 0
Van mreže
Poruke: 2
|
 |
« poslato: Septembar 21, 2009, 05:10:03 pm » |
|
Pozdrav ! Treba mi scripta koja omogucava izbor jezika na sajtu (bez auto-redirect) na primer iz srpskog u engleski i obrnuto. Ta scripta bi menjala samo odredjene reci (koje su pre definisane). Imam jos jednu molbu: potvrda registracije korisnika putem e-mail aktivacije. Hvala!
|
|
|
|
« Poslednja izmena: Maj 04, 2010, 07:46:41 pm ZEROF »
|
Sačuvana
|
|
|
|
|
|
|
ZEROF
|
 |
« Odgovor #1 poslato: Septembar 22, 2009, 07:04:39 am » |
|
Gotovih resenja nema, moraces nekog da uposlis. Ako znas php, mozes to i sam resiti. Pogledaj kako funkcionise neka skripta, kao sto je SMF. Isto vazi i za aktivaciju naloga.
|
|
|
|
|
Sačuvana
|
In God we trust, the rest we monitor.  YouTube>My Channe>Channel Info>Channel Type>Director
|
|
|
zerodark
Dobro dosao
Ugled: 0
Van mreže
Poruke: 2
|
 |
« Odgovor #2 poslato: Septembar 22, 2009, 07:57:42 pm » |
|
Hvala ! Pokusacu resiti problem string replace metodom.
|
|
|
|
|
Sačuvana
|
|
|
|
|
SETI_explorer
|
 |
« Odgovor #3 poslato: Septembar 23, 2009, 07:51:17 am » |
|
Što se jezika tiče, to je lagano, samo se malo trebaš poigrati sa cookie-ima. Npr. Link: www.tvojsajt.com/index.php?jezik=en PHP: <?php if(isset($_GET['jezik'])) { if(ctype_alpha($_GET['jezik'])) { setcookie("jezik", $_GET['jezik'], time()*vreme_trajanja_cookie-a, "/"); header("Location:index.php"); } else { die("Hacking attempt"); } } ?> Što se potvrde registracije tiče, ni to nije problem ali iziskuje vreme i teško da će ti to neko besplatno uraditi. Opet, ako si spreman da izdovjiš manju svotu novca za profesionalnu skriptu, kontaktiraj me ;)
|
|
|
|
|
Sačuvana
|
|
|
|
respekt
Uspesan clan

Ugled: 0
Van mreže
Poruke: 38
|
 |
« Odgovor #4 poslato: Mart 09, 2010, 08:03:53 am » |
|
Ja sam nesto pokusao da uradim na tu temu activaction mail ali nisam uspeo. Evo sta sam ja radio pa cemo svi zajedno pokusati to da odradimo. Recimo sta ovde ne valja to je da kada ja kao posaljem ovaj aktivacioni mail na mail korisnika nebitrebalo da mogu da se logujem medjutim meni login prodje :)))) Mozda ovaj mail bi i dosao kada bi se ovo pokrenulo na serveru ali ocigledno on nebi imao smisla :)
add.php [code] <?php // konekcija na bazu mysql_connect("localhost", "root", "") or die(mysql_error()); mysql_select_db("prijavaispita") or die(mysql_error());
//Provjeravamo da li je korisnik pritisnuo submmit if (isset($_POST['submit'])) {
//Provera da li je korisnik popunio polja if (!$_POST['ime'] | !$_POST['prezime'] |!$_POST['password']|!$_POST['brindeksa']) { die('Niste popunili sva polja'); }
if (!get_magic_quotes_gpc()) { $_POST['brindeksa'] = addslashes($_POST['brindeksa']); }
//select za proveru indeksa $usercheck = $_POST['brindeksa']; $check = mysql_query("SELECT brojindeksa FROM studenti WHERE brojindeksa = '$usercheck'") or die("Provjera ne moze da se izvrsi"); $check2 = mysql_num_rows($check);
//select za proveru email-a $usercheck = $_POST['email']; $pemail = mysql_query (" SELECT * FROM studenti WHERE email ='$email' ") or die ("Provera ne moze da se izvrsi"); $check3 = mysql_num_rows($pemail);
//Ako broj indeksa postoji u bazi ispisujemo gresku if ($check2 != 0) { die('Greska, brojindeksa koji ste uneli '.$_POST['brindeksa'].' je u upotrebi.'); }
//Provera da li je unijeta e-mail adresa ispravna if (!eregi('^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]', $_POST['email'])) { echo 'Uneta email adresa nije ispravna'; exit; }
//Proveravamo da li email vec postoji u bazi if ($check3 !=0) { die ('Greska, Email koji ste uneli '.$_POST['email'].' je u upotrebi'); }
// Vrsimo kriptovanje sifre md5 algoritmom $_POST['password'] = md5($_POST['password']); if (!get_magic_quotes_gpc()) { $_POST['password'] = addslashes($_POST['password']); }
//Ako je korisnik sabmitovao formu if ($_POST['form_submitted'] == '1') { //Definisanje aktivacijskog maila $activactionkey = mt_rand() . mt_rand() . mt_rand() . mt_rand() . mt_rand();
//Upisivanje u bazu $datumprijave=date("Y-m-d"); $ime=$_POST['ime']; $prezime=$_POST['prezime']; $brindeksa=$_POST['brindeksa']; $password=$_POST['password']; $email=$_POST['email']; $password=mysql_real_escape_string($password); $insert = "INSERT INTO studenti (imestudenta,prezimestudenta,brojindeksa,password,email,activactionkey,datumprijave) VALUES ('".$ime."','".$prezime."','".$brindeksa."','".$password."','".$email."','".$activactionkey."','".$datumprijave."')"; $add_member = mysql_query($insert);
echo "Aktivacijski mail je poslat na $_POST[email]. Molimo proverite vas e mail i potvrdite aktivaciju.";
//Slanje aktivacionog maila
$to = $_POST['email']; $subject = "Potvrdite vasu registraciju"; $message = "Dobrodosli na nas sajt!\r\rVi ili neko drugi koristi ovu email adresu da se registruje. Mozete se registrovati klikom na sljedeci link:\rhttp://www.YOURWEBSITE.com/add.php?$activactionkey\r\rAko ste ovaj mail dobili greskom ignorisite ga i bicete automatski izbrisani sa liste.\r\rRegards,\ YOURWEBSITE.com Team"; $headers = 'From: noreply@ YOURWEBSITE.com' . "\r\n" . 'Reply-To: noreply@ YOURWEBSITE.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject,$message,$headers); } else {
##User isn't registering, check verify code and change activation code to null, status to activated on success
$queryString = $_SERVER['QUERY_STRING'];
$query = "SELECT * FROM studenti";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)) {
if ($queryString == $row["activactionkey"]) {
echo "Congratulations!" . $row["ime"] . " is now the proud new owner of an YOURWEBSITE.com account.";
$sql="UPDATE studenti SET activactionkey = '', status='activated' WHERE (id = $row[id])";
if (!mysql_query($sql))
{
die('Error: ' . mysql_error());
}
}
}
}
?>
<h1>Nakon potvrde aktivacijskog maila mozete se logovati</h1> <p></p>
<?php } else { ?>
<form action="add.php" method="post"> <table border="0"> <tr><td>Ime:*</td><td> <input type="text" name="ime" maxlength="35"> </td></tr> <tr><td>Prezime:*</td><td> <input type="text" name="prezime" maxlength="35"> </td></tr> <tr><td>Broj indeksa:*</td><td> <input type="text" name="brindeksa" maxlength="4"> </td></tr> <tr><td>Sifra:*</td><td> <input type="password" name="password" maxlength="12"> </td></tr> <tr><td>eMail:</td><td> <input type="text" name="email" maxlength="35"> <input type="hidden" name="form_submitted" value="1"/> </td></tr> <tr><th colspan=2><input type="submit" name="submit" value="Registracija"></th></tr> <tr><th colspan=2><input type="reset" name="reset" value="Resetovanje"></tr></td></table> </form>
<?php } ?>
login.php <?php session_start();
if (isset ($_POST['imestudenta'])&& isset ($_POST['password'])) { //Ako je korisnik pokusao da se prijavi $imestudenta=$_POST['imestudenta']; $password=md5($_POST['password']);
$db_conn=mysql_connect("localhost", "root",""); mysql_select_db("prijavaispita",$db_conn); $query="select * from studenti where imestudenta='$imestudenta' and password='$password'"; $rezultat=mysql_query($query,$db_conn); if (mysql_num_rows($rezultat)>0) { //ako je korisnik pronadjen u bazi podataka //registrujemo njegov indetifikator u sesiji $_SESSION['valid_student']=$imestudenta; } } ?>
<html> <body> <h1>Prijava ispita</h1> <?php if (isset($_SESSION['valid_student'])) { echo 'Vi ste prijavljeni kao: '. $_SESSION['valid_student'].'<br />'; echo '<a href="logout.php">Log out</a><br />'; } else { if (isset($password)) { //ako se pokusaj prijavljivanja zavrsio neuspjehom echo 'Niste se uspjesno logovali'; } else { //Korisnik koji se jos nije prijavio ili se odjavio echo 'Niste logovani'; } //generisanje obrasca za prijavljivanje echo '<form action = "login.php" method = "post">'; echo '<table>'; echo '<tr><td>Vase ime:</td>'; echo '<td><input type="text" name="imestudenta"></td></tr>'; echo '<tr><td>Password:</td>'; echo '<td><input type="password" name="password"></td></tr>'; echo '<tr><td colspan="2" align="center">'; echo '<input type="submit" value="Logujte se"></td></tr>'; echo '</table></form>';
} ?> <br> <a href="studenti.php">Studentska sekcija</a> </body> </html>
[/code]
|
|
|
|
« Poslednja izmena: Mart 09, 2010, 08:06:35 am respekt »
|
Sačuvana
|
|
|
|
|
SETI_explorer
|
 |
« Odgovor #5 poslato: Mart 09, 2010, 09:52:10 am » |
|
Ovako, na brzinu... <?php $query="select * from studenti where imestudenta='$imestudenta' and password='$password'"; ?> Ti ovde nigde ne proveravaš da li je korisnik zapravo ulogovan, tj. skripta će ulogovati svakog sa tačnim kor.imenom/lozinkom (mada, kad bolje razmislim, proveri ti opet input parametre, sigurnosti radi :P). Uglavnom, upitu treba dodati uslov: WHERE `status` = 'activated'...
|
|
|
|
|
Sačuvana
|
|
|
|
respekt
Uspesan clan

Ugled: 0
Van mreže
Poruke: 38
|
 |
« Odgovor #6 poslato: Mart 09, 2010, 10:14:03 am » |
|
Cackacu nesto pa cemo da vidimo 
|
|
|
|
|
Sačuvana
|
|
|
|
respekt
Uspesan clan

Ugled: 0
Van mreže
Poruke: 38
|
 |
« Odgovor #7 poslato: Mart 09, 2010, 10:43:36 am » |
|
E ovako, recimo u bazi dodam jos jedno polje 'aktiviran' koje mi moze imati vrednosi '0' ili '1' a na pocetku kad se korisnik registruje dobije vrednost 0.To je ok.Sad meni je jasno da klikom na taj link koji dodje na mail korisniku treba da se obezbedi to da se polje 'aktiviran' promeni u '1'i to uporedjivanjem activationkey-ova. E kako to da obezbedim  A sa ovim dole ja valjda proveram da li je korisnik registrovan tj trazim da li to ime i lozinka postoje u bazi i ako postoje pamtim sesiju. Za moj slucaj bi sad trebalo dodati jos tu jednu liniju. Da li sam makar na pravom putu <?php $query="select * from studenti where imestudenta='$imestudenta' and password='$password' and aktiviran=='1'"; ?>
|
|
|
|
« Poslednja izmena: Mart 09, 2010, 10:44:01 am respekt »
|
Sačuvana
|
|
|
|
|
SETI_explorer
|
 |
« Odgovor #8 poslato: Mart 09, 2010, 12:30:06 pm » |
|
Ne vidim zašto bi pravio dodatno polje u bazi kada isto već postoji. Ako pogledamo prvu skriptu koju si postavio, nailayimo na sledeći kod (ukoliko je activ. key ispravan): $sql="UPDATE studenti SET activactionkey = '', status='activated' WHERE (id = $row[id])"; Dakle - 'status'. Upit: <?php $query = "SELECT * FROM `studenti` WHERE `imestudenta` = '$imestudenta' AND `password` = '$password' AND `status` = 'activated'"; ?>
|
|
|
|
|
Sačuvana
|
|
|
|
respekt
Uspesan clan

Ugled: 0
Van mreže
Poruke: 38
|
 |
« Odgovor #9 poslato: Mart 10, 2010, 12:31:23 am » |
|
Joj ja sam se totalno pogubio. U bazi ne postoji ovo polje status iako sam ga ja navodio u skriptu pa zato sam to rekao "dodatno polje" ali nebitno recimo i da postoji.Malo mi se cini da se nekako ne razumijemo :)Kada ja saljem korisniku email da potvrdi svoju registraciju saljem mu to sto mu saljem, linksajta + aktivacionikey (njega upisem u bazu odmah po registraciji korisnika, a recimo i da tom polju status dodelimo logicki tip podataka tako da moze da ima vrednost 0 i 1 koji je uvek 0 sve dok korisnik ne klikne na taj link i promeni ga u 1). Zar nebi trebalo u login formi kada korisnik se loguje da se ispituje da li u bazi postoji njegovo ime, password i da se ispituje da li je aktivacionikey isti kao i onaj u bazi i da ako je sve to ispunjeno izvrsi se promena na statusu gde to korisnicko ime i password nemaju vise pod statusom '0' nego '1' tj odradi se UPDATE. Dakle ja sam tu zapeo, klik na aktivacioni link u mailu, ispitivanje uslova, ako je sve ispunjeno UPDATE tabele i promena statusa iz '0' u '1'. Jel me sad kontas ili sam sad jos vise zakomplikovao problem 
|
|
|
|
|
Sačuvana
|
|
|
|
|
SETI_explorer
|
 |
« Odgovor #10 poslato: Mart 10, 2010, 06:39:32 am » |
|
Zar nebi trebalo u login formi kada korisnik se loguje da se ispituje da li u bazi postoji njegovo ime, password i da se ispituje da li je aktivacionikey isti kao i onaj u bazi Ovo mi nema logike.... Pazi, aktivacija korisnika u globalu, a i kod tebe, funkcioniše na sledeći način: 1. korisnik se registruje - ide activation email sa activation linkom, (kod koji se sadrži u linku, je upisan u bazu odmah po registraciji) 2. korisnik klikne na link 3. ukoliko je link ispravan - status se menja u 1 (aktiviran) - u suprotnom - ništa se ne dešava, naravno (mudro bi bilo ispisati error poruku) Ovim je postupak aktivacije gotov. Login forma: 1. korisnik unosi kor. ime i lozinku 2. proveravaju se input parametri (filtriranje, potom proverava da li je sve unešeno, ...) 3. prvo proveri da li je korisnik aktiviran, tj. da li je status 1 - ukoliko nije, uopšte te ne zanima da li je kombinacija user/passwd ispravna - odbijaš login 4. korisnik je aktiviran - proveri login podatke i na osnovu rezultata prihvati/odbij login ... To bi bila logička osnova... Nadam se da sam pomogao...
|
|
|
|
|
Sačuvana
|
|
|
|
respekt
Uspesan clan

Ugled: 0
Van mreže
Poruke: 38
|
 |
« Odgovor #11 poslato: Mart 10, 2010, 08:00:26 am » |
|
E pa to bato  ukoliko je link ispravan - status se menja u 1 (aktiviran) - u suprotnom - ništa se ne dešava, naravno (mudro bi bilo ispisati error poruku)
E ovo me muci.Kako da ispitam da li je link koji sam ja poslao korisniku ispravan?!? Ako je link recimo : http://www.mojsajt.com/login.php?$activationkey Kako da ja proverim da li je korisnik klikuno na taj link  kad skontam da je kliknuo na njega lako cu ja da uradim UPDATE baze i da promenim status sa '0' na '1'. Hvala na pmoci !
|
|
|
|
|
Sačuvana
|
|
|
|
|
SETI_explorer
|
 |
« Odgovor #12 poslato: Mart 10, 2010, 11:52:02 am » |
|
Zamislimo da je link sledeći: http://www.primer.com/act.php?key=A94A8FE5CCB19BA61C4C0873D391E987982FBBD3 A94A8FE5CCB19BA61C4C0873D391E987982FBBD3 - SHA1 hash od reči 'test'. Ovaj kod si uneo u bazu prilikom registracije korisnika kao activationkey ili kako već... Skripta act.php: <?php
$key = htmlspecialchars($_GET['key'], ENT_QUOTES);
// sigurnosno-tehnicke provere // sha1 ima 40 karaktera i sastoji se od cifara i slova - zato to i proveravamo if(empty($key) || strlen($key) != 40 || !ctype_alnum($key)) { die('Aktivacioni kod je neispravan.'); // neko pokusava da manipulise linkom } else { $sql = "SELECT `username` FROM `users` WHERE `act_key` = '$key' LIMIT 1"; // trazi korisnika koji ima taj akt key $query = mysql_query($sql) or die('mysql error.'); // ovde bi se jos mogla uvesti provera, da li je korisnik vec aktiviran, i ako jeste, staviti mu to do znanja if(mysql_num_rows($query) == 0) { die('Ne postoji korisnik sa tim aktivacionim kodom'); } else { $result = mysql_fetch_array($query); $username = $result['username']; mysql_query("UPDATE `users` SET `status` = 1 WHERE `username` = '$username'") or die('mysql error'); echo $username.', aktivirali ste svoj nalog.'; } } ?>
|
|
|
|
|
Sačuvana
|
|
|
|
respekt
Uspesan clan

Ugled: 0
Van mreže
Poruke: 38
|
 |
« Odgovor #13 poslato: Mart 11, 2010, 02:36:36 am » |
|
Mozes da mi objasnis u ovom delu if(empty($key) || strlen($key) != 40 || !ctype_alnum($key)) zasto postavljas uslov ako je duzina kljuca razlicita od 40? Mislim ne znam cemu to. Inace svaki put ispanem ovde iz petlje i dobijem poruku aktivacioni kljuc je neispravan iako ga upise u bazu i posalje ga na mail.
|
|
|
|
|
Sačuvana
|
|
|
|
|
SETI_explorer
|
 |
« Odgovor #14 poslato: Mart 11, 2010, 06:43:31 am » |
|
Mislim, da je tvoj problem više semantički nego sintaksni. Pročitaj opet moj post u kome sam ti izneo kako to treba da izgleda, kod je lako napisati.
Dakle to što proverava dužinu stringa je zato što sam dao primer sa SHA1 act. key-em (sad vidim da ti koristiš md5 pa stavi 32), a SHA1 hash je dužine 40 karaktera. To predstavlja samo još jednu prepreku manipulaciji linkom. U slučaju da neko nešto pokuša, skripta će ga provaliti, jer:
1. filtrira sve neželjene karaktere f-jom htmlspecialchars() 2. proverava da li je key uopšte dat, da li je alfa-numerički, kao i da li je je odg. dužine 3. naravno, proverava ga sa svima u bazi kako bi utvrdio o kom je korisniku reč a potom se preuzimaju dalje akcije
|
|
|
|
|
Sačuvana
|
|
|
|
Naša mreža:
Bg-dizajn.com |
AstaHost |
Anonimus |
My Exploit |
Lovac Na Novac | RE.rs
Partneri:
Net Centar |
EE.RS portal |
Maturski |
Svet Igara
Učitavam...