Autor Zpráva
XLP
Profil *
Dobrý den,

potřeboval bych poradit, jak v php udělat následující:

Mám stránky, kde se uživatel zaloguje pod nějakým loginem. Současně je v databázi vytvořena tabulka se stejným názvem, jako je login nového uživatele. Uživateli je pak zobrazen formulář na přidání nějakých informací a potřebuji, aby se sql příkazem tyto hodnoty zapsaly právě do té tabulky určené pro daného uživatele.

Chci, aby to bylo plně automatické, aby to bylo řešeno pomoci proměnných, tzn. pokud se logne uživatel Pepa, tak aby po odeslání dat formulářem byla tato data zapsána do tabulky s názvem Pepa.

Zkoušel jsem to takto, ale pořád dostávám hlášku, že má tabulka nesprávné pojmenování.

$_SESSION['username'] = $user_name;
.....
$sql= mysql_query("INSERT INTO `".$user_name."` VALUES (atd atd atd....)

Víte někdo, jak toho docílit ? :)

Děkuji!
Alphard
Profil
Ono je dobře, že to z nějakého důvodu nefunguje, protože hůř to vymyslet nejde...
Mnohem lepší bude vytvořit si jednu společnou tabulku pro všechny uživatele a ty tam vkládat jako jednotlivé záznamy (řádky).
IdemeNaHavaj
Profil
XLP:
Tak si skontroluj ten príkaz či je naozaj nesprávne pomenovaná tabulka, alebo či nemáš v tej tabulke nejaké špeciálne znaky, medzeru atd.. Vypíš si ten príkaz ako vyzerá a ručne ho skopíruj do PMA -> SQL a uvidíš či je názov skutočne správny alebo nie. A keď nie, uvidíš čo je tam nesprávne a to potom môžeš opraviť.

Alphard:
Ono je dobře, že to z nějakého důvodu nefunguje, protože hůř to vymyslet nejde.
ešte mohol vytvárať celíé databázy :D
XLP
Profil *
Alphard:
Se vší úctou, víte houby, jaké s tím mám úmysly, to co jste vy napsal, je pro mne nepoužitelné. Takže díky za radu, kterou jsem absolutně nehledal ��
pcmanik
Profil
XLP:
Pokým nám svoje úmysli nenapíšeš, tak lepšiu radu nedostaneš. Vytvárať programovo tabuľky a ešte pre každého užívateľa je v 99.99% prípadov zlé riešenie.

Mimochodom mysql_* funkcie sú deprecated a v PHP7 boli zmazané.
Hando
Profil
XLP:
Jak již psali kolegové včetně Alpharda (nehledě na to, že moderátoři zde nejsou jen tak pro ozdobu, ale vědí dobře, co radí), tohle je prostě špatný přístup k řešení problému.
Kdykoliv, kdy potřebuješ kvůli nějaké opakující se akci přidávat sloupce či rovnou vytvářet tabulky, tak je to špatný návrhový vzor, resp. datový model. A i když víme houby, jaké s tím máš úmysly (pokud nechceš někomu zbytečně zasírat server :) ), tak je to upozornění na chybu hned v začátku. Lepší, než to potom předělávat.
Nedovedu si představit, jaké by tvé řešení mohlo mít důvody.

Když si vytvoříš tabulku např. 'users' se slouci ID, nick, email, password... atd., tak každého uživatele vložíš jako další záznam a s tím pak můžeš dělat více věcí, než s kvantem tabulek.
XLP
Profil *
Díky, uznávám, třeba to není moudré řešení, ale schválně:

Každý uživatel po logu zadavá nějaké údaje do formuláře, opakovaně, například 10x za měsíc. Chci je jednoduše zobrazovat v jedné tabulce se všemi daty, co kdy tento daný uživatel zadal. Sám uživatel je samozřejmě veden s nickem, heslem a dalšími "osobními" údaji v jedné samostatné tabulce určené pouze pro uživatele.

Jak byste to řešili vy ?

PS: původní problém vyřešen, problém byl ve špatné syntaxi a ukládaných hodnotách v session.
pcmanik
Profil
XLP:
Budeš mať dve tabuľky a to užívatelia a logy a následne ich pri výpise spojíš. Niečo ako:

SELECT u.*, l.*
FROM users u
LEFT JOIN logs l ON l.id_user = u.id
WHERE u.id = ID_UZIVATELA

Snaď som pochopil správne čo chceš
Hando
Profil
To je celkem běžný problém, pokud potřebuješ uchovávat třeba profily po změně. Máš tabulku, kde je jasně určen účet a pak jsou (klidně přes cizí klíče) připojeny další tabulky, třeba s detailem osobních údajů. Pokud se něco změní, uložíš nové údaje a v tabulce uživatelů aktualizuješ odkaz na nové údaje v tabulce s detaily. To ti zajistí, že třeba v případě nějaké registrace jsi schopen dohledat původní údaje, i když si uživatel několikrát změnil třeba adresu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0