Script de log in/log out si inregistrare user (varianta simpla)
Last Updated: Jan 22 2014 17:47, Started by
RpgBoy
, Jan 22 2014 03:15
·
0
#1
Posted 22 January 2014 - 03:15
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 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 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 Edited by RpgBoy, 22 January 2014 - 03:18. |
#2
Posted 22 January 2014 - 04:10
Ok, l-am pus online : http://testesipracti...j.com/index.php
|
#3
Posted 22 January 2014 - 05:50
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
Posted 22 January 2014 - 07:44
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
Posted 22 January 2014 - 11:49
1. Stiu care e diferenta
2. 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
Posted 22 January 2014 - 12:55
Ce trebuie sa fac ca sa nu te poti inregistra cu spatii (spacekey)?
|
#7
Posted 22 January 2014 - 13:43
RpgBoy, on 22 ianuarie 2014 - 12:55, said:
Ce trebuie sa fac ca sa nu te poti inregistra cu spatii (spacekey)? *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> Edited by RpgBoy, 22 January 2014 - 13:45. |
#8
Posted 22 January 2014 - 16:12
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. Edited by RpgBoy, 22 January 2014 - 16:26. |
#9
Posted 22 January 2014 - 17:47
Salut.
Verificare numărului de caractere trebuie verificat în php. Faptul că ai pus maxlength="xx" e doar aşa, de ochii lumii. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users