Meghívós loginrendszer - R.E. Login v2.0

R.E. Login v2.0

Az R.E. Login újabb verziója, vadi új objektum orientált motorral. Megőrizve az elődje funkcióit, de némileg kibővítve azt, és lehetőséget biztosítva további fejlesztések egyszerűbb elvégzésére. Ebből kifolyólag valószínű lesz is folytatás. Addig is köszöntsük szeretettel új barátunkat, az R.E. Login v2.0 -át.
R.E. Login v2.0.3 letöltése
Kövesd a projektet és keresd a legfrissebb verziókat a:
https://sourceforge.net/projects/relogin/ oldalon.


Figyelem: Ez a rendszer már elavult. Hibákat tartalmazhat és az új PHP verziókkal nem teljesen kompatibilis. Az init.php-be beillesztve az alább írt sorok egyikét a hibaüzenetek eltüntethetők, de a login használata csak saját felelősségre javasolt.

error_reporting(E_ALL | E_STRICT); // E_STRICT hibaüzenetek elrejtése
vagy
error_reporting(0); //minden hibaüzenet elrejtése

Kapcsolódó oldalak

Szerkesztve: 2010.04.04. 23:02
A loginban sikerült felfedezni pár hibát. Ezek javítva lettek. A hibák a következők voltak:

  • Profil módosítás fájl kimaradt a beállításokból, így csak changeprofile.php néven működött
  • Ugyanezen okból adminnak más profiljában is a saját profiljára mutató link volt.
  • Apró elírás a telepítőben. STMP volt SMTP helyett az egyik megjegyzésben
  • A telepítő nem ellenőrizte, hogy az SMTP host és port meg van-e adva. Sem az e-mail címeket.

Továbbá egy kiegészítés:

  • Most már opcionális az SMTP használat is. ha netán valakinek nem lenne semmilyen SMTP szerver használatára lehetősége, akkor SMTP nélkül küldi a leveleket.

Más nem változott. Ha bárki hibát észlel, kérem szóljon.
Köszönet tbence-nek az észrevételeiért és hibajelentésért.

A Login funkciói nagy vonalakban:

  • Regisztráció ( Opcionális meghívó mód, regisztráció blokkolása )
  • Beléptetés
  • Meghívó küldés
  • Privát üzenet küldés ( Kimenő, bejövő postafiók, Hír küldés )
  • Felhasználói profil
  • Gravatar és MKAvatar használat
  • Admin felület ( Tulajdonos és Admin rangot megkülönböztetve )
  • Bővíthető ranglista
  • Felhasználó lista
  • Online lista
  • Felhasználó keresése usernév szerint
  • Elfelejtett jelszó funkció

Figyelem! Ez nem egy portálrendszer, hanem loginrendszer. Bármily sokat is tud.
Így a PHP alapszintű ismerete elengedhetetlen a használatához.
Vagy legalább a kellő kitartás és hajlandóság a tanulásra.

R.E. Login v2.0 - Rendszerigény
Mindenképpen szükség van egy webszerverre, amin lehetőség van
PHP 5.0, valamint MySQL 5.0 használatára.
PHP GD támogatás szükséges
SMTP szerver ( Internetszolgáltató, vagy a tárhelyszolgáltató adja )

Ma már az ingyenes tárhelyek is átálltak 5 -ös verzióra.
Minden esetre, akinek fontos, hogy tárhelyével minél kevesebb
probléma legyen, az ruházzon be egy fizetett tárhelybe.
Azokon már szinte mindenhol PHP 5 vagy annál magasabb verzió van.

R.E. Login v2.0 - Telepítési útmutató

  • Tömörítsd ki az RELogin-v2.0.zip -et.

  • A tartalmát másold fel a webtárhelyedre!

  • Nyisd meg böngészőben a "relogin2" mappában levő "install" mappát.
    Töltsd ki az adatokat, majd kattints alul a küldés gombra.
    Megjegyzés: UTF8 karakterkódoláson kívül más is megadható a telepítőben,
    Ekkor viszont minden fájlt külön el kell menteni a megadott
    karakterkódolással. Így ajánlott hagyni UTF8 -nak, és
    a weboldalon is mindenhol ezt használni.

  • Ha mindent jól csináltál, a telepítés sikeres volt.

R.E. Login v2.0 - Használatba vétel
Hozz létre egy "init.php" nevű fájlt a "relogin2" mappa mellett

Írd bele a következőt:

<?php
ob_start();

require_once('relogin2/classes/System.class.php');
$system = System::getInstance();
header('Content-type: text/html; charset='.Config::DBCHARSET);
?>

A fenti kódrészletet közvetlenül a fájl elejére írd. Se szóköz,
se újsor ne legyen előtte.

Az összes olyan fájlban, amiben a login bármely modulját használni szeretnéd,
ezt az "init.php" -t kell beilleszteni a következő módon szintén a fájl elejére:

<?php
require_once 'init.php';
?>

Ehhez hasonlóan kell a modulokat is beilleszteni, de már bárhova lehet
a fenti kód után. Ezek már a relogin2 mappában lesznek.
Tehát így fog kinézni a kód:

<?php
require_once 'relogin2/login.php';
?>

A fenti kód hatására megjelenik a beléptető űrlap.
Minden szükséges modul a relogin2 mappában található.
Egyik fájl sem érhető el közvetlenül. Csak az imént leírt módon beillesztve
a fájlokat egy új .php fájlba, ahol előtte be volt illesztve az init.php

További modulok helye, és funkciója:

  • relogin2/admin.php - Adminisztrációs felület
  • relogin2/changeprofile.php - Profil módosítás
  • relogin2/forgotpass.php - Elfelejtett jelszó funkció
  • relogin2/invite.php - Meghívó küldés
  • relogin2/login.php - Bejelentkező űrlap
  • relogin2/logout.php - Kijelentkező
  • relogin2/msginbox.php - Bejövő üzenetek
  • relogin2/msgoutbox.php - Kimenő üzenetek
  • relogin2/msgread.php - Üzenet olvasás
  • relogin2/msgwrite.php - Új üzenet írása
  • relogin2/news.php - Hírek listája
  • relogin2/onlinelist.php - Online lista
  • relogin2/profile.php - Profil megtekintése
  • relogin2/register.php - Regisztrációs űrlap
  • relogin2/search.php - Felhasználó kereső ( Még csak usernévre )
  • relogin2/userlist.php - Felhasználó lista

A login támogatja a gravatar és mkavatar használatát. Ha nem tudod mi az,
nézd meg az alábbi két weboldalt:
http://en.gravatar.com/
http://www.mkavatar.hu/

Sreenshotok:
Profil módosításBejövő üzenetekProfilRegisztrációUserlistaAdmin


További ismertető későbbiekben még lehet, hogy várható. Addig is a felmerülő kérdéseket szívesen megválaszolom.



Szerkesztve: 2010.06.27. 16:20
Találtam egy hibát a loginban. Mégpedig a relogin2/classes/ForgotPass.class.php végén az errors metódusnál duplán volt deklarálva a metódus static tulajdonsága. Ez nem tűnt fel eddig, de most átnéztem a logint, és hibát adott az elfelejtett jelszó funkciónál. Lehet, hogy nem mindenhol ad hibaüzenetet, habár szintaktikai hiba. Ezért javaslom a javítását. Feltöltöttem a módosított logint, de nyilván nem akar ezért senki letölteni újra mindent. Tehát a fent említett fájlban a következő kódot

        public static static function errors()
        {
                return self::$errors;
        }

kell lecserélni erre

        public static function errors()
        {
                return self::$errors;
        }

Szerkesztve: 2011. május 14.23:36
Gyakori probléma a captcha kép ( ellenőrző kód ) megjelenésének hibája ingyenes tárhelyeken. Ha valaki szembekerül ezzel, akkor javaslom elolvasni a következő hozzászólásomat: Link
Így a captcha kiszedhető. Csökkentett biztonsággal, de működhet a login.

Szerkesztve: 2011. június 7. 21:10
Letölthető a R.E. Login v2.0.1. ez egy javított változat csak, ami a különböző ingyenes tárhelyeken hibásan kiszámított url-ekre ad helyesebb és rugalmasabb megoldást. Mostantól működik a Captcha is atw.hu-n, freeweb.hu-n és 000webhost.com-on is. Ami hibájának oka egy részt az útvonalszámítás volt. Kivéve freewebet, ahol más jellegű probléma volt, de addig is, amíg azt megoldják ( ha sikerül ), sikeresen áthidaltam a hibát. Javítottam továbbá az e-mail aktiváltság ellenőrzést is. Ami valóban hibás volt. Így soha nem kellett aktiválni az emaileket akkor sem, ha az be volt állítva. A fent említett 3 tárhelyen teszteltem is a logint. Ezeken a tárhelyeken az url-t illető helyes beállítás a következő:

Minden esetben a telepítőben „weblap gyökérre” ( vagy a relogin2/classes/Config.class.php-ben levő PATH_BASE konstansra) vonatkoznak a beállítások, ami 4 féle képpen adható meg:

  • Üresen hagyva: Ekkor automatikusan számítja a login az url-t, ha tudja. Pl. freeweben működik.

  • / jellel kezdve, weblap gyökérkönyvtárától számítva a loginra épülő weblap url-je. Pl.: /weblapom ( Ez az ajánlott )

  • http-vel vagy https-el kezdve. Pl.: https://domain.hu/weblapom

  • / jel nélkül kezdve. Pl.: weblapom
    Ebben az esetben az automatikusan számolt útvonal megmarad. Csak az útvonal elé téve a megadott mappát, korrigálja azt. ( pl. atw.hu -n használható így )

Az említett 3 tárhelyen a beállítások:

  • atw.hu: userneved.atw.hu esetén vagy csak "userneved" -et írod be per jel nélkül, vagy per jellel "/userneved". Ha nem a fő könyvtárba tetted a logint, akkor a mappa neve is kell mögé. "userneved/weblapmappa" vagy "/userneved/weblapmappa"

  • freeweb.hu ( fw.hu ): Itt üresen lehet hagyni.

  • 000webhost.com: Itt meg kell adni az útvonalat. Ami gyökérkönyvtárba telepített rendszernél egyszerűen "/" jel. Vagy megadható http-vel is, ahogy fentebbi módszerekben írtam. Üresen hagyva nem működik, mert beteszi a public_html mappát is az útvonalba. Ami nem kell.

Ha nem elég érthető a leírás, jelezzetek vissza, és érthetőbbé teszem.

Szerkesztve: 2011. augusztus 11. 22:48
A relogin2/classes/Login.class.php -ben a logout metódusból hiányzott az onlinestatus mező módosítása után az adatbázisba feltöltés. Ezt javítottam. Egyetlen sor változott. De idézem az egész metódust:

public static function logout()
{
        $_SESSION['s'.self::$userNameVar]='';
        $_SESSION['s'.self::$userPassVar]='';
        if (System::$logged)
        {
                System::$user->onlinestatus = 0;
                System::$user->update(); //ezt a sort kell beszúrni!!
        }
        Session::getInstance()->setLifetime(0);
}

Ez egy nagyon apró javítás. Ezért nagyon apró verziószám változással, de feltöltöttem az R.E. Login 2.0.2 -es verzióját. A 2.0.1 sourceforge-ról továbbra is elérhető. Bár letölteni ezek után azt a verziót nincs értelme.

Szerkesztve: 2011. november 05. 17:30
Újabb hibajavító verzió került fel a loginból. Két hibát javít. Egy részt ha egy admin megváltoztatta egy felhasználó jelszavát a profil módosításnál, kiléptette az admint. Más részt a telepítőben megjelenhetett néhány undefined index hibaüzenet. Eddigi szokásomhoz híven ez a kisebb hibajavítás is csak kis verziószám változást jelent. Így most letölthető a R.E. Login v2.0.3

Akik megkímélnék magukat a teljes csomag letöltésétől, a következő linkeken megnézhetik, pontosan mi a két változtatás:

Kategóriák: 
Megosztás/Mentés

Hozzászólások

Gábor képe

Szia!

javaslatodra itt kérdezek tovább, próbálkozok ugye az email megerősítés, és meghívó mód életre keltésével localhoston (később kerülök csak rendes tárhely és domain alá), szoval gmail smtpvel próbálkozok kicseréltem a system.class-ban a hibaüzenetre vonatkozó részt hogy bővebb információt kapjak a hibajelenségről.
1 próbálkozás: SMTP-vel: Hiba- a fejléc menü tölt be csak az oldal többi része nem tölt be, semmi üzenet, email nem ment ki, de az adatbázisban megjelenik az invite. (hitelesített kapcsolódás, unév, jelszó, smtp.gmail.cm, port 465. /nemjó :(
2 próbálkozás: smtp nélkül, próba cseresznye alapon :D mivel egy mezei wampp szerver fut semmi levelező rendszerem nincs, vééééégre egy hibaüzenet, amit nemtudok értelmezni :( ehez már sajnos nincs elég jártasságom :(

boolean false

string 'Could not instantiate mail function.' (length=36)

Hiba az email küldésnél

Válaszod és türelmed előre is köszönöm,
Gábor

Rimelek képe

Ha úgy írtad át a forrást, ahogy írtam neked a másik témánál, akkor nem lehet kint a fejléc. Szerintem törölted az ob_end_clean() sort is és így az addig generált kimenet megjelenik. Ami miatt pedig lehet, hogy a hibaüzenetet nem látod, bár a forrásban benne van. Habár most meg nem mondom, ez hogy történne, mivel akkor lehetne, ha valahogy html tag-ba kerülne a kiírás. És akkor a második esetben is így történne.

Az smtp kikapcsolásával saját gépről nem fogsz tudni emailt küldeni ilyen módon. Így az nem csoda, ha arra hibaüzenetet kapsz.

Viszont ha az első esetben az oldalnak csak egy része tölt be, az arra utal, hogy ott valami hiba miatt leáll az értelmezés. Ami az exit; utasítás lehet. Azaz belefut abba a feltételbe, ami akkor fut le, ha hiba történik emailküldés közben. Ahol viszont ott az $err változó kiírása is, ami boolean false a második esetben. De az első esetben azt éppúgy ki kellene írnia. Akkor is, ha üres az üzenet. És a var_dump az üres stringet is jelzi valahogy, mint a boolean-nél is kiírta a típust.

Elméletben lehetséges, hogy a gmail smtpre elmegy a mail, és azért nem fut bele mégse a feltételbe ( bár akkor miért állna le a program ), majd ott veszik el. Pl spamszűrés miatt. De azon nem tudok segíteni. Próbálkozhatsz másik smtp-vel. Én az internet szolgáltatóm smtp címét használtam mindig. A loginnál sem volt még vele sose gondom.

Kusi képe

Szia!
Nem akarlak zargatni, de csak nem találom. Csak azt szeretném megtudni, hogy a profil.php-ben hogy hozom elő a keresett és aktuális(belépett) user id-jét?

Rimelek képe

Szia. A relogin2/profile.php elején van pedig használva a változó. 29. sorban.

if (empty($user->T_users_userid)) {

Tehát az id a

$user->T_users_userid

változóban van.

Kusi képe

Szia. Köszönöm közben egyébként meg lett, csak már a szemem jojózott nem találtam.
A kódrészlettel nem sikerült megoldanom, így maradtam az egyedi lekérdezéseknél. Végül a systembe iportáltam új változót és azzal kezelem.
Köszi a segítséget. :) További jó munkát és csak így tovább!

mrhill képe

Helló!
Egy jó ideig nem tudtam foglalkozni a honlapommal, de ma folytattam a fantasztikus rendszered beépítését (kinézet fabrikálása).
Az egyes elemekhez (profil, ~módosítás, üzenet stb.) készítettél fej-, láblécet, amiken elhelyezted a gombokat (felhasználók, online lévők stb.). Mivel az aloldalakat egy lapra hívom be, a fej-, láblécet töröltem, a gombokat a főlapra tettem, működnek.
A probléma az, hogy pl. ha rákattintok a Postára, bejön a láda, ahol van négy menüpont (Új, Beérkező, Kimenő, Hír). Ha ezek közül rákattintok vmelyikre, nem az oldalamon belül jelenik meg, hanem új oldalon, a Te kinézeteddel.
Tehát úgymond az első lépcsőt sikerült integrálnom, a másodikat már nem. Mit javasolsz? Ez lenne (azt hiszem) az utolsó problémám, utána kész lenne az oldalam, hála Neked, az önzetlen segítségednek.

mrhill képe

Egy titokra rájöttem. A postában a php kódok helyére a hivatkozást kellett beírni, így működik.
Viszont más a helyzet a profilnál. Ott két kép a link, és ott nem lehet így kicserélni a kódot. Mit csináljak, hogy az üzenetírást és a profilmódosítást se új oldalon töltse be?
Már csak ez áll az utamban. Köszönöm.

Rimelek képe

Üdv

Napokig nem volt netem, így csak most tudok válaszolni.

Tehát van az eredeti relogin2 mappa. Amiben megtalálhattad a profile.php-ben html+php kevert forráskódját a képlinkeknek. Itt van a relogin2 mappában még az includes mappa. Abban is van egy profile.php. És abban ez a rész a fájl végén:

$sendMsgUrl = Url::set(array(
        'msgact' => 'write',
        'msgto' => $user->T_users_userid
),Config::FILE_MESSAGES_WRITE);

$chProfUrl = Url::set(array(
        'uid' => $user->T_users_userid
), Config::FILE_CHANGE_PROFILE, '&amp;');

Ez a két url. A profilmódosítás és az üzenetküldés. Na most ez az Url osztály set metódusa annyit tesz, hogy első paraméterben azoknak az url-ben küldött változóknak az asszociatív tömbjét várja kulcs-érték párként, amiket bele akarsz tenni. Azok, amik aktuálisan már benne vannak az url-ben, nem vesznek el. Tehát ha ez az url:
http://valami.tld/index.php?page=main&id=34
És ezt írod a metódusba:

echo Url::set(array('page'=>'admin', 'kenyer' => 'barna'));

Ez lesz az eredmény:

http://valami.tld/index.php?id=34&page=admin&kenyer=barna

Ha valamit törölni akarsz a benne levő változókból, például az id-t, akkor annak null értéket kell adni. Így:

echo Url::set(array('page'=>'admin', 'kenyer' => null));

Akkor azt ki is hagyja az url-ből.

Ha nem csak a query stringet akarod változtatni, hanem a fájlnevet is index.php-ról nemindex.php-re, akkor azt a set metódus második paraméterében kell megadni. Ahogy azt én is megadtam fent, csak én konstanson keresztül.

echo Url::set(array('page'=>'admin', 'kenyer' => 'barna'), '/nemindex.php');

Html-ben az & jeleket &amp; -ként kell leírni. Tehát a linkekben a forrásban &amp; kell, hogy legyen. Ezt állítja a harmadik paraméter. Ha egy http fejlécbe akartam volna írni, akkor a harmadik paramétert elhagytam volna. És akkor szimplán & jeleket tenne a változók közé.

mrhill képe

Ez nekem kissé bonyolultnak tűnik, nem jöttem rá, hogy mit kéne csinálnom ahhoz, hogy pl. ha a profilmódosításra kattintok, akkor "valami.hu/home.php?"-val kezdődjön a link, a changeprofile.php-t a home.php oldalon belül hívja meg.

mrhill képe

Hálásan köszönöm segítséged, tovább elmélkedtem, és rájöttem a megoldásra leírásod nyomán.
Köszönöm.

mrhill képe

A beérkező és a kimenő (meg talán a hírnél is? - azt még nem tudom) üzeneteknél ha a küldő/fogadó nevére kattintok, új oldalon nyitja meg a behívás helyett. Nézegettem a kódokat, keresgéltem a link helyét, de csak a msginbox/msgoutbox php-kban találtam ilyesmit, az előbbinél az $userLink, az utóbbinál az $to van definiálva helyben. Nem tudom, hogy babráljam meg a link generálást, itt hogy tudom alkalmazni az Url::Set-et?

Rimelek képe

A relogin2/classes mappában a Messages.class.php -ben az url metódusban:

public static function url($box = self::INBOX)
{
        switch ($box)
        {
                case self::OUTBOX:
                        $file = Config::FILE_MESSAGES_OUTBOX;
                        break;
                case self::INBOX:
                        $file = Config::FILE_MESSAGES_INBOX;
                        break;
                case self::NEWS:
                        $file = Config::FILE_MESSAGES_NEWS;
                        break;
                default:
                        $file = Config::FILE_MESSAGES_INBOX;
        }
        return System::getSitedir().$file;
}

Itt a $file változóba kerül a fájlnév, amit a beállításokból jön. És ahogy fentebb leírtam a set metódus használatát, ugyanúgy kell használni. A Config.class.php-ben állítsd át ezeket a konstansokat index.php-re, vagy ami a te fájlodnak a neve. És akkor ha az outboxot akarod átírni, az kb így néz ki:

public static function url($box = self::INBOX)
{
        switch ($box)
        {
                case self::OUTBOX:
                        $file = Url::set(array('page'=>'inbox'),Config::FILE_MESSAGES_OUTBOX, '&amp;');
                        break;
                case self::INBOX:
                        $file = Config::FILE_MESSAGES_INBOX;
                        break;
                case self::NEWS:
                        $file = Config::FILE_MESSAGES_NEWS;
                        break;
                default:
                        $file = Config::FILE_MESSAGES_INBOX;
        }
        return System::getSitedir().$file;
}

Így ide linkel:

index.php?page=inbox

Ha nem érthető, próbáld meg és írd ide le, hogy próbáltad!

Krisztián képe

Üdv!
Nekem a telepítési űrlap kitöltésével vannak gondjaim.
Mi kellene kicsit pontosabban az "Adatbázis hoszt" alá?
Aztán az "Adatbázis név" alá az én nevem kell?
A "Tábla prefix"-nél hagyjam az alapot? (relogin_)
Az "SMTP használata" és a "Hitelesített kapcsolat" bejelölése kötelező?
Az E-mail címek a "Hitelesített kapcsolat" alá tartoznak, vagy külön vannak?
Mi van akkor, ha bekapcsolom a "Blokkolt regisztráció"-t és a "Blokkolt belépés"-t?

Azt elárulom, hogy ilyennel most van először dolgom, eddig csak html és css nyelvel foglalkoztam, ezért nincs sok fogalmam ezekről a dolgokról.

A választ előre is köszönöm

U.I.: Ha lehetne részletesebb magyarázatra volna szükségem a mezők kitöltéséről.

Rimelek képe

Ahogyan azt e-mailben is jeleztem, ezeket az infókat az adatbázisodról a tárhelyszolgáltatódtól tudod elkérni. Feltételezem, hogy tárhelyen próbálod, mert nem írtad egyszer sem, hogy nem így van. Ha saját gépeden van, akkor a host valószínű localhost. Az adatbázis neve pedig nem a te neved, hanem bármilyen név, ami létezik az adatbázis szervereden. Feltéve, hogy van olyan.

Hitelesített kapcsolat akkor kell, ha beállítottad az smtp használatát. És olyan smtp szervert használsz, aminél ez szükséges. Ezt is az adott smtp szolgáltatótól tudod megkérdezni.

De nem tudok pontosabb infókat adni, mert nem írtál az általad használt környezetről semmit sem. Ezt is jeleztem emailben, hogy minél részletesebb adatokat írj le, ami publikus. A tárhelyed igen lényeges információ volna.

A blokkolt regisztráció azt jelenti, hogy nem lehet regisztrálni az oldalra. De aki már regisztrált, az beléphet. A blokkolt belépés azt jelenti, hogy nem lehet belépni az oldalra.

Tábla prefixet hagyhatod alapon. Akkor érdekes, ha már van azonos prefix-szel kezdődő táblád. Akkor ütközhet a már létezőkkel az új telepítés. De nálad ez nyilván nincs így, ha még nem is hazsnáltál datbázist.

mrhill képe

Ez a kódrészlet nekem a Messages.class.php-ban van, oda tetted.
Én amúgy az előbbi leírásod alapján jöttem rá arra, hogy a Config::FILE_... helyett /home.php?page=... -t írok, működik is.
Most beírtam úgy, ahogy Te leírtad, de a problémám ezzel nem oldódott meg. Magát a postát rendesen behozza, az üzenetírást, bejövőt, kimenőt, híreket is. A probléma akkor van, ha a küldő/címzett nevére kattintok, azt hozza be új oldalon. Találtam két változót, amit helyben (inbox.php: $userLink, outbox.php: $to) definiáltál. Na, azok átírásának mikéntjére nem jöttem rá, hogy ott lehet-e az Url::Set-et használni...

Rimelek képe

Akkor ami neked kel, az a profil url. Ami a User.class.php-ben van:

/**
 * User profiljának url-je
 *
 * @param int $userid Felhasználó azonosítója
 * @return string
 */

public static function profileUrl($userid)
{
        $url = System::getSitedir().Config::FILE_PROFILE;
        return Url::set(array(
                'uid' => $userid
        ), $url, '&amp;');
}

Csak add hozzá az oldal változóját is a set metódusban az uid mellett.

Azt írtad:

Ez a kódrészlet nekem a Messages.class.php-ban van, oda tetted.

Ugyanezt írtam én is.

mrhill képe

Erre volt szükségem, köszönöm, működik.
Az előbbi figyelmetlenségemért elnézést kérek.

Krisztián képe

Most már működik. Az adatbázis szerverrel volt a gond, méghozzá az, hogy nem is volt :P De rájötem, hogy hogyan kell beállítani a szolgáltatónál.
Köszönöm a segítséget, és magát a login rendszert is.

U.I.: Ha esetleg még valami gondom lesz vagy valami nem működik, írok hozzászólást.

Még egy U.I.: A szolgáltatóm wbh, csak, hogy ne titkolózzak.

Sz.Peti képe

Hello! Szeretném, ha segítenél.
Feltelepítettem a rendszert, egyetlen problémám van vele: Regisztráltam elsőnek, mint admin. Azt írja, aktiváljam az e-mailben kapott kóddal. De nem jön e-mail. G-mail.com-os a címem.
Előre is köszi!

Rimelek képe

Helló

A tárhely a lényegesebb szempont. Na meg hogy jó emailt adtál-e meg regisztrációnál. De ha például saját gépen tesztelsz, és smtp nélkül telepítetted a logint, akkor nem tudsz valószínűleg kifele emailt küldeni.

De ha belépsz az adatbázisba, akkor ott a relogin_profiles tábla useremail mezőjének tartalmát ( ide teszi az emailcímed ) másold át a relogin_users tábla useremail mezőjébe. Ezzel aktiválod magad.

Sz.Peti képe

Köszönöm a segítséget, azt hiszem, megoldódott a probléma. Viszont egy újabb adódott. Már megkapom a címet, viszont rosszat. ennevem.atw.hu/linktöbbirésze - ennek kellene lennie. Most viszont users.atw.hu/linktöbbirésze, és így nem tudja aktiválni. Ha átírom a linket, akkor jó. Ezt hol tudom globálisan átírni? Ugyan ez van a kijelentkezésnél is. Ott is így kezdődik a link és ha átírom, akkor jó.

Üdv.: Peti

Rimelek képe

Erről írtam ebben a bejegyzésben ITT. Kérdés előtt mindig olvasd el az aktuális bejegyzést!

Sz.Peti képe

Ezt sikerült is már elolvasnom. Megoldanom nem sikerült. Valószínűleg gáz, de nem tudom, melyik elérési utat kellene módosítanom. Vagy kezdjem elölről a telepítést?

Sz.Peti képe

Köszönöm, már tárgytalan. Megtaláltam. ^^ Köszönöm mégegyszer.

csiber képe

Üdv.

Ha jól látom, Smarty az alaprendszer?

Rimelek képe

Helló. Ezt rosszul látod :) Nincs benne Smarty. Két osztálykönyvtárat használok benne. A PHPMailer-t az emailküldéshez, és az REDBObjects -et, amit meg eleve én írtam. De használtam Smarty-t, csak a loginba úgy gondoltam, nem teszek bele túl sok összetevőt.

Miből gondoltad egyébként, hogy Smarty az alap?

csiber képe

Üdv.

Így első ránézésre annak tűnt. :) Akkor lényegében ez egy teljesen egyedi keretrendszer, ha ilyen szemszögből nézzük. Amúgy nagyon szépen megszerkesztett rendszer!

Rimelek képe

Igen, nevezhetjük egy primitív keretrendszernek. Köszönöm az elismerést!

Krisztián képe

Üdv!

Lehet, hogy e kérdést már feltette valaki, de megmondom őszintén, hogy a suli mellett nem igazán érek rá átolvasni minden hozzászólás.

Szóval a kérdésem az, hogy hogyan írhatom ki a honlapon regisztráltak számát.
Pl.:
___________________________________________
Statisztika
Regisztráltak száma: x
Jelenleg online: Pityipalkó, Isti96,
___________________________________________
(x = a regisztráltak számával)

A "Jelenleg online" már megvan, csak a "Regisztráltak száma"-ra nem tudtam rájönni, hogy hogy kellene kiírni.

Előre is köszönöm a segítséget.

Krisztián képe

Ja és még egy kérdés:

Hogyan írhatom ki valahova a bejelentkezett user usernevét?
Pl.:
________________________________________
Profilod: [ Pityipalko93 ]
________________________________________

Rimelek képe

Helló

Egyszerre válaszolnék az összes kérdésre és többre:

Regisztráltak száma:  <?php echo UserList::countUsers() ?><br />
Összes nő: <?php echo UserList::countWomen() ?><br />
Összes Férfi: <?php echo UserList::countMen() ?><br />
Online: <?php echo UserList::countOnlineUsers() ?><br />
Jelenleg online: <?php
$filter = new UserFilter();
$filter->addOnlineFilter(UserFilter::ONLINE_YES);
$users = new UserList(array('users'=>'username'), $filter);
$online = array();
foreach($users as $_user) {
     $online[] = $_user->username
}
echo implode(', ',$online);
Profilod: '['. System::$user->username .']'; //De ez még session-ben is benne van
 ?>

A count* metódusokban egyébként egy hibás megoldást alkalmaztam. Ha azokra hibaüzenetet kapsz, de az eredmény megjelenik, írj a metódushívások elé kukacot. Ha az eredmény sem jelenik meg, akkor a relogin2/classes/UserList.class.php -ben a countUsers -ben például a így kell javítani:

erről:

public static function countUsers()
{
        return (int)array_shift(mysql_fetch_row(
                        mysql_query('select count(*) from '.Config::DBPREF.'users')));
}

Erre változtasd:

public static function countUsers()
{
        $result = mysql_fetch_row(mysql_query('select count(*) from '.Config::DBPREF.'users'));
        return $result[0];
}

Ez azért van, mert akkoriban nem vettem figyelembe ( mivel nem is mindig adott hibát rá a php ), hogy az array_shift függvény csak változót kaphat. Függvény visszatérési értékét közvetlenül elvileg nem.

A másik, hogy ha egyszerre szeretnéd kiírni az online userek számát és azokat meg is jeleníteni, akkor felesleges a countOnlineUsers metódust is meghívni. Mivel az is ugyanazt a filtert használja fel, csak nem egy listát ad vissza, hanem egy számot. A $users változón működik ez is:

echo count($users);
//vagy
echo $users->count();
Krisztián képe

A "Regisztráltak száma" mező nem működik.
Üresen marad, és az utána lévő szövegek, parancsok sem látszanak.
Átírtam relogin2/classes/UserList.class.php -ben is amit mondtál, de akkor sem reagál semmit.

Rimelek képe

Bemásolnád ide nekem, hogy hogyan írtad át a metódusokat és hogyan használtad őket? Ha lehet, akkor színezve valahogy így:

<php>
Ide írd a forráskódot a php tag-ek közé és színes lesz
</php>

Mert hiba könnyen lehet, de hogy egyáltalán "semmit nem reagál", az különös. Biztosan kell lennie hibaüzenetnek. Talán csak a szervereden el vannak alapból némítva.

Karakai képe

Telepítésnél nekem ezt a hibí üzit írja ki:
Mit tegyek?

Hiba
SQL-kérés:

-- table
CREATE TABLE IF NOT EXISTS `{prefix}sessions` (

`sess_id` varchar( 40 ) NOT NULL ,
`sess_data` text NOT NULL ,
`remember` int( 11 ) unsigned NOT NULL DEFAULT '0',
`uid` int( 11 ) unsigned NOT NULL ,
`mtime` int( 10 ) unsigned NOT NULL ,
PRIMARY KEY ( `sess_id` )
) ENGINE = MYISAM DEFAULT CHARACTER SET = { CHARSET } COLLATE = { COLLATE };

MySQL jelzi:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{charset}
COLLATE = {collate}' at line 9

Rimelek képe

Szia

Kérlek, olvasd el a telepítési útmutatót fent a bejegyzésben. Nem az sql fájlt kell kézzel imporátnlnod az adatbázisodba.

Dual képe

Szeva Rimelek ..

Megint gondom adódott :/ Feltettem újra a tárhelyre telepítettem próbáltam regisztrálni s az ellenőrző kódnál nem fogadta el egyiket sem, pedig helyesen írtam be.
Kiszedtem azt a részt belőle úgy már sikerült, de folyamatosan kiléptet :/

valami 5let?

Előre is köszi

Rimelek képe

Szia

Mindkét jelenség arra utal, hogy nem tudja letenni a sessiont. Ugyanis az ellenőrző kép is használ session-t. Lehet már másnak is javasoltam itt, úgy rémlik. De nézd meg, használsz-e együtt más programot a loginnal. Ami szintén használja a saját sessionjeit, mert összeakadhatnak. Például ha mindkettő elindítja session_start() függvénnyel a sessiont. Vendégkönyv akár.

Dual képe

Halee :)

Nem hiszem h session hibája lenne :/ Teljesen töröltem az egész domain tartalmat és újra létrehoztam.
Ez volt az első amit telepíteni akartam és így sem megy az ellenőrző kép :S

Vmi más 5let?

Rimelek képe

Én pedig biztos vagyok benne, hogy session hiba. Ha nem az egymással ütköző session miatt, akkor más miatt. De mivel nem tudok semmit a tárhelyedről, ennyit tudok mondani. Leírhatnál többet akár privátban, emailben a tárhelyedről.

És kérlek, ne rövidíts mindent. Ez nem chat! Ha valaki például rákeres egy problémára, nem az "5let" -et fogja keresni google-ben.

Köszönöm!

Rimelek képe

Most már ide írom, mert ez mást is érinthet.

Szóval újra megnéztem a beállításaid, mert azt láttam, hogy a session-öket nem tudja elmenteni a szerver. Hiába jön létre kliens oldalon a sütije. Azért nem tudja elmenteni, mert a beállításaid szerint a

session.save_path

egy olyan könyvtár, amire nincsen írási joga a webszervernek. Talán nem is létezik. Ugyanakkor ez a hiba azért jöhetett elő, mert a egy másik beállításod szerint a session.auto_start "on" -ra van kapcsolva php.ini -ben. Így pedig már azelőtt elindul a session, hogy a login a saját sessionkezelőjét be tudná tölteni és elindítaná a munkameneteket a session_start() függvénnyel.

Ha benézel az interworx adminban a logokba ( Adminisztráció » Logok ), ott láthatod is a hibaüzeneteket.

Megoldás: Ha tudod, kapcsold ki a php.ini -ben a session.auto_start beállítást. Ha nem, kérj meg valakit, aki tudja. Ezzel rendbejön a login.

De más programod, amit egyébként feltelepítenél és sessiont használna, nem fog működni a session.save_path beállítás miatt. Tehát nézz utána annak is, hogy amit a phpinfo-ban látsz ennél könyvtárat, létezik-e és van-e hozzá írási joga a webszervernek. Ha nincs mappa, hozd létre, és adj rá jogokat. Vagy állítsd át a /tmp mappára a session.save_path -t. Oda mindig van joga mindenkinek írni.

Csakany97 képe

Üdv!

Csináltam egy fórumra való hozzászólás részt, de nem tudom, hogy hogyan illesszem be annak a usernek a nevét aki írta. Kipróbáltam már pár dolgot saját eszem szerint, de nem megy.
A hozzászólásnak van saját mysql táblája is:
id, tárgy, üzenet, dátum.
Minden meg van, és működik, csak a küldő nevét nem tudom kiírni.

Itt a táblázat (nem a mysql):

<table border="1" width="100%" align="center"><tr style="color:#CCCCCC">
                        <td style="color:#CCCCCC; font-weight:bold;">ID</td>
                             <td style="color:#CCCCCC; font-weight:bold;">Írta</td>
                                <td style="color:#CCCCCC; font-weight:bold;">Tárgy</td>
                                        <td style="color:#CCCCCC; font-weight:bold;">Üzenet</td>
                                                <td style="color:#CCCCCC; font-weight:bold;">Dátum</td>
                        </tr>

<?php

                        $sms_data = mysql_query("SELECT * FROM `guestbook`");
                        while($row = mysql_fetch_assoc($sms_data))
                        {
                                               
echo "<tr>
                        <td class='betuszin'>"
.$row['id']."</td>
                             <td class='betuszin'>"
//a küldő neve"</td>
                                <td class='betuszin'>".$row['targy']."</td>
                                                                <td class='betuszin'>".$row['uzenet']."</td>
                                                                                                <td class='betuszin'>".$row['date']."</td>
                </tr>";

                        }
?>
</table>

Előre is köszönöm a segítséget!

Rimelek képe

Szia

Nem egészen értelek. Pontosan mivel van a probléma? Tehát beépítettél a loginba egy vendégkönyvet és ki akarod írni annak a nevét, aki írta a hozzászólást?

Tárolod egyáltalán annak a nevét vagy bármijét?

Az idézett forráskód szintaktikai hibás is. Esetleg arra céloztál, hogy nem tudod, hogyan írd szintaktikailag helyesen?

Az aktuálisan belépett user neve a

System::$user->username

-ben van

Csakany97 képe

Úgy szeretném megoldani, mint pl az üzenetnél.
Annak a usernek a nevét írja ki, aki küldte. Ez a user a felhasználók között van.
Tehát nem úgy szeretném, hogy megadjon egy nevet a user, hanem a regisztrált felhasználó tud csak írni, és annak a regisztrált felhasználónak a nevét írja ki, aki írta.

Rimelek képe

Ezt én értem. De a kérdésemre nem válaszoltál. Leírtam, hogyan tudod lekérdezni a bejelentkezett felhasználó nevét. Azt kell elmentened a vendégkönyvben üzenet írásakor.

Csakany97 képe

Azt hiszem értem, de nem egészen vagyok benne biztos, hogy meg is tudom csinálni.
Hova kellene beírnom azt a kódot, amit megadtál? És aztán hogy tudnám lekérni? Milyen kódsorozattal?
Ha esetleg valami példát tudnál írni, megköszönném.

Csakany97 képe

Addig oké, hogy mikor írja a hozzászólást, akkor lekérem a bejelentkezett user nevét az alábbi kóddal, de nem tudom, hogy aztán ezt hogy írhatnám ki.

Rimelek képe

Kedves Csakany97!

Az a helyzet, hogy ezekhez tényleg érteni kell egy szinten a php programozást, mert másképp nem tudok segíteni sem. Azon túl, hogy leírtam, hogyan tudod a loginból lekérdezni az éppen belépett felhasználó nevét, azt is tanácsoltam, hogy azt mentsd el a vendégkönyvben, mikor beküldenek egy üzenetet.

Kiírni nyilván úgy lehet, ha annak a vendégkönyvnek az üzeneteit lekérdezed az adatbázisból, amire te első alkalommal mutattál is egy megoldást. Abban a guestbook táblában kell a felhasználónevet is eltárolni. Abból pedig ki tudod írni. Megjegyzem, célszerű nem csak

select * from guestbook

sql utasítással lekérdezni, mert ha kitörölsz egy üzenetet, és újat küldesz be, akkor a kitörölt helyére kerül be az új. És nem sorban lesznek az üzenetek. A rendezés az order by használatával történik.

select * from guestbook order by datum

Persze csak ha van "datum" mező.

Nem tudom, milyen egyéb kódsort mutathatnék. Az ilyen egyedi igényeket kielégítő módosításokhoz sajnos meg kell tanulni az alapokat. Meg kell keresned a vendégkönyvben ( ha te írtad, akkor nem lesz nehéz ) azt a részt, ahol elmented az üzenetet az adatbázisba. És egyszerűen elmenteni a felhasználónevet is. Abba a mezőbe, amelyikbe az egyébként külön beírt név került volna.

Csakany97 képe

Köszönöm a segítséget, azt hiszem kapizsgálom.
Majd írok a fejleményekről, hogy sikerült-e megoldanom.

Csakany97 képe

Megvan, működik.
Leírtjaid alapján sikerült rájönnöm a megoldásra.
Köszönöm a segítséget.

De lenne itt még valami.
Hogyan írhatnám ki az utoljára regisztrált user id-jét?

Rimelek képe

Lekérdezed id szerint (order by userid ) sorrendben ( desc ) a legelső rekordot ( limit 1 )

select * from relogin_users order by userid desc limit 1

És benne lesz a legnagyobb azonosító, ami az utolsó jelen esetben. De mivel van max függvény is

select max(userid) as lastid from relogin_users

rögtön az utolsó id-t is visszakaphatod. Bár nem tudom, ez mire kellhet. "lastid" néven tudod kiszedni az id-t az eredménytömbből.

Ha szeretnél ilyeneket csinálni, továbbra is javaslom a mysql alapszintű tanulmányozását.

Hogy írjak valami login specifikus dolgot is: Az alap prefix a "relogin_". De ha te telepítéskor mást adtál meg, annak megfelelően a fenti sql kódok is változnak. Az univerzális megoldás tehát a Config-ban megadott prefix használata:

$sql = "select * from ".Config::DBPREF."users order by userid desc limit 1";

és

$sql = "select max(userid) as lastid from ".Config::DBPREF."users";

Utána jön a mysql_fetch_assoc ugyebár. De mivel most nem egy listát akarsz kapni, nem kell while ciklusba tenned. Azért hangsúlyozom ezt ki, mert a legtöbb példa ciklusos megoldást ír. És a kezdők nem tudják, hogy nem kötelező. Tehát:

$row = mysql_fetch_assoc($sql);
echo $row['utolso'];

Na, már csak össze kell raknod a kódfoszlányokat, amiket leírtam.