Seite 1 von 1

Zwei SQL Werte gleichzeitig in mehrere tabellen schreiben?

Verfasst: Do 02.Mär, 2006 18:04
von mcfly
Hallo ich versuche mich gerade an kleineren anpssungen an meine anderen seiten und müßte dazu wissen wie ich zwei werte gleichzeitig in drei oder vier verschiedene tabellen schreiben kann?

normal ist es ja so

$sql = "INSERT INTO " . $table_prefix . "tabelle1 (wert1, wert2, wert3) VALUES (NULL, '$wert1', '$wert2', '$wert3')";

Nur wie kriegt man es hin das diese werte nun auch in tabelle 2 3 und 4 gleichzeitig eingetragen werden?

Wäre über hilfe Eurerseits sehr erfreut

Verfasst: Fr 03.Mär, 2006 00:14
von oxpus
Nur mit weiteren INSERT INTO. Für jede Tabelle einmal.
Diese Befehle lassen sich NICHT kombinieren!
Wäre auch logisch falsch, das zu versuchen...

Verfasst: Fr 03.Mär, 2006 00:28
von mcfly
Also ich habe das nun so versucht:

Code: Alles auswählen

$sql = "INSERT INTO " . $table_prefix . "usercars (usercars_id, user_id, usercars_pic, usercars_carname, usercars_mods, usercars_cylinders, usercars_desc, usercars_exhaust, usercars_power, usercars_topspeed) VALUES (NULL, '$user_id', '$usercars_pic', '$usercars_carname', '$usercars_mods', '$usercars_cylinders', '$usercars_desc', '$usercars_exhaust', '$usercars_power', '$usercars_topspeed')";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, $lang['L_USERCARS_MOD1'], '', __LINE__, __FILE__, $sql);
}
$sql = "INSERT INTO " . $table_prefix . "usersystemboard (usercars_id, user_id) VALUES (NULL, '$user_id', '$usercars_carname')";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, $lang['L_USERCARS_MOD1'], '', __LINE__, __FILE__, $sql);
}
Ich hoffe das ist erstmal im Grundgedanken nicht verkehrt oder?

Leider wird dann aber eine Fehlermeldung rausgegeben
Fehler beim Eintragen in die Datenbank

DEBUG MODE

SQL Error : 1136 Column count doesn't match value count at row 1

INSERT INTO phpbb_usersystemboard (usercars_id, user_id) VALUES (NULL, '2', 'hhhhhhhhhhh')
Die Tabellen sind komplett gleich als test und da ich später auch nur die userid´s und namen brauche habe ich den hoffentlich ordentlich aus dem insert entfernt.

Nur was ist daran falsch oder stimmt der ganze ansatz nicht?

Verfasst: Fr 03.Mär, 2006 00:35
von oxpus
Die Tabellen ja, das bestreite ich jetzt mal nicht.
Der Ansatz ist auch korrekt.
Aber:

Wenn Du schon die Felder usercars_id und user_id (also 2 Felder!) in dem INSERT INTO vorgibst, aber dann 3 Werte, nämlich hier NULL, 2 und hhhhhhhhhh speichern willst, dann kann die Datenbank nur ein
Column count doesn't match value count
zurückgeben ;)

Kurzum: Die Feldnamen definierst Du ja und genau in dieser Reihenfolge UND ANZAHL sind auch die Werte in das INSERT INTO einzutragen.
Sonst passt die Anzahl der Werte nicht zu den Feldern und die Datenbank hat dann ein Problem, den Befehl korrekt auszuführen.
Denn:
Welchen Wert dürfte Sie dann fallen lassen??? ;)

Verfasst: Fr 03.Mär, 2006 10:22
von mcfly
Na super warum muß es immer erst mit deiner Hilfe merken das ich was falsch gemacht habe.

Da das nun so funktioiniert wie ichs mir vorgestellt habe und ich ja die entsprechenden Einträge löschen oder editieren möchte habe ich das nun auch passend dort eingesetzt. Und funktioniert auch mit sämtlichen texabschnitten und dem standardbild vom usercarsmod.

Nun hab ich mir meine umstellung des usercars mods mal genauer überlegt und habe gedacht es wäre doch eigentlich auch möglich das ich anstelle zusätzlicher Felder dort einzufügen und dann die eingabe zu verteilen auf zwei seiten, ich den mod doppelt nutze mit zwei datenbanken oder?

Dann könnten die User ja auch verschiedene bidler hochladen für jede seite. Oder mach ich da nun die falsche überlegung/den falschen gedanken?

Wenn ich das dann auch mit dem ersten löschen möcht wäre doch dieser code verantwortlich oder?

Code: Alles auswählen

$sql = "SELECT usercars_pic FROM " . $table_prefix . "usercars WHERE usercars_id = " . $usercars_id;
if ( ($result = $db->sql_query($sql)) )
{
while ( $row = $db->sql_fetchrow($result) )
{
unlink("./".$row['usercars_pic']);
}
}
Kann ich nun das einfach nochmal mit der zweiten Tabelle machen und muß es dabei der gleiche ordner sein wo die bilder gespeichert werden? oder wie ließe sich das bewerkstelligen

Verfasst: Fr 03.Mär, 2006 13:02
von oxpus
Das kann ruhig der gleiche Ordner sein. Es wird ja der Bildname eingetragen und der kann ja egal wo gespeichert vorzufinden sein.
Und wenn Du mit 2 "Datenbanken" Tabellen meinst, dann ja, wäre vielleicht hierfür, also für 2 Seiten, das Geschickteste...

Verfasst: So 05.Mär, 2006 12:32
von mcfly
Also ich habe es nun ordentlich gemacht das wenn ich in der ersten datei alles speichere in der zweiten damit drei werte gespeichert werden. Leider habe ich nun probleme sonstige einstellungen in der zweiten zu speichern es wird irgendwie garnichts abgespeichert. Was kann ich da nun machen?

Egal was ich versuche ich schaffe es nicht die simpelsten werte dort speichern zu lassen. selbst die orginal datei macht probleme dabei und in der habe ich dann nur die datenbankangaben geändert.

Kanns da irgendwas geben was ich übersehe?

Verfasst: So 05.Mär, 2006 15:25
von oxpus
Was hast Du denn an SQL-Anweisungen erstellt?

Verfasst: So 05.Mär, 2006 19:14
von mcfly
Also das sind die zwei Dateien

Die orginale mit der erstn dbtabelle wo jetzt nur eben drei werte in die zweite gleich mit eingetragen geändert oder ausgetragen werden.

usercars

und hier nun die datei die dazu gekommen ist in der eigentlich noch die orginaldaten stehen bis auf den tabellenname

usercars zweite seite


Kann das vielleicht irgendwas mit den Bildern zutun haben? Weil eigentlich muß ich ja beim erstellen solch eines eintrags im orginal immer ein bild mit hochladen.

Verfasst: Mo 06.Mär, 2006 01:10
von oxpus
Nochmal für Langsame wie mich:
Welche Daten sollen denn in mehrere Tabellen gleichzeitig geschrieben werden und was hast Du bislang genau dafür programmiert?
Wenn nur ein Bild hochzuladen ist, dann muss das nicht auch verdoppelt werden. Und das hat auch nichts mit den SQL-Anweisungen zu tun. Die Datenbank interessiert ja auch weniger, ob Dateien auf den Webspace geladen werden oder nicht ;)

Verfasst: Mo 06.Mär, 2006 01:26
von mcfly
Ich habe es mir so gedacht das die werte usercars_id, user_id und usercars_carname sofort beim erstellen in die orginaltabelle (usercars) und in die zweite (usersystemboard) geschrieben werden. dadurch würden die daten in beiden tabellen pbereinstimmen sodas die zweite tabelle eigentlich nur eine erweiterung der angaben bewirkt welche ich auf einer zweiten seite plazieren möchte. das funktioniert auch bestens ich kann beim erstellen bearbeiten und löschen den jeweiligen eintrag aus beiden Tabellen entfernen. Danach habe ich eine kopie der orginal php genommen die tabellenangaben auf die zweite tabelle geändert und die datei umbenannt (usersystemboard). natürlich auch eine tpl dafür gemacht. Nun wollte ich einen eintrag dort bearbeiten und speichern und da ist mein problem. Ich kann zwar so wie auf der ersten seite die einträge bearbeiten aber beim speichern gibt es probleme. Dazu dachte ich das auf der zweiten seite (usersystemboard nun das hochladen von bildern nicht als pflicht haben zu wollen entweder man lädt hoch oder nicht, aber dafür habe ich bisher noch nichts gemacht weil ich erstmal das speichern fertig haben wollte.
Tja da wären nun meine Fragen was ich falsch mache oder ob ich einen kompletten denkfehler mach oder hängt das vielleicht doch jetzt schon von dem pflichtbild ab?



Naja das war zwar mit der themaerstellung nicht das was ich zuerst wollte (damit hast du mir schon sehr geholfen) aber dadurch das ich alles mit dem mod getestet hatte fand ich diese art der umstellung und aufteilung vom gedanken her nicht schlecht.

Verfasst: Mo 06.Mär, 2006 07:49
von Bootenks
ich habs jetzt auch versucht zu verstehen komme aber nicht dahinter was der Zweck sein sollte... Aber eins gilt in der Datenbankwelt => Erzeuge nie redundante Datenbankeinträge! (Ineffizienz vorprogrammiert) Es gibt da ein Stufenmodell, das die Reduktion beschreibt. Man sollte wenn schon immer mit Keys arbeiten, die wiederurm unique sein müssen! Viele Regeln kurzer Sinn! Was du versuchst versteh ich nicht und scheint unpraktisch wie useless zu sein. *sorry about that*

Verfasst: Mo 06.Mär, 2006 10:50
von mcfly
Also wenn ich das mal ordentlich hinkriege dann kannst es dir später ja ansehen was ich damit bezwecken möchte.

Aber was meinst du nun mit den Datenbankeinträgen das kapier ich nun leider nicht. Ist das mein Fehler oder wie?