Pagina 1 din 2

Stergere cont dupa 24 ore in script inregistrare - logare

Scris: Dum Apr 01, 2012
de marosanadi
Salutare nu stiu daca am postat unde trebuia vreau sa ma ajuti si pe mine daca se poate cu o problema am luat scriptul de logare membri de la tine si l-am editat dupa cum mi-a trebuit mie insa mai am nevoie de o optiune si anume vreau ca dupa ce s-a logat cineva sa i se streaga contul dupa 24 de ore automat din baza de date mai exact sa se stearga campul nume din tabela utilizatori.

Astept un raspuns multumesc pentru timpul acordat!

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Dum Apr 01, 2012
de MarPlo
Incearca asa, in fisierul "class.Users.php", imediat sub aceste linii de cod:

Cod: Selectaţi tot

// deletes rows in the 'logattempt' table, older than 10 minutes
$sql = "DELETE FROM `logattempt` WHERE `dt`<$timexpir";
$this->sqlExecute($sql);
Adauga si pe acestea:

Cod: Selectaţi tot

// deletes rows in the 'users' table, older than 24 hours (24*3600 sec.)
$sql = "DELETE FROM `users` WHERE `dtreg`<".(time() - 86400);
$this->sqlExecute($sql);
 

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Dum Apr 01, 2012
de marosanadi
multumesc mult pentru raspuns

eu nu am fisierul "class.user.php" si am incercat sa pun acest cod in fiserul login.php dar nu functioneaza.

Codul din fiserul login.php este urmatorul:

Cod: Selectaţi tot

<?php
// De la https://marplo.net" target="_blank
/**
 * 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<3) {
      $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) {
 GLOBAL $conn;
  /* Adauga slashuri daca este necesar (pentru query) */
  if(!get_magic_quotes_gpc()) {
    $nume = addslashes($nume);
  }

  /* Verifica daca numle este in baza de date */
  $q = "SELECT nume, aprobat from `utilizatori` WHERE `nume`='$nume'";
  $result = mysql_query($q,$conn);
  if(!$result || (mysql_numrows($result)<1)) {
    return 1; //Indica nume neconfirmat
  }
    
    // 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 {
      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'])) {
    $_SESSION['nume'] = $_COOKIE['cookname'];
  }

  /* verifica daca exista in sesiune numele si parola setate */
  if(isset($_SESSION['nume'])) {
    /* Confirma daca numele si parola sunt valide */
    if(confirmUser($_SESSION['nume'])) { $result = 'logat'; }
    else {
      /* daca variabilele sunt incorecte, sterge sesiunea, utilizatorul nu este logat */
      unset($_SESSION['nume']);
      $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>Codul dumneavoastra este: <b>'.$_SESSION['nume'].'</b>.<br /> <a href="logare/logout.php">Iesire cod</a></center>';
  }
  else if($mesaj=='nelogat') {
    // Afiseaza formularul
    $result = '<script src="logare/verific.js"></script><!--/ https://marplo.net" target="_blank /-->
<form action="'. $_SERVER['PHP_SELF']. '" method="post" onsubmit="return regcheck(this)">
<table align="center" border="0" cellspacing="0" cellpadding="1" width="270" style="border:1px solid #888888; padding:1px;">
  <tr><th colspan="2" align="center">Introduceti codul pe care l-ati primit prin sms!</th></tr>
  <tr><td><label for="nume">Cod SMS:&nbsp; </label><input type="text" name="nume" size="14" maxlength="30" id="nume" /></td>
  <td align="center"> &nbsp; <input type="submit" name="sublogin" value="Trimite cod" /></td></tr>
</table>
</form>';
  }
  else {
    $result = '<table align="center" bordercolor="red" border="1" 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'])) {
  // 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']);
  

  /* verifica daca toate campurile au fost completate */
  if(!$_POST['nume']){
    $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;
  }

  else {
    // Verifica si adauga incercarea de logare in tabelul user_temp
    $continua = temp_user($_POST['nume']);

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

      /* Seteaza mesajul in cazul in care nume sau parola sunt incorecte */
      if($result==1) {
        $eroare='Codul <b>'. stripslashes($_POST['nume']). '</b> nu exista in baza de date.'. $inapoi. '<a href="logare/recuper.php">';
      }
      else if($result==0) {
        $eroare='Parola incorecta.'. $inapoi. '<br/>Daca ati uitat parola -> <a href="logare/recuper.php">Recuperare parola</a>';
      }
      else if($result==0) {
        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'];
        

        /** 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*1, "/");
          setcookie("cookpass", $_SESSION['parola'], time()+60*60*24*1, "/");
        }

        /* Auto redirect pentru a evita retrimiterea datelor cand da inapoi sau 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. a introduce codul. Puteti reincerca dupa <br /><b>'. $continua. '</b>'. $inapoi. '<br /><font color="blue"><a href="logare/recuper.php"></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();
?>

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Dum Apr 01, 2012
de MarPlo
Codul pe care l-ai pus e dintr-o versiune mai veche a script-ului de inregistrare logare. Daca-l folosesti pe acela, incearca asa:
Imediat sub aceste linii de cod:

Cod: Selectaţi tot

/* 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 aceste linii:

Cod: Selectaţi tot

// Sterge randurile din tabelul utilizatori mai vechi de 24 ore
$sql = "DELETE FROM `utilizatori` WHERE cast( `data` AS unsigned )<".(time() - 86400);
mysql_query($sql,$conn);
 
Sau daca nu merge, incearca cu acestea:

Cod: Selectaţi tot

// Sterge randurile din tabelul utilizatori mai vechi de 24 ore
$sql = "DELETE FROM `utilizatori` WHERE `data`<".(time() - 86400);
mysql_query($sql,$conn);
 

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Dum Apr 01, 2012
de marosanadi
Salut multumesc inca odata pentru tot efortul pe care l-ai facut am incercat ambele coduri si nu functioneaza am schimbat doar timpul pentru test sa nu astept 24 de ore dar nu a functionat in phpmyadmin din tabela nu s-a sterg campul nume si in continuare se poate loga.
multumesc oricum pentru toate raspunsurile si daca crezi ca ar mai fi o metoda as vrea sa o stiu .

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Dum Apr 01, 2012
de MarPlo
Nu stiu de ce nu merge, tocmai am testat pe un tabel de proba comanda:

Cod: Selectaţi tot

DELETE FROM `test` WHERE cast( `str` AS unsigned )<123456782
Si a sters toate randurile in care in coloana "str" era o valoare mai mica de 123456782.
- Alta metoda nu am.

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Dum Apr 01, 2012
de marosanadi
ai putea sa imi pui un pic codul care functioneaza la tine sau cum e construita baza de date
daca se poate desigur.

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Dum Apr 01, 2012
de MarPlo
Deci, din phpMyAdmin a functionat comanda de mai sus, pe un tabel de test in care coloana 'str' e de tip VARCHAR(32), restul nu conteaza fiindca doar asta e pusa in conditia WHERE.
Din cate stiu, la acel script de logare, coloana 'data' e la fel, VARCHAR(32).

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Lun Apr 02, 2012
de marosanadi
salutare din nou
m-am uitat mai atent si scriptul functioneaza perfect pentru tabela "user_temp" insa in tabela "utilizatori" eu nu am campul "data" si am incercat sa modific fiserul "creaza_tabel.php" si sa pun sa creeze si campul "data " insa dupa aceea nu se alimenteaza cu date. Am incercat sa fac asa :

Cod: Selectaţi tot

$sql = "SELECT `nume`, `data` FROM `user_temp` WHERE `nume`='$nume'";
  $result = mysql_query($sql1,$conn);
  if(!$result || (mysql_numrows($result)<1)) {
 $sql = "DELETE FROM `utilizatori` WHERE cast( `data` AS signed )<".(time() -5);
mysql_query($sql,$conn);
insa tot nu mi-a mers sterge numai din tabela user_temp si din utilizatori nu.

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Lun Apr 02, 2012
de MarPlo
Vezi ce tip e coloana 'data' in "utilizatori", sau in ce coloana din acest tabel e adaugata data inregistrarii, si ce tip are.
Poate tipul coloanei e problema.

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Lun Apr 02, 2012
de marosanadi
Acesta este codu dincreaza_tabel.php:

Cod: Selectaţi tot

<?php
header("Content-type: text/html; charset=utf-8");

include("bazadb.php");		// Include fisierul pt. conectare-selectare baza de date

// Creaza tabelul utilizatori
$sql = "CREATE TABLE `utilizatori` (nume VARCHAR(32), aprobat DECIMAL(1,0) DEFAULT 1, data VARCHAR(32),id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY) CHARACTER SET utf8 COLLATE utf8_general_ci"; 
if (mysql_query($sql))
    echo '<br /><br /><br /><center><h4>Tabelul <u>utilizatori</u> a fost creat.</h4></center><br />'; 
else 
  echo '<br /><br /><br /><center><h4>Tabelul <u>utilizatori</u> nu a putut fi creat deoarece - '. mysql_errno(). ' : '. mysql_error(). '</h4></center>'; 

// Creaza tabelul user_temp
$sql2 = "CREATE TABLE `user_temp` (nume VARCHAR(32), incercari DECIMAL(1,0) DEFAULT 0, ip VARCHAR(18), data VARCHAR(32), id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY) CHARACTER SET utf8 COLLATE utf8_general_ci"; 
if (mysql_query($sql2))
    echo '<br /><br /><br /><center><h4>Tabelul <u>user_temp</u> a fost creat.</h4></center><br />'; 
else 
  echo '<br /><br /><br /><center><h4>Tabelul <u>user_temp</u> nu a putut fi creat deoarece - '. mysql_errno(). ' : '. mysql_error(). '</h4></center>'; 
  
mysql_close(); 
?>
Timpul este VARCHAR(32) insa nu situ de ce nu se alimenteaza automat cu data si ramane null.

Stergere cont dupa 24 ore in script inregistrare - logar

Scris: Mar Apr 03, 2012
de MarPlo
Data e adaugata in coloana 'data' cand se face inregistrarea.
Nu stiu de ce adauga null, daca ai facut modificari, tu stii. Ai formula de Delete si cum trebuie aplicata, mai departe o poti testa, vezi unde merge, unde nu, pana functioneaza.
Scriptul e facut de mult, nu ma mai bag pe el, este deja o alta versiune mai noua.
Ca sa nu mai adauge null, poti face coloana cu aceste date: data VARCHAR(32) NOT NULL DEFAULT '0' .