Pereiti prie turinio

REG forma + Patvirtinimas El. paštu


Rekomenduojami pranešimai

Sveiki, turiu tokius skriptukus:

 

register-form.php:

<html>
<body>
<form id="loginForm" name="loginForm" method="POST" action="register-exec.php">
 <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
  <th>Vartotojo vardas: </th>
  <td><input name="username" type="text" class="textfield" id="username" /></td>
</tr>
<tr>
  <th>El.Pastas</th>
  <td><input name="email" type="text" class="textfield" id="email" /></td>
</tr>	
<tr>
  <th>Password</th>
  <td><input name="password" type="password" class="textfield" id="password" /></td>
</tr>
<tr>
  <th>Patvirtinti slp</th>
  <td><input name="cpassword" type="password" class="textfield" id="cpassword" /></td>
</tr>
<tr>
  <td> </td>
  <input type="hidden" name="forma_patvirt" value="1"/>
  <td><input type="submit" name="Submit" value="Registruotis" /></td>
</tr>
 </table>
</form>
</body>
</html>

 

patvirtinimas.php:

 

<?php
include('register-form.php');
session_start();

//PASTAS

//CIA RANDOM KODA GENERUOJAM	
// pasw ilgis 
$n = 7; 
// pasw raides ir pan. 
$simboliai = '456abcd5sefgh8a9isd0jkl0fgm1njo3p0qr8stuv7wxyz1jf2hjkl3'; 
// generuoti ir grazint random pasw 
function ran($n, $simboliai) 
{ 
 $m = strlen($simboliai); 
 while($n--) 
 { 
$ran .= substr($simboliai,mt_rand()%$m,1); 
 } 
return $ran;
} 

$rdm = ran($n, $simboliai);	
//BAIGEM RAND KODA GENERUOT

$_SESSION['SESS_RDM'] = $rdm;
session_register("$rdm");
echo $rdm;

$kam = $_POST['email'];
$tema = "LCruise.lt | Zaidejo patvirtinimas";
$turinys = "Sveikas(a),\n\n Tavo patvirtinimo kodas: $rdm";

mail($kam, $tema, $turinys)
?>


<html>
<body>
<form id="kodas" name="kodas" method="post">
 <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
  <th>Patvirtinimo kodas: </th>
  <td><input name="kodas" type="password" class="textfield" id="kodas" /></td>
  <br />
  <input type='submit' value='Patvirtinti' />
</tr>
 </table>	
 </body>
 </html>

<?php
if ($_GET['kodas']==$_SESSION['SESS_RDM'])
{

//Create INSERT query
$qry = "INSERT INTO users(player_name,password,email,user_name,licence,energy,distance,plate,officer,v
ip,cash,date_created) VALUES ('$username','$password','$email','$username','320','50','0','!','0','0','50000','$date')";
$result = @mysql_query($qry);
}

elseif($result) 
{
	echo "Reg pavyko";
}



elseif($_GET['kodas']!=$_SESSION['SESS_RDM'])
{
echo "Patvirtinimo kodas blogas!";
die();
}

else 
{
	die("Query failed");
}
?>

 

Bėda tame, kad kažkodėl negaunu į el. paštą to generuoto kodo... Bei iškilo klausimas: kaip padaryt, kad tas random kodas nesikeistu paspaudus mygtuką "patvirtinti" ir kaip nors užsiregistruotu.. Būtų labai šaunu, jei kas nors pagelbėtumėt ;)

Redagavo v1per
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nes netinkamai darai.

 

Į SQL įrašyti reikia, o ne į sesiją, nes ji nebeegzistuoja nuėjus į kitą tinklalapį arba uždarius naršyklę.

 

 

Antra, session_register jau yra deprecated, tai reiškia, nenaudojamas. Pastebėjau ir keletą sintaksės klaidų, pvz.: po mail() nėra ;

 

Trečia, reikėtų pasidometi, kaip formatuojamas kodas :)

Redagavo Plx
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu dėl to ;, tai prirašysiu, nors jis skripto gale nebūtinas, nors patartina rašyt.. ;D

Tai sakai tą random kodą rašyt į mysql db? O galima bus padaryt taip, kad, jei įvedė neteisingą patvirtinimo kodą, tai visi įrašai esantys sql susiję su tuo kodu ir user name bus ištrinti?

Nuoroda į pranešimą
Dalintis kituose puslapiuose
Nu dėl to ;, tai prirašysiu, nors jis skripto gale nebūtinas, nors patartina rašyt.. ;D

Tai sakai tą random kodą rašyt į mysql db? O galima bus padaryt taip, kad, jei įvedė neteisingą patvirtinimo kodą, tai visi įrašai esantys sql susiję su tuo kodu ir user name bus ištrinti?

Neteisingai galvoji. Taip daryti negalima, nes iš kur tu žinai, gal koks 'kakeris' sugalvos specialiai visur vedinėti blogus kodus ir trinti registracijas? Reikėtų įvesti duomenis, tačiau pridėti porą papildomų laukelių - patvirtinta (0 arba 1), ir kodas.

Nuejus į el paštu atsiustą adresą, reiktų tikrinti, ar yra toks įrašas su tokiu kodu, kur patvirtinta yra 0. Jei yra, pakeičiam 0 į 1, jei nėra - rašom kad tokio nėra, todel patvirtinimas nevyksta.

Redagavo Plx
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, jeigu vartotojas įveda savo vardą ir dar ką nors. Tuomet aš padarau į mysql insert jo vardą ir jam sugeneruotą kodą. Tada aš išsiunčiu kodą į el. paštą, jei jis tą kodą įveda teisingai toliau insertinu kitus jo suvestus duom., o jei ne - ištrinu jo vardą ir generuotą kodą. Nu nežinau, gal taip teisingiau.. ;D

Bet vis dar nesupratau, kodėl man mail() funkcija neveikia... :/

Redagavo v1per
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O dabar taip pasidariau..:

 

<?php
require_once('config.php');
include('register-form.php');
session_start();

//PASTAS

//CIA RANDOM KODA GENERUOJAM	
// pasw ilgis 
$n = 7; 
// pasw raides ir pan. 
$simboliai = '456abcd5sefgh8a9isd0jkl0fgm1njo3p0qr8stuv7wxyz1jf2hjkl3'; 
// generuoti ir grazint random pasw 
function ran($n, $simboliai) 
{ 
 $m = strlen($simboliai); 
 while($n--) 
 { 
$ran .= substr($simboliai,mt_rand()%$m,1); 
 } 
return $ran;
} 

$rdm = ran($n, $simboliai);	
//BAIGEM RAND KODA GENERUOT

echo $rdm;


$useris = $_POST['username'];

$sql = "INSERT INTO users(player_name, kodas) VALUES ('$useris', '$rdm')";
$uzklausa = mysql_query($sql);

if($uzklausa)
{
echo "Pradine SQL uklausa pavyko!";
}
else
{
die("Pradine uzklausa nepavyko");
}


$kam = $_POST['email'];
$tema = "Vartotojo patvirtinimas";
$turinys = "Sveikas(a),\n\n Tavo patvirtinimo kodas: $rdm";

mail($kam, $tema, $turinys);
?>


<html>
<body>
<form id="kodas" name="kodas" method="post">
 <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
  <th>Patvirtinimo kodas: </th>
  <td><input name="kodas" type="password" class="textfield" id="kodas" /></td>
  <br />
  <input type='submit' value='Patvirtinti' />
</tr>
 </table>	
 </body>
 </html>

<?php
$sql2 = "SELECT kodas FROM users WHERE player_name='$useris'";
$uzklausa2 = mysql_query($sql2);

if($uzklausa2)
{
echo "Antrine uzklausa pavyko";
}
else
{
die("Antrine uzklausa nepavyko");
}

if ($_POST['kodas']==$uzklausa2)
{


$qry = "INSERT INTO users(password,email,user_name,licence,energy,distance,plate,officer,vip,cash,date
_created) VALUES ('$password','$email','$username','320','50','0','!','0','0','50000','$date')";
$result = mysql_query($qry);
}
else
{
mysql_query("DELETE FROM users WHERE player_name='$useris'");
}


if($result) 
{
echo "Reg pavyko";
}
else
{
echo "Reg nepavyko...";
}
?>

 

Tik dabar nežinia kodėl meta error'ą, kad "Warning: mysql_query() [function.mysql-query]: Access denied for user 'apache'@'localhost' (using password: NO) in /home/ipp/domains/chemikas.lt/public_html/test/patvirtinimas.php on line 33".

Nors prisijungimo duomenys prie mysql TIKRAI geri... Nežinau gal kas su kokiais $_POST ar pan. blogai.. :/

 

EDIT: Labai suFAIL'INAU :) . Tiesiog pamiršau pradžioje mysql_connect ir t.t. parašyt... :D

 

Bet dabar, realiai lyg ir neregina iki galo... Rašo, kad tos užklausos pavyko, bet DB nieko naujo neatsiranda.. :D

Redagavo v1per
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, prirašiau, bet jokių error'ų nemeta... Lyg ir viskas tvarkoj, bet "reg pavyko" - nerašo... :)

 

<?php
require('config.php');
include('register-form.php');
session_start();


$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
	die('Nepavyko prisijungti prie mysql: ' . mysql_error());
}


$db = mysql_select_db(DB_DATABASE);
if(!$db) {
	die("neselectina DB");
}

//PASTAS

//CIA RANDOM KODA GENERUOJAM	
// pasw ilgis 
$n = 7; 
// pasw raides ir pan. 
$simboliai = '456abcd5sefgh8a9isd0jkl0fgm1njo3p0qr8stuv7wxyz1jf2hjkl3'; 
// generuoti ir grazint random pasw 
function ran($n, $simboliai) 
{ 
 $m = strlen($simboliai); 
 while($n--) 
 { 
$ran .= substr($simboliai,mt_rand()%$m,1); 
 } 
return $ran;
} 

$rdm = ran($n, $simboliai);	
//BAIGEM RAND KODA GENERUOT

echo $rdm;

$username = $_POST['username'];
$password = $_POST['password'];
$date = date('Y-m-d');

$sql = "INSERT INTO users(player_name, kodas) VALUES ('$username', '$rdm')";
$uzklausa = mysql_query($sql) or die(mysql_error());


$email = $_POST['email'];
$kam = $email;
$tema = "Vartotojo patvirtinimas";
$turinys = "Sveikas(a),\n\n Tavo patvirtinimo kodas: $rdm";

mail($kam, $tema, $turinys);


$sql2 = "SELECT kodas FROM users WHERE player_name='$username'";
$uzklausa2 = mysql_query($sql2) or die(mysql_error());


if ($_POST['kodas']==$uzklausa2)
{

//Create INSERT query
$qry = "INSERT INTO users(password,email,user_name,licence,energy,distance,plate,officer,vip,cash,date
_created) VALUES ('$password','$email','$username','320','50','0','!','0','0','50000','$date')";
$result = mysql_query($qry) or die(mysql_error());
}
else
{
mysql_query("DELETE FROM users WHERE player_name='$username'") or die(mysql_error());
}


if($result) 
{
echo "REG Pavyko";
}
else
{
echo "REG Nepavyko";
}

?>

<html>
<body>
<form id="kodas" name="kodas" method="post">
 <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
  <th>Patvirtinimo kodas: </th>
  <td><input name="kodas" type="password" class="textfield" id="kodas" /></td>
  <br />
  <input type='submit' value='Patvirtinti' />
</tr>
 </table>	
 </body>
 </html>

Redagavo v1per
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Teisingai sakai, tik, kad tokia situacija gaunasi... REG formoj gaunu visus POST - vykdau reg-exec, kur tikrinama ar nėra error'ų laukeliuose ir ar nesikartoja įrašai mysql'e. Tada jei viskas OK redirectinu į patvirtinimas-form, o iš jos action į patvirtinimas-exec... Bet gaunasi, kad patvirtinimas-exec jau nebeturiu POST duomenų mysql įrašam iš reg-formos. Nu ir t.t., bet nesigauna viskas normaliai per šituos failus, todėl nebent reikėtų patvirtinimo formoj paprašyt vartotojo, kad suvestų dar kartą duomenis ir dar papildomai kodą, kurį gaus el. paštu. Kol kas tik tokią išeitį matau... :)

Gal tau kokių minčių kyla? :)

 

EDIT: Viską padariau kaip aprašiau viršuj ir viskas beveik gerai, tik, kad nelabai įsivaizduoju kodėl kai insertinu į mysql random kodą, o vėliau tikrinu su įvestu į formą, rašo, jog "REG nepavyko..." :/

 

patvirtinimas-exec.php:

 

<?php
require('config.php');
session_start();

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
	die('Nepavyko prisijungti prie mysql: ' . mysql_error());
}


$db = mysql_select_db(DB_DATABASE);
if(!$db) {
	die("neselectina DB");
}

function clean($str) {
	$str = @trim($str);
	if(get_magic_quotes_gpc()) {
		$str = stripslashes($str);
	}
	return mysql_real_escape_string($str);
}


$eta = "@";

$username=mysql_real_escape_string($_POST['username']); 
$password=mysql_real_escape_string($_POST['password']);
$cpassword=mysql_real_escape_string($_POST['cpassword']);
$email=mysql_real_escape_string($_POST['email']);
$kodas=mysql_real_escape_string($_POST['kodas']);

//Array to store validation errors
$errmsg_arr = array();

//Validation error flag
$errflag = false;

//Input Validations
if($username == '') {
	$errmsg_arr[] = 'Vartotojo vardas neirasytas';
	$errflag = true;
}
if($mpassword == '') {
	$errmsg_arr[] = 'Slaptazodis neirasytas';
	$errflag = true;
}	
if($email == '') {
	$errmsg_arr[] = 'El.Pastas neirasytas';
	$errflag = true;
}


if (stristr($email, $eta) === FALSE) 
{ 
$errmsg_arr[] = 'El.Pasto formatas netinkamas';
$errflag = true; 
}


if($mcpassword == '') {
	$errmsg_arr[] = 'Patvirtinimo slaptazodis neirasytas';
	$errflag = true;
}
if( strcmp($password, $cpassword) != 0 ) {
	$errmsg_arr[] = 'Slaptazodziai nesutampa';
	$errflag = true;
}

//Check for duplicate login ID
if($login != '') 
{
	$qry = "SELECT * FROM users WHERE player_name='$username'";
	$result = mysql_query($qry);
	if($result) {
		if(mysql_num_rows($result) > 0) {
			$errmsg_arr[] = 'Vartotojo vardas/el.pastas jau naudojamas';
			$errflag = true;
		}
		@mysql_free_result($result);
	}
	else {
		die("Uzklausa nepavyko");
	}
}


$date = date('Y-m-d');


$sql2 = "SELECT kodas FROM users WHERE player_name='$username'";
$uzklausa2 = mysql_query($sql2) or die(mysql_error());


if ($_POST['kodas']==$uzklausa2)
{

//Create INSERT query
$qry = "INSERT INTO users(password,email,user_name,licence,energy,distance,plate,officer,vip,cash,date
_created) VALUES ('$password','$email','$username','320','50','0','!','0','0','50000','$date')";
$result = mysql_query($qry) or die(mysql_error());
}
else
{
mysql_query("DELETE FROM users WHERE player_name='$username'") or die(mysql_error());
}


if($result) 
{
echo "REG Pavyko";
}
else
{
echo "REG Nepavyko";
}

?>

Redagavo v1per
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Deja, bet kai kokia problema iškilo...

Dėl neaiškių priežasčių (man) nevykdomas "else" sakinys... ;)

Štai kodas:

 

<?php
require('config.php');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
	die('Nepavyko prisijungti prie mysql: ' . mysql_error());
}


$db = mysql_select_db(DB_DATABASE);
if(!$db) {
	die("neselectina DB");
}


$username=mysql_real_escape_string($_POST['username']); 
$kodas=mysql_real_escape_string($_POST['kodas']);

//Ar teisingai ivestas vardas

	$eilute = "SELECT player_name,kodas FROM users WHERE player_name='$username'";
	$uzklausa = mysql_query($eilute);
	$mysqlmasyvas = mysql_fetch_array($uzklausa) or die(mysql_error());

	if($username==$mysqlmasyvas['player_name'] && $kodas==$mysqlmasyvas['kodas']) 
	{
	echo "Registracija sekminga.";
	$q1 = mysql_query("UPDATE users SET patvirtintas='taip' WHERE player_name='$username'") or die(mysql_error());
	}
	else
	{
	echo "Regas nepavyko.";
	mysql_query("DELETE FROM users WHERE patvirtintas='ne'") or die(mysql_error());
	}
?>

 

Bet jokio error'o nemeta, tiesiog tuščias langas...

Redagavo v1per
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...