Seite 3 von 3

Re: Via php/html etwas in die datenbank schreiben

Verfasst: Mi Jun 22, 2016 9:05 pm
von sashpta
Geht nur wenn ich nichts für "username" eingebe
sonst kommt diese Meldung:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`forum`.`eintrag`, CONSTRAINT `eintrag_ibfk_1` FOREIGN KEY (`username`) REFERENCES `user` (`Username`))

Re: Via php/html etwas in die datenbank schreiben

Verfasst: Mi Jun 22, 2016 9:23 pm
von mfro
sashpta hat geschrieben:Geht nur wenn ich nichts für "username" eingebe
sonst kommt diese Meldung:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`forum`.`eintrag`, CONSTRAINT `eintrag_ibfk_1` FOREIGN KEY (`username`) REFERENCES `user` (`Username`))
'username' muss natürlich in der user-Tabelle existieren. Daß es mit 'nichts' geht, liegt daran, daß wir 'NOT NULL' vergessen haben...

So geht's jedenfalls:

Code: Alles auswählen

CREATE TABLE user (Username CHAR(16) PRIMARY KEY, Email CHAR(32), Password CHAR(16));
CREATE TABLE eintrag (eintragID INT AUTO_INCREMENT PRIMARY KEY,
                      username  CHAR(16),
                      INDEX user_ind(username),
                      FOREIGN KEY (username) REFERENCES user(Username)
                      ON DELETE CASCADE);
INSERT INTO user (Username, Email, Password) VALUES ('Sepp', 'sepp@sepp.com', 'geheim');
INSERT INTO eintrag (username) VALUES ('Sepp');
SELECT * FROM eintrag;
DELETE FROM user WHERE Username = 'Sepp';

Re: Via php/html etwas in die datenbank schreiben

Verfasst: Mi Jun 22, 2016 9:45 pm
von sashpta
Danke, klappt :)

Also muss ich immer wenn ich etwas in "user" speicher den selben Namen auch in "eintrag" speichern oder? weil sonst ist nicht in der Tabelle "eintrag".

Wenn ich das dann auf nen Forumeintrag übertrage heißt das quasi, dass ich mit HTML ein Eingabefeld mache, das was da eingegeben wird mit PHP in einer Variable speicher und dann die Variable anstatt z.B. nen Namen rein mache. Das mit dem Namen mache ich dann bei "user" und "eintrag". Oder hab ich da was falsch verstanden?

Re: Via php/html etwas in die datenbank schreiben

Verfasst: Mi Jun 22, 2016 10:05 pm
von mfro
sashpta hat geschrieben:...Oder hab ich da was falsch verstanden?
Nein, das passt schon.

Allerdings macht man das eigentlich anders herum.

Zuerst werden die Datenbanktabellen bzw. Relationen definiert und anschliessend normalisiert (vereinfacht). Wenn das Datenbankmodell steht, macht man sich Gedanken, wie das UI dazu aussehen soll.

Eine (ernsthafte) Datenbank ist nichts, wo man einfach immer wieder ein Stück "anklebt".

Re: Via php/html etwas in die datenbank schreiben

Verfasst: Mi Jun 22, 2016 10:10 pm
von sashpta
Hmm oke, mal sehen wies so klappt :D

Wenn ich ein Eingabefeld mit HTML mache, ist das ja dann so:

Code: Alles auswählen

 <form action="action_page.php">
  First name:<br>
  <input type="text" name="firstname" ><br>
  Last name:<br>
  <input type="text" name="lastname"><br><br>
  <input type="submit" value="Submit">
</form> 
allerding sende ich da ja das was eingegeben wurde an die "action_page.php"
Wie mache ich, dass denn, dass es anstatt dahin gesendet zu werden in die Datenbank gepackt wird ?

Re: Via php/html etwas in die datenbank schreiben

Verfasst: Mi Jun 22, 2016 11:24 pm
von Xin
sashpta hat geschrieben:Danke, klappt :)

Also muss ich immer wenn ich etwas in "user" speicher den selben Namen auch in "eintrag" speichern oder? weil sonst ist nicht in der Tabelle "eintrag".
Du kannst nichts in Eintrag schreiben, was keinem User zugeordnet werden kann.

Ich weiß nicht, wo Du die CREATE TABLE Befehle herhast, aber es wäre schon von Vorteil, wenn Du verstehst, was das bedeutet :D

Vielleicht liest Du Dich erstmal in den Aufbau von Datenbanken ein, liest mal die Normalformen nach und "designst" zuerstmal die Tabellen und die Relationen dazwischen.

Re: Via php/html etwas in die datenbank schreiben

Verfasst: Do Jun 23, 2016 5:53 am
von sashpta
Ja also theoretisch weiß ich das aber ich wusste z.b. Nicht dass man da auch Beziehungen in der Praxis machen kann :o