Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmiana nicku przez usera
Mody23
post 23.10.2011, 08:51:07
Post #1





Grupa: Zarejestrowani
Postów: 276
Pomógł: 0
Dołączył: 30.06.2010

Ostrzeżenie: (10%)
X----


Witam!

Mam pytanko - mam w bazie pole "username" - tam jest zapisany nick usera. Teraz tworzę sklep i chcę zrobić zmianę nicku za sms. No i w profilu usera, jeśli zmienił nick chociaż raz, chcę wyświetlić o tym informacje, np.

User X zmienił nick dnia Y na nick: Z

No i mogę dodać pole w bazie o nazwie np. "old username", "date_change_username" i będzie ok. Ale chodzi o to, że jeśli user zmieni nick np. 3 razy to to mi już wyjdzie z obiegu, bo to będzie zapisywać zmiany tylko z obecnego na nowy (i wtedy obecny wchodzi jako stary, a nowy jako nowy - wiadomo). Jak zapisać większą ilość zmian nicku? I jak uzyskać liczę, ile user razy zmienił ten nick?
Go to the top of the page
+Quote Post
wookieb
post 23.10.2011, 10:16:47
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Oddzielna tabela gdzie każdy rekord opisuje zmianę nicku?


--------------------
Go to the top of the page
+Quote Post
Mody23
post 23.10.2011, 11:09:51
Post #3





Grupa: Zarejestrowani
Postów: 276
Pomógł: 0
Dołączył: 30.06.2010

Ostrzeżenie: (10%)
X----


Dobrze, ale spójrz.

Powiedzmy, że teraz mam nick Mody23 i zmieniam go na Mody.

W bazie mam pola username (obecny nick usera) i old_username (stary nick usera).

Czyli zmieniając z mody23 na mody w bazie wygląda to tak:

$row['username'] = mody
$row['old_username'] = mody23


No i teraz powiedzmy kolejny raz chcę zmienić nazwę użytkownika. To co, znów muszę tworzyć nowe pole w bazie? Jeśli user zmieni nick usera 50 razy, to ja muszę tworzyć 50 pól w bazie? Na pewno jest jakiś sposób na to i właśnie chciałbym żebyście mnie nakierowali na ten sposób.
Go to the top of the page
+Quote Post
wookieb
post 23.10.2011, 11:12:45
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




tabela nick_change
id, user_id, from_nick, to_nick [, created - tu data utworzenia rekordu]

Przy każdej zmianie zapisujesz kolejny rekord.
Kod
1 1 "Mody23" "Mody"
2 1 "Mody" "Mody 24"


Pobierasz wszystkie rekordy z tej tabeli i dzięki temu masz historię zmian


--------------------
Go to the top of the page
+Quote Post
Mody23
post 23.10.2011, 11:26:08
Post #5





Grupa: Zarejestrowani
Postów: 276
Pomógł: 0
Dołączył: 30.06.2010

Ostrzeżenie: (10%)
X----


Chcę się upewnić tylko.

User ma nick: Mody23 i zmienia go na Mody. Kod wygląda tak:
  1. $nowynick = $_POST['newusername'];
  2. $obecnynick = $userdata['username'];
  3.  
  4.  
  5. $sql = "UPDATE " . NAZWA_TABELI . " SET from_nick = $obecnynick WHERE user_id = 'X'";
  6. $sql2 = "UPDATE " . NAZWA_TABELI . " SET to_nick = $nowynick WHERE user_id = 'X'";

Dobrze myślę?

EDIT:

Nie, źle bo to będzie uaktualniać rekord w bazie, a ja mam utworzyć nowy rekord. Możesz mi podać jakiś przykład jak to powinno być zrobione?

EDIT2:

  1. INSERT INTO nazwa_tabeli (id, user_id, from_nick, to_nick, date) VALUES (NULL, '$userdata['user_id]', '$starynick', '$nowynick', '$date');


Tak?

Ten post edytował Mody23 23.10.2011, 11:33:22
Go to the top of the page
+Quote Post
wookieb
post 23.10.2011, 11:33:37
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




1) Zmiana z nicku mody23 na mody
  1. INSERT INTO zmiany_nick(user_id, from_nick, to_nick, created) VALUES(1, 'mody23', 'mody', now());


2) Zmiana z nicku mody na mody24
  1. INSERT INTO zmiany_nick(user_id, from_nick, to_nick, created) VALUES(1, 'mody', 'mody24', now());


Każda zmiana nicku = nowy rekord, więc dlaczego robisz UPDATE?


--------------------
Go to the top of the page
+Quote Post
Mody23
post 23.10.2011, 11:36:26
Post #7





Grupa: Zarejestrowani
Postów: 276
Pomógł: 0
Dołączył: 30.06.2010

Ostrzeżenie: (10%)
X----


Jesteś wielki. Ostatnie pytanie.
Jak ma to wyglądać z tym polem ID? Bo wiadomo, że pole ID w bazie samo sobie ustala ID, więc ja mam mieć tam wpisane NULL, tak?
I jak mogę uzyskać datę utworzenia rekordu? Tak, żeby wstawić to w INSTERT INO za pomocą zmiennej?

Ten post edytował Mody23 23.10.2011, 11:38:33
Go to the top of the page
+Quote Post
wookieb
post 23.10.2011, 11:37:40
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




W przykładzie masz użycie funkcji NOW(), która zwraca Ci aktualną datę.
Jeżeli id jest auto_increment to nie musisz go uwzględniać przy insercie.


--------------------
Go to the top of the page
+Quote Post
Mody23
post 23.10.2011, 11:44:58
Post #9





Grupa: Zarejestrowani
Postów: 276
Pomógł: 0
Dołączył: 30.06.2010

Ostrzeżenie: (10%)
X----


Ale ja w bazie mam zapisane różne inne wyniki i one są chyba inaczej zapisywane niż NOW();

Spójrz, przykładowe pole "date":

Typ pola: int(11) i zawartość: 1319311489

Jak takie coś uzyskać tutaj, w tej zmianie nicku? To jest ta funkcja NOW(); ?

To jest chyba ta metoda, co zlicza ilość sekund, które upłynęły od 1970r. tylko też nie wiem jak to się nazywa, ani jak uzyskać taki efekt?

Ten post edytował Mody23 23.10.2011, 11:46:10
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.06.2025 - 00:33