Pagina 1 din 1
Refacerea utilizatorilor stersi
Scris: 27-Sep-2006, 16:25:41
de Trix
Salut comunitatea phpBB din Romania !
As dori sa stiu daca exista o modalitate de a reface utilizatorii stersi, cat mai aproape de starea in care erau inainte de stergere, adica macar sa li se reatribuie mesajele pe care le-au scris pe forum pana la stergere.
Multumesc.
P.S. Daca nu exista o solutie mai simpla si verificata de mai multi, voi reveni cu prezentarea unei metode empirice pe care am realizat-o si care pare sa mearga, pana la proba contrarie.
Scris: 27-Sep-2006, 16:33:10
de seelview
Cum s-au sters utilizatorii respectivi ?
O solutie ar fi sa ii "refaci" dupa o salvare mai veche a bazei de date. Daca nu ai vreo salvare facuta... atunci este, aproape imposibil.
Scris: 27-Sep-2006, 16:44:09
de Etherfast
seelview scrie:Daca nu ai vreo salvare facuta... atunci este, aproape imposibil.
A se citi "imposibil"

Scris: 27-Sep-2006, 16:46:32
de Trix
Teoretic, dintr'o copie de siguranta se pot extrage datele utilizatorului sters si repuse in baza de date. Aceasta insa nu rezolva problema asocierii cu mesajele pe care le-a scris. Intr'un caz pe care l-am intalnit, un administrator a sters un utilizator cu aproape 1000 mesaje, deci e clar ca manual e extrem de greu de realizat. Exista totusi o solutie ?
P.S. De la data stergerii la data unei posibile refaceri a trecut ceva timp, deci refacerea completa a bazei de date din copia de siguranta e complet exclusa.
Scris: 27-Sep-2006, 17:11:53
de seelview
Exista un mod care iti asociaza posturile fara utilizator (scrise de vizitator asa cum apar pe forum) cu unul dintre utilizatorii inregistrati pe forum. Insa daca ai cele 1000 de mesaje ale unui utilizator cu inca 500 ale altuia si inca 5 al unui al 3-lea... mod-ul nu face diferenta.. si nimic nu poate face diferenta. Toate fiind atribuite unui singur user.
Scris: 27-Sep-2006, 17:30:27
de Trix
In acest caz, voi prezenta solutia mea, cu mentiunea ca este foarte empirica si necesita verificare si confirmarea functionarii ei de mai multi utilizatori inainte de a o numi sigura.
In cele de mai jos presupun ca exista acces direct la mysql pe serverul forumului. Informatiile continute de acolade se vor inlocui cu datele corespunzatoare explicatiei dintre acolade.
1. Refacerea utilizatorului
---------------------------
Se reface userul, folosind datele dintr'o copie de siguranta. Daca acest lucru nu este posibil, se re-inregistreaza userul. Evident, numele userului nu trebuie sa fi fost luat de altcineva intre timp. Aceasta posibilitate nu am prevazut-o si nu stiu daca redenumirea userului mai nou pentru a face loc celui vechi este posibila.
2. Actualizarea datelor privind numarul de mesaje si ID'ul
----------------------------------------------------------
2a. O re-inregistrare ar schimba ID'ul userului sters. Nu stiu daca are in mod normal importanta, daca are si ID'ul se cunoaste, el poate fi modificat manual.
2b. Pentru reatribuirea mesajelor, vom determina mai intai cate a scris.
Pentru 2a si 2b se scrie interogarea MYSQL:
UPDATE `phpbb_users`
SET `user_id` = {ID_vechi_user},
`user_posts` = (SELECT COUNT(*) FROM `phpbb_posts` WHERE `post_username` = '{nume_user_sters}'
WHERE `username` = '{nume_user_sters}';
Partea cu user_id poate fi sarita daca nu se cunoaste ID'ul vechi sau daca restaurarea a fost facuta din copia de siguranta.
3. Preluarea mesajelor
Mesajele utilizatorului sters au trecut numele sau, dar ID'ul este -1. Acest lucru trebuie modificat. Numele userului nu mai este necesar, deoarece identificarea lui se face prin ID'ul sau.
Scrieti interogarea MySQL:
UPDATE `phpbb_posts`
SET `poster_id` = {ID_user},
`post_username` = ''
WHERE `post_username` = '{nume_user_sters}';
4. Grupul in care este utilizatorul
-----------------------------------
Am constatat ca omiterea acestei parti duce la erori atunci cand se doreste schimbarea statutului si/sau rangului utilizatorului re-creat. Daca exista informatia in copia de siguranta, ar trebui introdusa de acolo doar pentru utilizatorul sters, daca nu, trebuie introdusa manual.
In tabelul `phpbb_groups` exista mai multe inregistrari, din care una nu are nume in campul `group_name`.
Notati `group_id` al acestei inregistrari.
Eu am 3 inregistrari:
1 - Anonymous
2 - Administrator
3 - (fara nume)
Scrieti interogarea MySQL:
INSERT INTO `phpbb_user_group` VALUES ({ID_grup_simplu_user},{ID_user},0);
5. Sfarsit
----------
Daca totul merge bine, utilizatorul ar trebui sa aiba toate mesajele pe care le-a scris. Alte chestiuni, legate de mesaje private, galerie foto si alte informatii, nu le-am tratat si nu cunosc efectele acestor actiuni asupra lor.
Atentie: utilizarea acestei proceduri este empirica. Cei care o folosesc isi asuma riscurile si raspunderea pentru orice disfunctionalitate si/sau pierderi de date. Nu exista nicio garantie ca va functiona, decat propria experienta care nu poate servi ca o garantie sub nicio forma.
Descrierea de mai sus poate contine greseli de redactare. Atentie la semnificatiile campurilor din acolade si la sintaxa MySQL.
Sper sa nu aveti nevoie de asa ceva.
Daca aveti, succes.
Scris: 27-Sep-2006, 22:39:49
de Trix
O corectie legata de pasul 4:
Utilizatorii re-creati prin formularul de inregistrare nu ar trebui sa aiba probleme cu aceasta parte, inregistrarea facand'o automat pentru dumneavoastra. In alte situatii, verificati daca in tabela `php_user_group` exista o inregistrare avand `user_id` egal cu ID'ul userului re-creat.
Urmatoarea interogare ar trebui sa returneze o inregistrare, in acest caz nemaifiind necesara modificarea manuala:
SELECT * FROM `phpbb_user_group` WHERE `user_id` = {ID_user_refacut};
Daca nu exista aceasta inregistrare, trebuie creat un grup single-user pentru utilizatorul sters si re-introdus. Daca asignati aleator un grup unui utilizator, asa cum era descris in mesajul de mai sus, este posibil ca acel grup single-user sa fie al unui administrator, moderator sau altui utilizator cu drepturi mai mari, situatie in care este posibil ca utilizatorul sa primeasca drepturi pe care nu ar trebui sa le aiba.
INSERT INTO `phpbb_groups`
SET `group_type` = 1,
`group_name` = '',
`group_description` = 'Personal User',
`group_moderator` = 0,
`group_single_user` = 1;
Campul `group_id` va fi asignat automat prin clauza auto_increment. Cautati si retineti valoarea lui.
Asignati apoi userului acest grup:
INSERT INTO `phpbb_user_group` VALUES ({ID_grup_creat},{ID_user_sters},0);
Dupa aceasta operatiune veti avea un utilizator reintrodus, cu mesajele sale atribuite lui. Daca cineva va avea vreodata nevoie de asa ceva. Un mod pentru corectarea capriciilor unora cu drept de stergere nu se va face prea curand
