Script inregistrare autentificare versiunea veche pt PHP 5.5

Aici prezentati probleme, intrebari, sau orice subiecte legate de scripturi si tutoriale de pe site.
dim
Mesaje:61

Script inregistrare autentificare versiunea veche pt PHP 5.5

Salut am incercat toate variantele pe care le ai pe site de scriptuei pt inregistrare_autentificare, dar ultimel doua mi se par putin cam complicate pt inceput si imi e destu de greu sa le inteleg asa ca am ramas la prima variant doar ca avand instalat php 5.5 apar problemele.
crezi ca se pare sa modific aceasta variant de script sa mearga si pe php 5.5
variantele noi functioneaza dupa modificarile facute pt conectare la baza de date da nu ma incanta ca sunt prea multe functi si imi este greu sa le urmaresc si sa le inteleg asa ca as prefer sa o iau cu inceputu prin a intelege o variant mult mai simpla si dupa cea cu autentificari prin yahoo sau facebook si daca tot a venit vb de conecatre prin facebook la varianta avansata imi da eroare ceva de genu:

Cod: Selectaţi tot

Invalid App ID: APP_ID
Multumec mult pt ajutorul de pana acum si sper sa nu te deranjez cu prea multe intrebari

MarPlo Mesaje:4343
Salut
Nu ma mai ocup de modificari la script-urile de pe site. Au fost create in timpul invatarii, ca materiale de exersare.
Pentru Facebook, trebuie un ID de Developer inregistrat in contul de pe site-ul lor, cred ca sunt mai multe detalii in documentatia de folosire.

dim Mesaje:61
Salut

M-am uita pe forum si nu am gasit nimic legat problem aparute la inregistrare utilizator cand nu tine cont de IP
In scriptu simplu de inregistrare al tau daca am pus o alta valoare diferita de 1 la " private $nr_count = 1; " in momentu inregistrari nu imi intoadce nici o eroare si nici un mesaj ca ar fi fost adaugat utilizatoru si nici in baza de date nu pune nimic
ai idee cam care ar fi problema

MarPlo Mesaje:4343
Nu stiu sigur care ar fi problema, dar incearca asa, in functia getReg() inlocuieste acest cod:

Cod: Selectaţi tot

else {
  // apeleaza metoda addUser() care adauga noul cont in baza de date si creaza sesiunea de inregistrare
  $re = $this->addUser($ar_post['nume'], $pass, trim($ar_post['email']));
  $_SESSION['registered'] = $re;
}
Cu acesta:

Cod: Selectaţi tot

if($re === false) {
  // apeleaza metoda addUser() care adauga noul cont in baza de date si creaza sesiunea de inregistrare
  $re = $this->addUser($ar_post['nume'], $pass, trim($ar_post['email']));
  $_SESSION['registered'] = $re;
} 

dim Mesaje:61
Salut, mai am o problema, daca modific " protected $nr_logs = 1;" si pun alta valoare imi apare :

Cod: Selectaţi tot

Logged Out
 Exista inca o Autentificare cu acest cont.
 Va puteti re-autentifica.
Problema e ca imi apare din prima fara sa mai fiu logat in alta parte.
Si daca tot apare mesaju sa il si delogeze automat.
multumesc

MarPlo Mesaje:4343
Salut
Valoarea de la $nr_logs e numarul de logari permise pe un nume in acelasi timp. Nu mai stiu exact logica lui, cred ca asta se intampla dupa o logare anterioara care ramane inregistrata in tabelul "useron" daca intre timp nu s-a mai logat alt nume, moment in care scriptul reactualizeaza acel tabel.
Valoarea 1 de la $nr_logs ar trebui lasata asa, daca adaugi alt numar si nu vrei sa mai apara acel mesaj, modifica valoarea 1 si in __construct(), unde e acest cod (corespunzator cu numarul nou adauat).

Cod: Selectaţi tot

if($this->nr_logs>1) $this->logOut(2);
 

dim Mesaje:61
Salut
Daca valoarea de la $nr_logs e numarul de logari permise pe un nume in acelasi timp asta inseamna ca :
$nr_logs = 1 ar trebui sa permita o singura logate
$nr_logs = 2 ar trebui sa permita mai multe logari din ce inteleg de la tine

Problema la mine este exact pe dos cand e 1 permite mai multe logari iar cand e 2 nici o logare.
Si daca schimb in ambele parti rezultatul este acelasi.

Crezi ca daca descarc si variant aia cu autentificare prin facebook pot sa fac o comparative si sa gasesc eroarea sau sunt complet diferite??

MarPlo Mesaje:4343
Logica facut e asa:
- Se logheaza cu Nume pe un browser - functioneaza.
- Se autentifica acelasi Nume, dar de pe alt browser - merge, il lasa logat, dar il deconecteaza pe acest Nume de pe primul browser, afisandu-i acel mesaj cand deschide alta pagina sau da refresh.

Deci in principiu lasa posibilitatea de autentificare, dar pastreaza doar o logare cu acelasi nume, pe ultimul; il deconecteaza pe primul si ii afiseaza mesaj cand acceseaza vreo pagina fiind logat, fiindca acea sesiune e inlocuita in tabelul "useron" de ultima logare.

Si varianta cu Facebook are proprietatea $nr_logs in class.Users.php, cu acelasi principiu. Poti incerca sa vezi cum merge.

dim Mesaje:61
Am inteles logica si functioneaza, este ok
Mai am o problema in momentu in care ma autentific si logare se face cu succes nu imi reseteaza numaru de incercari si daca ma deconectez si ma conectez de mai mult de 3 ori nu ma mai lasa trebuie sa astept cele 10 minute
ma gandeam daca se paote reseta numaru de incercari in momentul in care logarea se face cu succes???

MarPlo Mesaje:4343
Nu stiu de ce ar vrea cineva sa se logheze de 3 ori in 10 minute, oricum, daca vrei sa se reseteze numarul de incercari dupa autentificare, sterge randul cu acel nume din tabelul "user_temp" dupa ce se creaza sesiunea de logare.
Adica, in metoda confirmUser(), imediat dupa linia cu acest cod:

Cod: Selectaţi tot

if(!isset($_SESSION['datavisit'])) $_SESSION['datavisit'] = $dbarray['datavisit'];
Inainte de "return 0;", Se adug acesta:

Cod: Selectaţi tot

// Sterge randurile din tabelul user_temp cu numele logat
$sql = "DELETE FROM `user_temp` WHERE `nume`='". $_SESSION['nume'] ."'";
$this->conn->query($sql);
 

dim Mesaje:61
Salut mai revenit cu o problema
In momentu in care inregistrez primu utilizator in baza de date si incerc sa inregistrez cel de al doilea utilizator cu acelasi nume sau cu acelasi mail imi da eroare asa cum este normal ca numele sau mailu exista in baza de date
Dar daca mai adaug alti utilizatori la acestia nu mai apare eroarea ca ar exista in baza de date
daor la primu apare. Si chiar nu inteleg care este motivu.

- Cred ca problema e legata de acea parte cu ip ca e setat sa permita inregistrarea de la acelasi ip a mai multorutilizatori.
Codul de verificare pare asta da nu vad nici o eroare.

Cod: Selectaţi tot

      $sql = "SELECT `nume`, `email`, `ip_reg`, `ip_visit` FROM `users` WHERE `nume`='$nume' OR `email`='$email' OR `ip_reg`='$this->ip' OR `ip_visit`='$this->ip' LIMIT 1";
      $result = $this->conn->query($sql);

      // verifica daca nume si email exista deja in BD
      if($result->num_rows>0) {
        $rand = $result->fetch_assoc();
        $rand = array_map("stripslashes", $rand);

        // Seteaza eroare daca numele, email-ul, ip_reg sau ip_visit e deja inregistrat
        if(strcasecmp($rand['nume'], $nume)==0) $re = $this->strEror("Numele: <u>$nume</u> este deja inregistrat, va rog scrieti altul.");
        else if (strcasecmp($rand['email'], $email)==0) $re = $this->strEror("Email-ul: <u>$email</u> e deja folosit pentru inregistrare");
        else if ($this->nr_count==1 && (strcasecmp($rand['ip_reg'], $this->ip)==0 || strcasecmp($rand['ip_visit'], $this->ip)==0)) $re = $this->strEror('IP-ul dv. are deja o inregistrare facuta.<br />Daca credeti ca e o eroare, Contactati Administratorul');
      }
      else {
        // apeleaza metoda addUser() care adauga noul cont in baza de date si creaza sesiunea de inregistrare
        $re = $this->addUser($ar_post['nume'], $pass, trim($ar_post['email']));
        $_SESSION['registered'] = $re;
      }
    }
    $this->conn->close();
 

MarPlo Mesaje:4343
Am observat problema, cauza e ca sirul $sql selecteaza conditia de IP si cand nu e necesara verificarea lui.
Rezolvarea e sa fie inlocuit codul (in functia getReg() din "class.LogareReg.php"):

Cod: Selectaţi tot

$sql = "SELECT `nume`, `email`, `ip_reg`, `ip_visit` FROM `users` WHERE `nume`='$nume' OR `email`='$email' OR `ip_reg`='$this->ip' OR `ip_visit`='$this->ip' LIMIT 1";
Cu acesta:

Cod: Selectaţi tot

// verifica si IP-ul doar daca $nr_count e 1
$w_ip = ($this->nr_count == 1) ? " OR `ip_reg`='$this->ip' OR `ip_visit`='$this->ip'" : '';
$sql = "SELECT `nume`, `email`, `ip_reg`, `ip_visit` FROM `users` WHERE `nume`='$nume' OR `email`='$email' $w_ip LIMIT 1";
$result = $this->conn->query($sql);
 
- Sau descarca iar script-ul de pe site.