Salt la conținut

SUBIECTE NOI
« 1 / 5 »
RSS
Telefonul Oppo a74 mi-a blocat ca...

A inviat Mudava

Vouchere de vacanta

Cand One United nu mai vand isi v...
 Mandolina feliat legume

Atestat consilier de siguranta

alarma auto Autowatch 346 RLI

Ce se intampla cu actualii tineri...
 Descifrare reteta

Zapp fix

Rulment pt diferential 4motion

Lipire filtru la baterie ikea
 Meserias nu mai vine sa termine l...

Soferii prinsi bauti sau drogati ...

geometrie autorulota

Sfat achiziție laptop ~4500 ...
 

Script de log in/log out si inregistrare user (varianta simpla)

- - - - -
  • Vă rugăm să vă autentificați pentru a răspunde
8 răspunsuri în acest subiect

#1
RpgBoy

RpgBoy

    Member

  • Grup: Members
  • Mesaje: 771
  • Înscris: 27.05.2011
Salut. Intr-un timp am avut nevoie de acest scrip, deci m-am gandit ca vor avea nevoie si altii.
Nu stiu sa explic, abea am invatat sa-l fac asa.. O sa incerc sa o spun simplu: asa trebuie facut si n-am alta idee, dar merge  Posted image
Necesita cunostinte: HTML, PHP si MySQL.

1) In PhpMyAdmin (eu asta am folosit) avem baza de date a_database, cu tabelul `users` (6 coloane):
id  ------------------- tip INT  -  action PRIMARY  -  A_I (auto_increment)
username  --------- tip VARCHAR (variable characters)  -  Lenght (30) (lungimea maxima acceptata)
password  ---------  tip VARCHAR  -  Lenght (32) (punem 32, deoarece parola o vom salva sub forma md5(), ce are de obicei 32 de caractere)
firstname  ----------  tip VARCHAR - Lenght (40)
lastname -----------  tip VARCHAR - Lenght (40)

*Nota: semnul ` este apostrof si " sunt ghilimele.

2) Salvam cu Notepad, Notepad++ sau orice alt editor text urmatoarele pagini:
index.php
loginform.inc.php
core.inc.php
connect.inc.php
logout.php
register.php
register_success.php

3) Acum va dau eu codul si va spun in ce fisiere le salvati Posted image
index.php:
<?php
require 'core.inc.php';
require 'connect.inc.php';
if (loggedin()) {
$firstname = getuserfield('firstname');
$lastname = getuserfield('lastname');
echo 'You\'re logged in, '.$firstname.' '.$lastname.'. <a href="logout.php">Log out</a><br>';
} else {
include 'loginform.inc.php';
}
?>

loginform.inc.php:
<?php
if (isset($_POST['username'])&&isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];

$password_hash = md5($password);

if (!empty($username)&&!empty($password)) {

$query = "SELECT `id` FROM `users` WHERE `username`='".mysql_real_escape_string($username)."' AND `password`='".mysql_real_escape_string($password_hash)."'";
if ($query_run = mysql_query($query)) {
$query_num_rows = mysql_num_rows($query_run);

if ($query_num_rows==0) {
echo 'Invalid username or password.';
} else if ($query_num_rows==1){
$user_id = mysql_result($query_run, 0, `id`);
$_SESSION['user_id']=$user_id;
header('Location: index.php');

}
}

} else {
echo 'You must enter username and password.';
}
}
?>
<br>
<form action="<?php echo $current_file; ?>" method="POST">
Username: <input type="text" name="username">
Password: <input type="password" name="password">
<input type="submit" value="Log in">
</form>
<br>
If you don't have an account, <a href="register.php">register now</a>.

core.inc.php:
<?php
if (isset($_POST['username'])&&isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];

$password_hash = md5($password);

if (!empty($username)&&!empty($password)) {

$query = "SELECT `id` FROM `users` WHERE `username`='".mysql_real_escape_string($username)."' AND `password`='".mysql_real_escape_string($password_hash)."'";
if ($query_run = mysql_query($query)) {
$query_num_rows = mysql_num_rows($query_run);

if ($query_num_rows==0) {
echo 'Invalid username or password.';
} else if ($query_num_rows==1){
$user_id = mysql_result($query_run, 0, `id`);
$_SESSION['user_id']=$user_id;
header('Location: index.php');

}
}

} else {
echo 'You must enter username and password.';
}
}
?>
<br>
<form action="<?php echo $current_file; ?>" method="POST">
Username: <input type="text" name="username">
Password: <input type="password" name="password">
<input type="submit" value="Log in">
</form>
<br>
If you don't have an account, <a href="register.php">register now</a>.

connect.inc.php:
<?php
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_pass = '';
$mysql_db = 'a_database';
if (!mysql_connect($mysql_host, $mysql_user, $mysql_pass)||!mysql_select_db($mysql_db)) {
die(mysql_error());
}
?>

logout.php:
<?php
require 'core.inc.php';
session_destroy();
header('Location: '.$http_referer);
?>

register.php:
<?php
require 'core.inc.php';
require 'connect.inc.php';
if (!loggedin()) {
if (isset($_POST['username'])&&
isset($_POST['password'])&&
isset($_POST['password_again'])&&
isset($_POST['firstname'])&&
isset($_POST['lastname'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$password_again = $_POST['password_again'];
$password_hash = md5($password);
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];

if (!empty($username)&&
!empty($password)&&
!empty($password_again)&&
!empty($firstname)&&
!empty($lastname)) {
if ($password!=$password_again) {
	 echo 'Passwords don\'t match.';
} else {

	 $query = "SELECT `username` FROM `users` WHERE `username`='$username'";
	 $query_run = mysql_query($query);
	
	 if (mysql_num_rows($query_run)==1) {
	 echo 'The username '.$username.' already exists.';
	 } else {
	 $query = "INSERT INTO `users` VALUES ('','".mysql_real_escape_string($username)."','".mysql_real_escape_string($password_hash)."','".mysql_real_escape_string($firstname)."','".mysql_real_escape_string($lastname)."')";
	 if ($query_run = mysql_query($query)) {
	 header('Location: register_success.php');
	 } else {
	 echo 'Sorry, we couldn\'t register you at this time. Please try again later.';
	 }
	 }

}
} else {
echo 'All fields are required.';
}
}

?>
<form action="register.php" method="POST">
Username:<br> <input type="text" name="username" value="<?php echo $username; ?>"><br><br>
Password:<br> <input type="password" name="password"><br><br>
Password again:<br> <input type="password" name="password_again"><br><br>
Firstname:<br> <input type="text" name="firstname" value="<?php echo $firstname; ?>"><br><br>
Lastname:<br> <input type="text" name="lastname" value="<?php echo $lastname; ?>"><br><br>
<input type="submit" value="Register">
</form>
<?php
} else if (loggedin()) {
echo 'You\'re already registered and logged in.';
}
?>

register_success.php:
<?php
echo 'Register done.<br>';
echo 'Go back to <a href="index.php">Home page</a>'
?>


Sper ca o sa va fie de folos, toate cele de mai sus au fost testate pe localhost si dispun de log in / log out, register si
retine id-ul userului din baza de date atunci cand e logat, asa ca il puteti folosi pentru a afisa continut diferit pentru fiecare utilizator.

De la incepatori, astept intrebari.
De la cunoscatori, asteptam sfaturi Posted image

Editat de RpgBoy, 22 ianuarie 2014 - 03:18.


#2
RpgBoy

RpgBoy

    Member

  • Grup: Members
  • Mesaje: 771
  • Înscris: 27.05.2011
Ok, l-am pus online : http://testesipracti...j.com/index.php

#3
w3room

w3room

    Senior Member

  • Grup: Senior Members
  • Mesaje: 2.085
  • Înscris: 22.09.2010
Salutare,

Nu vreau să te dezamăgesc, dar un script de login, înregistrare etc, poate avea şi o mie de linii de cod.

Dacă vrei să-mi asculţi sfatul şi să repari câte ceva în script cred că ar trebui să faci următoarele :

1. Nu folosi include, ci require_once. Vezi pe net care-i diferenţa.
2. isset foloseşti când vrei să verifici o variabilă dacă este definită sau nu, iar empty să vezi dacă o variabilă deja definită este goală sau nu. Dacă eu pun un spaţiu liber, variabila este definită, nu e goală, şi trec cu brio de verificările tale. Nu mai spun că practic tu ai cripta cu md5 un spaţiu gol.
3. În aproape jumătate din codul tău redefineşti variabile, gen din $_POST['ceva'] faci $ceva. Ştiu că vrei sa scapi de caracterele programării, dar dacă într-un script complex faci aşa ceva, pierzi mult timp iar la un moment dat o să-ţi prinzi şi urechile în cod.
4. După redirect - header('bla bla bla') adaugi exit();
5. Tehnologia a avansat. Nu mai folosi mysql, ci pdo.

Greşeli cred că mai sunt, n-o să stau să mă uit la fiecare linie în parte.

Şi să nu mi-o iei în nume de rău. Şi eu făceam mai demult prostii dintr-astea.

#4
genericuser01

genericuser01

    Member

  • Grup: Members
  • Mesaje: 290
  • Înscris: 01.09.2013
De acord cu cele scrise de w3room.

In plus:

As incepe direct invatand sa folosesc template-uri, cum ar fi Smarty. Template-urile separa foarte frumos logica de nivelul de prezentare. Adica nu mai faci combinatii de cod PHP cu marcaje HTML.
De acord cu PDO-ul. Si utilizeaza o clasa cu metode generale: insert, select, update. Sunt sigur ca sunt cateva deja scrise si deloc complicate.

Nu pot sublinia cat de important e exit; dupa header("");

Cand construiesti un query, foloseste sprintf:

$sql = sprintf("INSERT INTO `users` VALUES ('%s','%s','%s','%s')",
mysql_real_escape_string($username),
mysql_real_escape_string($password_hash),
mysql_real_escape_string($firstname),
mysql_real_escape_string($lastname));

#5
RpgBoy

RpgBoy

    Member

  • Grup: Members
  • Mesaje: 771
  • Înscris: 27.05.2011
1. Stiu care e diferenta :D
2. Posted image
3.codul e facut in ideea sa pot refolosi usor toate variabilele pe are le-am redefinit...

nu prea am inteles ce face sprintf, dar o sa mai caut...

Multumesc pentru sfaturi, acum sa vad si ce-i cu "PDO-ul".......

#6
RpgBoy

RpgBoy

    Member

  • Grup: Members
  • Mesaje: 771
  • Înscris: 27.05.2011
Ce trebuie sa fac ca sa nu te poti inregistra cu spatii (spacekey)?

#7
RpgBoy

RpgBoy

    Member

  • Grup: Members
  • Mesaje: 771
  • Înscris: 27.05.2011

Vizualizare mesajRpgBoy, pe 22 ianuarie 2014 - 12:55, a scris:

Ce trebuie sa fac ca sa nu te poti inregistra cu spatii (spacekey)?
Ok, deci am folosit str_replace("","","") intr-un if, ca sa nu las utilizatorii sa foloseasca spatii in "username" si "password". Daca parola nu are spatii, produc un md5() pe care il salvez in baza de date.
*Am testat in graba pe formularul de login ca sa verific daca ar merge, acum il fac si pentru register.php.
*Pe langa ce ati spus voi, mai am de adaugat ca trebuia sa folosesc un maxlenght in formularul "register.php" ca sa avem o limita de caractere, la fel ca in baza de date.
*Mai e o problema cu HTTP_REFERER (nu e definit) - o voi explica imediat ce o inteleg...

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

if (!empty($username)&&!empty($password)) {
if (str_replace(" ","","$username")&&
str_replace(" ","","$password")) {
$password_hash = md5($password);
} else {
echo 'You\'re not allowed to use spaces in those fields';
}
}
}
?>
<form action="replace.php" method="POST">
Username: <input type="text" name="username">
Password: <input type="password" name="password">
<input type="submit" value="Log in">
</form>


Editat de RpgBoy, 22 ianuarie 2014 - 13:45.


#8
RpgBoy

RpgBoy

    Member

  • Grup: Members
  • Mesaje: 771
  • Înscris: 27.05.2011
Ce-am facut pana la urma a fost sa adaug intre if (isset...) ... { si if (!empty...)..}} urmatorul cod:

if (stripos($username, " ") !== false || stripos($password, " ") !==false) {
echo "Please do not use spaces.";
} else {

Iar blocul else incepe cu if (!empty....) si se termina dupa 'All fields are required' , astfel:

register.php:
<?php
require 'core.inc.php';
require 'connect.inc.php';
if (!loggedin()) {
if (isset($_POST['username'])&&
isset($_POST['password'])&&
isset($_POST['password_again'])&&
isset($_POST['firstname'])&&
isset($_POST['lastname'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$password_again = $_POST['password_again'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
if (stripos($username, " ") !== false ||
stripos($password, " ") !==false) {
	echo "Please do not use spaces.";
} else {
$password_hash = md5($password);
if (!empty($username)&&
!empty($password)&&
!empty($password_again)&&
!empty($firstname)&&
!empty($lastname)) {
	if ($password!=$password_again) {
	 echo 'Passwords don\'t match.';
	} else {

	 $query = "SELECT `username` FROM `users` WHERE `username`='$username'";
	 $query_run = mysql_query($query);
	
	 if (mysql_num_rows($query_run)==1) {
	 echo 'The username '.$username.' already exists.';
	 } else {
	 $query = "INSERT INTO `users` VALUES ('','".mysql_real_escape_string($username)."','".mysql_real_escape_string($password_hash)."','".mysql_real_escape_string($firstname)."','".mysql_real_escape_string($lastname)."','')";
	 if ($query_run = mysql_query($query)) {
	 header('Location: register_success.php');
exit();
	 } else {
	 echo 'Sorry, we couldn\'t register you at this time. Please try again later.';
	 }
	 }

	}
} else {
	echo 'All fields are required.';
}
}
}

?>
<form action="register.php" method="POST">
Username:<br> <input type="text" name="username" value="<?php echo $username; ?>" maxlength="30"><br><br>
Password:<br> <input type="password" name="password" maxlength="32"><br><br>
Password again:<br> <input type="password" name="password_again" maxlength="32"><br><br>
Firstname:<br> <input type="text" name="firstname" value="<?php echo $firstname; ?>" maxlength="40"><br><br>
Lastname:<br> <input type="text" name="lastname" value="<?php echo $lastname; ?>" maxlength="40"><br><br>
<input type="submit" value="Register">
</form>
<?php
} else if (loggedin()) {
echo 'You\'re already registered and logged in.';
}
?>
<br><br>
<?php
echo 'Or go back to <a href="index.php">Home page</a>';
?>

*Am adaugat si maxlength="xx" in formularul html.

Editat de RpgBoy, 22 ianuarie 2014 - 16:26.


#9
w3room

w3room

    Senior Member

  • Grup: Senior Members
  • Mesaje: 2.085
  • Înscris: 22.09.2010
Salut.

Verificare numărului de caractere trebuie verificat în php. Faptul că ai pus maxlength="xx" e doar aşa, de ochii lumii.

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

Utilizatori activi: 1

0 membri, 1 vizitatori, 0 utilizatori anonimi

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate