2 Tabellen einer MySQL-Datenbank auf einmal updaten

wallis

Mitglied
Hallo Freunde,

ich habe zwei Tabellen in meiner Datenbank ("adressen" und "magazine") welche ich gleichzeitig updaten möchte.

Folgendermaßen sieht mein UPDATE-Befehl aus:

PHP:
$sql = "UPDATE adressen SET
	Firma = '".$firma."',
	Branche = '".$branche."',
	
	Vorname = '".$vorname."',
	Nachname = '".$nachname."',
	Strasse = '".$strasse."',
	Hausnummer = '".$hausnummer."',
	PLZ = '".$plz."',
	Ort = '".$ort."',

	Festnetz = '".$festnetz."',
	Mobil = '".$mobil."',
	Email = '".$email."',
	Homepage = '".$homepage."',
	
	Termine = '".$termine."',
	Empfehlung = '".$empfehlung."',
	Notiz = '".$notiz."', 
	Ergebnis = '".$ergebnis."';
	
	AR_Sprockhovel = '".$ar_sprockhovel."',
	AR_Hattingen = '".$ar_hattingen."',
	AR_Witten = '".$ar_witten."',
	AR_Bochumsued = '".$ar_bochumsued."'
	
WHERE ID = ".$id;

Allerdings sollen auch folgende Werte in eine andere Datenbank mit dem Namen "magazine" geupdatet werden.

PHP:
AR_Sprockhovel = '".$ar_sprockhovel."',
AR_Hattingen = '".$ar_hattingen."',
AR_Witten = '".$ar_witten."',
AR_Bochumsued = '".$ar_bochumsued."'

Ist das machbar? Wenn ja wie geht das?#

Ich bitte um eine ausführliche Hilfestellung. Vielen vielen Dank******
 
Also eine gekürzte Version könnte so aussehen:

SQL:
UPDATE adressen, magazine SET adressen.Firma = '{$firma}', adressen.Branche = '{$branche}', adressen.AR_Sprockhovel = '{$ar_sprockhovel."}', adressen.AR_Hattingen = '{$ar_hattingen}', magazine.AR_Sprockhovel = '{$ar_sprockhovel."}', magazine.AR_Hattingen = '{$ar_hattingen}' WHERE adressen.ID = {$id} OR magazine.ID = {$id}

Ungetestet und ohne Gewähr !
 
Hallo TOMBE,

danke für deine Hilfe, doch leider macht er kein UPDATE.

PHP:
$sql = "UPDATE adressen, magazine SET
	adressen.Firma = '".$firma."',
	adressen.Branche = '".$branche."',
	
	adressen.Vorname = '".$vorname."',
	adressen.Nachname = '".$nachname."',
	adressen.Strasse = '".$strasse."',
	adressen.Hausnummer = '".$hausnummer."',
	adressen.PLZ = '".$plz."',
	adressen.Ort = '".$ort."',

	adressen.Festnetz = '".$festnetz."',
	adressen.Mobil = '".$mobil."',
	adressen.Email = '".$email."',
	adressen.Homepage = '".$homepage."',
	
	adressen.Termine = '".$termine."',
	adressen.Empfehlung = '".$empfehlung."',
	adressen.Notiz = '".$notiz."', 
	adressen.Ergebnis = '".$ergebnis."';
	
	magazine.AR_Sprockhovel = '".$ar_sprockhovel."',
	magazine.AR_Hattingen = '".$ar_hattingen."',
	magazine.AR_Witten = '".$ar_witten."',
	magazine.AR_Bochumsued = '".$ar_bochumsued."'
	
WHERE adressen.Id = ".$id." OR magazine.Id = ".$id;

Die Variablen erhalte ich per POST und diese sehen so aus:
PHP:
$id = $_GET['id']; 

$sql = "SELECT * FROM adressen ORDER BY id ASC"; 
$ausgabe = mysql_query($sql); 
$data = mysql_fetch_array($ausgabe); 

//** VARIABLEN ZUR UEBERGABE IN DIE DATENBANK AUS FORUMLAR FUELLEN  **//

$id = $_POST["id"]; 
$firma = $_POST["Firma"];
$branche = $_POST["Branche"]; 

$vorname = $_POST["Vorname"]; 
$nachname = $_POST["Nachname"]; 
$strasse = $_POST["Strasse"]; 
$hausnummer = $_POST["Hausnummer"]; 
$plz = $_POST["PLZ"]; 
$ort = $_POST["Ort"]; 

$festnetz = $_POST["Festnetz"]; 
$mobil = $_POST["Mobil"]; 
$email = $_POST["Email"]; 
$homepage = $_POST["Homepage"];

$termine = $_POST["Termine"]; 
$empfehlung = $_POST["Empfehlung"]; 
$notiz = $_POST["Notiz"]; 
$ergebnis = $_POST["Ergebnis"];

$ar_sprockhoevel = $_POST["AR_Sprockhoevel"];
$ar_hattingen = $_POST["AR_Hattingen"];
$ar_witten = $_POST["AR_Witten"];
$ar_bochumsued = $_POST["AR_Bochumsued"];

Aber daran kann es doch nicht liegen? Was mache ich denn eigentlich mal wieder falsch?
 
Gut das ich geschrieben habe "ungetestet" habe nämlich entdeckt das da ein böser Fehler enthalten ist.

Du musst bei WHERE die Bedingungen mit AND verknüpfen nicht mit OR. Sonst werden alle Datensätze geändert (sofern der Rest der Anweisung stimmt).

Geh einfach mal her und lass dir den Inhalt von $sql mit echo am Bildschirm ausgeben. Dann schaust du dir das an und prüfst auf Fehler.
Wenn du keinen Fehler finden kannst, kopiere die Ausgabe und füge sie z.B. bei phpmyAdmin ein und führe die Abfrage dort aus. Da sollte dann ein Fehler angezeigt werden.


Gut das ich geschrieben habe "ungetestet" habe nämlich entdeckt das da ein böser Fehler enthalten ist.

Du musst bei WHERE die Bedingungen mit AND verknüpfen nicht mit OR. Sonst werden alle Datensätze geändert (sofern der Rest der Anweisung stimmt).

Geh einfach mal her und lass dir den Inhalt von $sql mit echo am Bildschirm ausgeben. Dann schaust du dir das an und prüfst auf Fehler.
Wenn du keinen Fehler finden kannst, kopiere die Ausgabe und füge sie z.B. bei phpmyAdmin ein und führe die Abfrage dort aus. Da sollte dann ein Fehler angezeigt werden.


STOPP, habe den Fehler gefunden:

SQL:
adressen.Ergebnis = '".$ergebnis."';
magazine.AR_Sprockhovel = '".$ar_sprockhovel."',

Du darfst das hier nicht mit ";" abschließen. Es muss mit Komma weitergehen:

SQL:
adressen.Ergebnis = '".$ergebnis."',
magazine.AR_Sprockhovel = '".$ar_sprockhovel."',
 
Zuletzt bearbeitet:
Hab's gerade mit dem "AND" getestet. Leider auch nichts... vermute wo anders einen Fehler, kann aber keinen sehen.

Kannst du mir kurz sagen, wie und wo ich die Ausgabe mit echo erstellen soll. Bin da leider nicht ganz so im Thema... Danke!
 
Also das echo schreibst du einfach nach der Zeile wo du die SQL-Anweisung zusammen stellst und an die Variable $sql übergibst.

Lies aber nochmal meinen obigen Beitrag, da steht drin was falsch ist!
 
Es passiert leider immer noch nichts.

Wenn ich in dem UPDATE Befehl...

PHP:
magazine.AR_Sprockhovel = '".$ar_sprockhovel."',
magazine.AR_Hattingen = '".$ar_hattingen."',
magazine.AR_Witten = '".$ar_witten."',
magazine.AR_Bochumsued = '".$ar_bochumsued."'

... rausnehme dann funktioniert es einwandfrei.

Wo kann es noch dran liegen?
 
Du solltest deine POST-Übergaben auch maskieren:
PHP:
$empfehlung = mysql_real_escape_string($_POST['Empfehlung']);

Und das bei allen POST-Variablen

Und wenn dir das zu viel schreibarbeit ist, dann kannste das Post-Array in einer Schleife durchgehen und die Werte maskieren:

PHP:
$newPostArray = array();

foreach($_POST as $Key => $value){
    if(!empty($value)) $newPostArray[$Key] = mysql_real_escape_string($value);
}

Ist nicht für Arrays im POST-Array gedacht. Da müsste man ein Funktion bauen Stichwort "Iteration".
 
Zuletzt bearbeitet:
Wie oben bereits geschrieben, lass dir den Inhalt von $sql mit echo ausgeben. Das kopierst du dann a) hier rein und b) in phpmyAdmin!

UND c) auf das hören was Maniac schreibt !!
 
Habe mal die Anweisung kopiert und die Variablen mit irgendwelchen Werten gefüllt. Der einzige Fehler den ich so finden konnte war das Semikolon.

Übernimm mal diese Zeilen so und ersetze deinen Codeabschnitt damit:


PHP:
$sql = "UPDATE adressen, magazine SET
    adressen.Firma = '".$firma."',
    adressen.Branche = '".$branche."',
    adressen.Vorname = '".$vorname."',
    adressen.Nachname = '".$nachname."',
    adressen.Strasse = '".$strasse."',
    adressen.Hausnummer = '".$hausnummer."',
    adressen.PLZ = '".$plz."',
    adressen.Ort = '".$ort."',
    adressen.Festnetz = '".$festnetz."',
    adressen.Mobil = '".$mobil."',
    adressen.Email = '".$email."',
    adressen.Homepage = '".$homepage."',
    adressen.Termine = '".$termine."',
    adressen.Empfehlung = '".$empfehlung."',
    adressen.Notiz = '".$notiz."',
    adressen.Ergebnis = '".$ergebnis."',
    magazine.AR_Sprockhovel = '".$ar_sprockhovel."',
    magazine.AR_Hattingen = '".$ar_hattingen."',
    magazine.AR_Witten = '".$ar_witten."',
    magazine.AR_Bochumsued = '".$ar_bochumsued."'
WHERE adressen.Id = ".$id." AND magazine.Id = ".$id;

echo $sql;

Was natürlich noch falsch sein könnte und hier keiner weiß ob du gültige Werte übergibst. Eventuell ein Zeichen wo nur eine Zahl erlaubt wäre oder ähnliches!?
 
Zurück