Frage von theplayer95, 53

SQL: Benutzername in andere Tabelle eintragen?

Hallo, ich bin gerade dabei ein Forum zu programmieren und habe eine Tabelle mit den Benutzern und deren Daten wie Passwörter etc. Nun habe ich eine Tabelle erstellt die Forum heißt und ich möchte jetzt das jedes mal wenn jemand etwas in das Forum schreibt der Benutzername mit dem er eingeloggt ist in die Tabelle Forum als String gespeichert wird. Ich weis das es mit ein Fremdschlüssel gemacht werden muss aber in mein PHP My Admin kann ich leider nicht so einfach Beziehungen erstellen sondern nur über die SQL Eingabe. ich hoffe mir kann jemand helfen was ich schreiben muss damit der Fremd Schlüssel erstellt wird und wie ich das in PHP schreibe so das ich den Fremdschlüssel auch nutzen kann.

Hier die Tabellen:

    CREATE TABLE IF NOT EXISTS `13048798_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) NOT NULL,
  `firstname` varchar(20) NOT NULL,
  `lastname` varchar(20) NOT NULL,
  `street` varchar(50) NOT NULL,
  `zip_code` varchar(5) NOT NULL,
  `city` varchar(40) NOT NULL,
  `message` text NOT NULL,
  `password` varchar(128) NOT NULL,
  `email` varchar(60) NOT NULL,
  `activ` tinyint(1) NOT NULL,
  `rank` tinyint(1) NOT NULL DEFAULT '1',
  `logged_in` tinyint(4) NOT NULL,
  `pwv` varchar(40) NOT NULL,
  `actlink` varchar(40) NOT NULL,
  `pb` text NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_login` datetime NOT NULL,
  PRIMARY KEY (`id`)
)

CREATE TABLE IF NOT EXISTS `13048798_forum` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `user` varchar(30) COLLATE latin1_german2_ci NOT NULL,
  `header` text COLLATE latin1_german2_ci NOT NULL,
  `main` text COLLATE latin1_german2_ci NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `user` (`user`)
)

Vielen dank!

Antwort
von sudorc, 39

Als kleinen Tipp: Ich würde die primären Schlüssel sprechend benennen.

In der Tabelle user also user_id. Das hat den Vorteil das du deine DB-Struktur später besser lesen kannst und auch beim Schreiben von Code hast du es dann leichter.

Ich würde in deinem Fall wie folgt vorgehen.

Wenn ein User sich anmeldet, würde ich die Daten, also mindestens die user_id in eine Sessionvariable speichern. Mit dessen Hilfe kannst du dann beim Speichern des Forumeintrags die user_id wunderbar mit in die forum Tabelle abspeichern. User_id deshalb, weil diese eindeutig ist, im Gegensatz zu einem Namen.

Später, beim Anzeigen des Beitrags holst du dir ja aus der DB die Daten von diesem und kannst mit Hilfe der user_id dir auch die Daten des Nutzers holen.

Das funktioniert dann auch wunderbar anders herum, wenn du dir z.B. alle Einträge von Nutzer xy anzeigen lassen willst.


Kommentar von theplayer95 ,

Vielen Dank für deine tipps aber ich habe vergessen zu erwähnen das ich nicht am anfang bin die Seite aufzubauen :D

Ich habe die Seite schon so gut wie Fertig und wollte nur noch ein kleines Forum hinzufügen wo man sich austauschen kann. Ich weis nur nicht wie ich das Problem löse mit dem Fremdschlüssel und das der Name von tabelle '_user' in die Tabelle '_forum' bei ein neuen eintrag kopiert wird.

Kommentar von Unsinkable2 ,

Als kleinen Tipp: Ich würde die primären Schlüssel sprechend benennen. In der Tabelle user also user_id.

Kleiner Tipp: Das ist bereits geschehen:

13048798_user.Id


Redundante Benennungen verbessern die Lesbarkeit nur, wenn weitere Id-Werte gepflegt werden sollen:

13048798_user.User_Id
13048798_user.Address_Id
...



Antwort
von EightSix, 7

Es geht in PHPMyAdmin sehr einfach Beziehungen zu erstellen. Verstehe aber nicht wozu das für die Abfrage der Benutzernamen zwingend notwendig sein sollte. Du kannst dir ja ein SELECT Statement basteln wie du willst.

Werte doppelt in eine DB zu speichern ist schlechtmöglichste Praxis.

Keine passende Antwort gefunden?

Fragen Sie die Community