problema sesiune logat

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
lookme
Mesaje:15

problema sesiune logat

Salutari tuturor .
Folosesc prima varianta de script login/register de pe marlopo
am reusit sa implementez partea cu edit profile insa chiar daca nu esti logat si accessezi adresa iti afiseaza datele am incercat cu diverse sseiuni si nu am reusit imi poate zice cineva unde anume sa modific

Cod: Selectaţi tot

<?php

include("bazadb.php");
$utilizator=mysql_real_escape_string($_GET['id']);
// Se verifica daca sunt date de la formular
if (isset($_POST['nume']) && isset($_POST['nume'])) {
// Se preiau datele
$id=trim($_POST['id']);
$nume=$_POST['nume'];
$prenume=$_POST['prenume'];
$email=$_POST['email'];
$sex=$_POST['sex'];
$day=$_POST['day'];
$month=$_POST['month'];
$year=$_POST['year'];
$locatie=$_POST['locatie'];
// Se face Update
$cerereSQL = "UPDATE `utilizatori` SET `id`='".$id."', `nume`='".$nume."', `prenume`='".$prenume."', `email`='".$email."', `sex`='".$sex."', `day`='".$day."', `month`='".$month."', `year`='".$year."', `locatie`='".$locatie."' WHERE `id`='".$id."' LIMIT 1";
mysql_query($cerereSQL) or die("NU se poate adauga!");
}
// Se face Select-ul pt. afisarea lor
$cerereSQL = 'SELECT * FROM utilizatori WHERE id="'.$_GET['id'].'"';
$rezultat = mysql_query($cerereSQL);
$num=mysql_num_rows($rezultat);
if ( $num <> 0 )
{
  $rand=mysql_fetch_array($rezultat);
  print '<form action="profil_actualizat.php?id='.$rand['id'].'" method="post">';
  print  '<left>';
  print  '<table  border="0">';
  print  '<tr > <th width="110"><div align="left"> Nr. inreg: </th> <th> <div align="left"><input name="id" readonly= "true" type="text" value="'.$rand['id'].'" > </div></th> ';
  print  '<tr > <th width="110"><div align="left"> Nume: </th> <th> <div align="left"><input name="nume" type="text" value="'.$rand['nume'].'" > </div></th> ';
  print  '<tr> <th width="110"><div align="left"> Prenume: </th> <th><div align="left"> <input name="prenume" type="text" value="'.$rand['prenume'].'" > </div> </th>';
  print  '<tr> <th width="110"><div align="left"> Data nasterii:</th> <th> <div align="left"><input type="text" name="data_nasterii"  id="data_nasterii" value="'.$rand['data_nasterii'].'" >  </div></th>';
  print  '<tr> <th width="110"><div align="left"> E-mail: </th> <th><div align="left"> <input name="email" type="text" value="'.$rand['email'].'" > </div></th>';
  print  '<tr> <th width="110"><div align="left"> Localitate: </th><th><div align="left"><input name="localitate" type="text" value="'.$rand['localitate'].'" >  </div></th>';
   print  '<tr> <th width="110"><div align="left"> Judet: </th> <th><div align="left"><select name="judet" id="judet">';
  print  '<tr> <th width="110"><div align="left"> Ocupatie: </th> <th><div align="left"><input name="ocupatie" type="text" value="'.$rand['ocupatie'].'" > </div></th>';

  print  '</tr>';
  print  '</table><br><br>';
  print  '<left>';
  print '<div align="right"><input type="Submit" value="Salvare"> </div>';
  print '</form>';


}

?>
multumes.

claUdiu Mesaje:313
1. Pune session_strat(); la inceputul fisieruluoi

2. La condita if ai asa: isset($_POST['nume') Bine inteles ca e adevarata pentru cacineva a completat acel camp. Daca nu-l completa, nu-ti mai mergea scriptul.

Deci, acolo la ($_POST['nume']) scrie numele sesiunii de ex: $_SESSION['numele aici']
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

lookme Mesaje:15
am incercat si nici o sansa sa reusesc ceva, poate iti dai seama unde este problema :) multumesc
acesta este si codu de login

Cod: Selectaţi tot

 <?php
// De la https://marplo.net
/**
 * Urmatoarea functie sterge randurile din tabelul user_temp mai vechi de 10 min
 * verifica daca utilizatorul a incercat de mai multe ori autentificarea
 * daca a incercat deja de 3 ori fara nume-parola confirmate
 * solicita incercarea unei noi autentificari dupa 10 min
 */
 function temp_user($nume) {
  GLOBAL $conn;
  $data = time();
  $data_expir = $data-601;
  $ip = $_SERVER['REMOTE_ADDR'];

  /* Sterge randurile din tabelul user_temp mai vechi de 10 min */
  $sql = "DELETE FROM `user_temp` WHERE `data`<$data_expir";
  mysql_query($sql,$conn);

  /* Adauga slashuri (pentru nume), daca PHP nu e setat sa adauge implicit */
  if(!get_magic_quotes_gpc()) { $nume = addslashes($nume); }

  /* Verifica daca numle este in tabelul user_temp */
  $sql1 = "SELECT `nume`, `incercari`, `data` FROM `user_temp` WHERE `nume`='$nume'";
  $result = mysql_query($sql1,$conn);

  if(!$result || (mysql_numrows($result)<1)) {
	$sql1 = "INSERT INTO `user_temp` (nume, ip, data) VALUES ('$nume', '$ip', '$data')";
	mysql_query($sql1,$conn);
	return 'continua'; 
  }
  else {
	/* Gaseste nr. incercari asociata numelui */
	$tbarray = mysql_fetch_array($result);
	$incercari = $tbarray['incercari'];
	if ($incercari<100) {
	  $incercari++;
	  // incrementeaza nr. incercari cu 1 si actualizeaza data
	  $sql1 = "UPDATE `user_temp` SET `incercari`='$incercari', `data`='$data' WHERE `nume`='$nume'";
	  $result = mysql_query($sql1);
	  return 'continua';
	}
	else if ($incercari>=3) {
	  $timp = 600 - ($data - $tbarray['data']);
	  return $timp;		// Indica nr. incercari depasit si returneaza timpul pt. calculare asteptare
	}
  }
}
 
/**
 * Urmatoarea functie verifica daca numele exista in baza de date
 * daca da, verifica daca parola se potriveste cu cea din baza de date
 * daca numele sau parola nu sunt corecte, returneaza eroarea (1 sau 2).
 * pentru nume si parola confirmate returneaza 0.
 */
function confirmUser($nume, $parola) {
 GLOBAL $conn;
  /* Adauga slashuri daca este necesar (pentru query) */
  if(!get_magic_quotes_gpc()) {
	$nume = addslashes($nume);
	$parola = addslashes($parola);
  }

  /* Verifica daca numle este in baza de date */
  $q = "SELECT parola, aprobat from `utilizatori` WHERE `nume`='$nume'";
  $result = mysql_query($q,$conn);
  if(!$result || (mysql_numrows($result)<1)) {
	return 1; //Indica nume neconfirmat
  }
  else {
	/* Gaseste parola asociata numelui */
	$dbarray = mysql_fetch_array($result);
	$dbarray['parola']  = stripslashes($dbarray['parola']);
	
	// Verifica daca utilizatorul este confirmat (aprobat 1)
	if ($dbarray['aprobat']==0) {
	  return 3;	// Inregistrarea nu a fost aprobata
	}
	/* Verifica daca parola scrisa este aceeasi cu cea gasita in baza de date */
	else if($parola==$dbarray['parola']) {
	  return 0; // nume si parola confirmate
	}
	else {
	  return 2; // indica parola neconfirmata
	}
  }
}

/**
 * Verifica autentificarea prin sesiune - daca utilizatorul este deja autentificat
 * verifica daca utilizatorul a fost memorat in cookie 
 * adaug o sesiune ca utilizatoru este logat
 * Apeleaza functia ce verifica daca datele din sesiune sunt corecte cu cele din baza de date
 * returneaza TRUE daca utilizatorul este autentificat.
 */
function checkLogin() {
  /* verifica daca utilizatorul este memorat in cookie */
  if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass'])) {
	$_SESSION['nume'] = $_COOKIE['cookname'];
	$_SESSION['parola'] = $_COOKIE['cookpass'];
  }

  /* verifica daca exista in sesiune numele si parola setate */
  if(isset($_SESSION['nume']) && isset($_SESSION['parola'])) {
	/* Confirma daca numele si parola sunt valide */
	if(confirmUser($_SESSION['nume'], $_SESSION['parola'])===0) { $result = 'logat'; }
	else {
	  /* daca variabilele sunt incorecte, sterge sesiunea, utilizatorul nu este logat */
	  unset($_SESSION['nume']);
	  unset($_SESSION['parola']);
	  $result = 'nelogat';
	}
	return $result;
  }
  /* Utilizatorul nu este logat */
  else { return 'nelogat'; }
}

/**
 * Determina daca va fi sau nu afisat formularul de autentificare
 * arata ca utilizatorul este autentificat, bazat pe variabilele din sesiune, sau mesajele de eroare
 */
function displayLogin($mesaj) {
  if(isset($_SESSION['nume']) && $mesaj=='logat') {
	$result = '<center>Bine ai venit <b></b>, esti autentificat.<br />
<a href = "profile.php?profile='.$_SESSION['nume'].'">'.$_SESSION['nume'].'</a>
 <a href="logout.php">Iesire</a></center>';

  }
  else if($mesaj=='nelogat') {
	// Afiseaza formularul
	$result = '<script src="verific.js"></script><!--/ https://marplo.net /-->
<form action="'. $_SERVER['PHP_SELF']. '" method="post" onsubmit="return regcheck(this)">

<table cellspacing="0" cellpadding="0" align="right" class="td">
  <tr>
    <td>Email adress:</td>
    <td>Password:</td>
    <td></td>
</tr>
<tr>
    <td><div class="input-container"><input type="text" name="nume"  maxlength="30" id="nume" /></div></td>
    <td><div class="input-container"><input type="password" name="pass"  maxlength="30" id="pass" /></div></td>
    <td><input type="submit" class="greenButton2" name="sublogin" value="Login" /></td>
  </tr>
  <tr>
    <td><input style="width:3px;height:3px;" type="checkbox" name="remember" checked="checked" />Tine-ma minte</td>
    <td><a href="recuper.php">Recuperare parola</a></td>
    <td></td>
  </tr>


</form>';
  }
  else {
	$result = '<table align="right" bordercolor="red" border=0" cellspacing="0" cellpadding="2" width="270"><tr><td align="center">'. $mesaj. '</td></tr></table>';
  }
  return $result;
}

/**
 * Verifica daca numele si parola au fost trimise prin formularul de logare
 * daca da, verifica lungimea numelui si parolei, 
 * apoi datele in baza de date si creaza sesiunea
 */
if(isset($_POST['sublogin']) && isset($_POST['nume']) && isset($_POST['pass'])) {
  // Retinerea adresei (preluata din form) pt. revenire la pagina anterioara
  $inapoi = '<br /><b><a href="#" onClick="history.back()">Reveniti</a></b> la pagina anterioara.';

  // Elimina spatiile din marginile numelui si parolei
  $_POST['nume'] = trim($_POST['nume']);
  $_POST['pass'] = trim($_POST['pass']);

  /* verifica daca toate campurile au fost completate */
  if(!$_POST['nume'] || !$_POST['pass']){
	$eroare='Nu ati completat toate campurile'. $inapoi;
  }

  /* verifica lungimea numelui */
  else if(strlen($_POST['nume'])<3 || strlen($_POST['nume'])>32) {
	$eroare='Numele trebuie sa contina intre 3 si 32 caractere'. $inapoi;
  }

  /* verifica lungimea parolei */
  else if(strlen($_POST['pass'])<7 || strlen($_POST['pass'])>18) {
	$eroare='Parola trebuie sa contina intre 7 si 18 caractere.'. $inapoi;
  }
  else {
	// Verifica si adauga incercarea de logare in tabelul user_temp
	$continua = temp_user($_POST['nume']);

	if ($continua=='continua') {
	  $md5pass = md5($_POST['pass']);		// Cripteaza parola
	  /* verifica daca numele este in baza de date si parola este corecta */
	  $result = confirmUser($_POST['nume'], $md5pass);

	  /* Seteaza mesajul in cazul in care nume sau parola sunt incorecte */
	  if($result==1) {
		$eroare='Numele <b>'. stripslashes($_POST['nume']). '</b> nu este inregistrat.'. $inapoi. '<br />Daca ati uitat numele -> <a href="recuper.php">Recuperare nume</a>';
	  }
	  else if($result==2) {
		$eroare='Parola incorecta.'. $inapoi. '<br/>Daca ati uitat parola -> <a href="logare/recuper.php">Recuperare parola</a>';
	  }
	  else if($result==3) {
		die('<center><br /><br /><font color="red"><h3>Inregistrarea pt. <u>'. stripslashes($_POST['nume']). '</u> este neconfirmata.</h3></font> Verificati contul de e-mail folosit la inregistrare (inclusiv in Spamm) pt. mesajul cu link-ul de confirmare.<br /><br /> Daca doriti sa solicitati un nou e-mail de confirmare, <a href="logare/recuper.php?confirm=1">Click Aici</a></center>');
	  }
	  else {
		/* daca numele si parola sunt corecte, inregistreaza variabilele in sesiune */
		$_SESSION['nume'] = $_POST['nume'];
		$_SESSION['parola'] = $md5pass;

		/** Aici utilizatorul alege sa fie retinute datele pt.urmatoarea vizita
		* seteaza doua cookie-uri, unul care pastreaza numele si al doilea pt. parola
		* acestea expira in 100 de zile */
 if(isset($_POST['remember'])){
      setcookie("cookname", $_SESSION['nume'], time()+60*60*24*100, "/");
      setcookie("cookpass", $_SESSION['parola'], time()+60*60*24*100, "/");
   } 


   /* Auto redirect pentru a evita retrimiterea datelor la refresh */
   echo '<meta http-equiv="Refresh" content="1;url='.$_SERVER['PHP_SELF'].'">';
   exit;
	  }
	}
	else {
	  // Seteaza mesajul cu timpul ramas pana la o noua incercare de autentificare
	  $continua = floor($continua/60). ' minute, '. ($continua%60). ' secunde';
	  $eroare = 'Ati depasit nr. incercari permise pt. autentificare. Puteti reincerca dupa <br /><b>'. $continua. '</b>'. $inapoi. '<br /><font color="blue">Daca ati uitat parola -> <a href="logare/recuper.php">Recuperare parola</a></font>';
	}
  }
}

/* Seteaza variabila logged_in, care poate fi folosita in site pt. afisearea 
 * valoarea ei reprezinta ce va afisa in pagina, prin apelarea functiei displayLogin()
 * Daca exista vreo eroare, apeleaza functia cu acea eroare, altfel, o apeleaza cu rezultatul altei functii checkLogin(), care verifica autentificarea */
$logged_in = (isset($eroare)) ? displayLogin($eroare) : displayLogin(checkLogin());

@mysql_close();
?>
 

MarPlo Mesaje:4343
Ca sa execute /afiseze codul pe care-l vrei doar daca uilizatorul e logat, baga tot acel cod intre acoladele unui if() care verifica daca exista sesiunea de logare
In felul urmator:

Cod: Selectaţi tot

if(isses($_SESSION['nume'])) {
  // tot codul ce trebuie executat cand user-ul e logat
}
else echo 'Ne-logat'; 
- Mai departe, aplici asta cum stii.

lookme Mesaje:15
mersi am reusit

Subiecte similare