Homepage selbermachen 7.852 Themen, 35.619 Beiträge

Mit 1 Formulareingabe 2 DBs auf 2 versch. Servern füttern

Heinz_Malcher / 23 Antworten / Baumansicht Nickles

Hallo,
ich hatte das Problem zwar neulich schonmal mit Borlander besprochen, bin aber zu keiner Lösung gekommen.

Folgendes, grundsätzliches Problem möchte ich lösen.
Daten werden auf Server A in Datenbank A per Formular eingetragen. Soweit so gut. Aus speziellen Gründen müssen diese Daten auch in Datenbank B auf Server B. Also soll mit einer Formulareingabe gleich zweimal eine Eintragung stattfnden, jedoch in 2 verschiedene DBs, die auf verschiedenen Servern liegen.
Bis jetzt habe ich das nicht hinbekommen, mit dem Script auf DB B zuzugreifen, da das Script auf Server A liegt. Wahrscheinlich Sicherheitsprobleme. Wer kann mir helfen?
Meine Idee war dann, die Formulareingabe erstmal in einer Textdatei zwischenzuspeichern und von dort aus dann in DB B zu senden - jedoch äusserst komliziert und vielleicht unnötig, wenn jemand von euch eine Idee hat. Vielleicht gibt es eine einfache Lösung auf die ich momentan nicht komme

bei Antwort benachrichtigen
xafford Heinz_Malcher „Mit 1 Formulareingabe 2 DBs auf 2 versch. Servern füttern“
Optionen

Wenn die Datenbank auf der B nur an localhost gebunden ist, dan kommst Du ohne serverseitiges Script auf Server B natürlich nicht ran. Wenn die Datenbank auf Server B aber an die externe IP gebunden ist sollte es problemlos gehen.
Allerdings ist dies eine unglückliche Lösung, eine Synchronisation der Datenbanken ist effektiver und eleganter.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Wenn die Datenbank auf der B nur an localhost gebunden ist, dan kommst Du ohne...“
Optionen

Wie würde man eine synchronisation erreichen?

Danke für Deine Hilfe

bei Antwort benachrichtigen
xafford Heinz_Malcher „Wie würde man eine synchronisation erreichen? Danke für Deine Hilfe“
Optionen

Es gibt 2 Wege. Den ofiziell dokumentierten und den praktischen.
Der ofiziell dokumentierte Weg ist eine Replikation nach dem Master-Slave Prinzip. Die Datenbank A ist Master und B repliziert alle x Intervalle mit A. Wie es genau eingerichtet wird müsstest Du in der Doku nachschlagen, das weiß ich nicht auswendig, es kann allerdings sein, daß Du bei deinem Server gar nicht die ausreichenden Rechte hast um dies zu konfigurieren.
Der pragmatische Weg wäre einfach Datenbank B die Dateien von Datenbank A unter zu schieben, denn diese sind binärkompatibel. Kopierst Du alle Dateien von Datenbank A nach Server B, so steht dort auch Datenbank A zur Verfügung.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Es gibt 2 Wege. Den ofiziell dokumentierten und den praktischen. Der ofiziell...“
Optionen

Gleich vorweg - die Rechte habe ich leider nicht :-)

Der Zweite Weg wäre meinst du, einfach einen DUMP ziehen? Etwas anderes wird mir nicht übrig bleiben, schade, ich wollte eigentlich einen automatischen Weg einschlagen

bei Antwort benachrichtigen
xafford Heinz_Malcher „Gleich vorweg - die Rechte habe ich leider nicht :- Der Zweite Weg wäre meinst...“
Optionen

Nein, keinen Dump. Einfach die binären Dateien unter /data/datenbankname von A nach B kopieren.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Nein, keinen Dump. Einfach die binären Dateien unter /data/datenbankname von A...“
Optionen

Aber auch hierzu brauche ich entsprechende Berechtigungen oder? Gibt es da tatsächlich keine andere Lösung, nicht einmal über Umwege?

Es handelt sich dabei um ganz normale Accounts also nichts mit eigenem Datenbankserver etc. Man ist kunde bei 1&1 und ein andermal bei einem anderen Provider

bei Antwort benachrichtigen
xafford Heinz_Malcher „Aber auch hierzu brauche ich entsprechende Berechtigungen oder? Gibt es da...“
Optionen

Wenn die Datenbank nicht über die externe IP zu erreichen ist und Du keine Rechte hast, dann kannst Du es nur via Script auf dem Server lösen, daß seine Daten zur Eintragung vom Script auf dem anderen Server erhält.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Wenn die Datenbank nicht über die externe IP zu erreichen ist und Du keine...“
Optionen

Also eine eigene URL zur Datenbank habe ich jeweils aber, wenn ich einfach den nötigen Code in den Quelltext einfüge, um einfach die Daten zweimal einzufügen, werden zwar Einträge getätigt, aber leere, das heisst, die Variablen werden nicht in die Datenbank B übertragen, die Felder bleiben leer - es gibt also leere Zeilen

bei Antwort benachrichtigen
xafford Heinz_Malcher „Also eine eigene URL zur Datenbank habe ich jeweils aber, wenn ich einfach den...“
Optionen

register globals = Off?

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „register globals Off?“
Optionen

ist bei beiden Providern ON

bei Antwort benachrichtigen
xafford Heinz_Malcher „ist bei beiden Providern ON“
Optionen

Übergib mal dem Script auf Server B manuell die Parameter und laß dir das SQL_Statement ausgeben im Browser um einzugrenzen, ob der Fehler bei der Übergabe schon auftritt.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Übergib mal dem Script auf Server B manuell die Parameter und laß dir das...“
Optionen

er meldet, dass er die verbindung zu DB Server B garnicht erst aufbauen kann. allein das ist schon verwunderlich, da nämlich der server sql.domain.com heisst, also die verbindung müsste auf jeden fall klappen

bei Antwort benachrichtigen
xafford Heinz_Malcher „er meldet, dass er die verbindung zu DB Server B garnicht erst aufbauen kann....“
Optionen

Willst Du die Verbindung von Server A oder Server B aus aufbauen? Wenn von A, dann ist eventuell keine Verbindung von A aus erlaubt, wenn von B aus, dann frag den Provider was nicht stimmt.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Willst Du die Verbindung von Server A oder Server B aus aufbauen? Wenn von A,...“
Optionen

Derzeit sieht das so aus:

--> Dateiname: test.php liegt auf Server A
-----> Die Date enthält das Formular und den MySQL Befehl, Daten in die eigene Datenbank einzutragen, also in DB A ... und gleichzeitig enthält sie den code:
$datenbank_b = mysql_connect(....);
mysql_select_db(...)
mysql_query(insert into....);
um die Verbindung aufzubauen und die Daten in B einzutragen.


Angenommen, es ist nicht erlaubt eine externe Verbindung aufzubauen, was kann man dagegen tun?

bei Antwort benachrichtigen
xafford Heinz_Malcher „Derzeit sieht das so aus: -- Dateiname: test.php liegt auf Server A ----- Die...“
Optionen
Angenommen, es ist nicht erlaubt eine externe Verbindung aufzubauen, was kann man dagegen tun?
Keine externe Verbindung aufbauen!
Laß die Arbeit des Eintragens ein Script auf Server B erledigen, dort müsste die Verbindung klappen.
Alternativ kannst Du auch mit dem Provider reden, daß er HostA in die Allow einträgt.
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Angenommen, es ist nicht erlaubt eine externe Verbindung aufzubauen, was kann...“
Optionen

Das klingt gut, allerdings müsste ich dazu die Variablen nach Server B übermittelt bekommen, wie würdest du das machen - ist sicher simpel aber ich raff es derzeit nicht, wie das gehen soll bzw. wie ich das formular einmal auf server a und dann nochmal auf server b lenken soll

An dieser stelle sei mal ein dickes Lob an dich ausgesprochen, dass du dich meinem Problem annimmst !!!

bei Antwort benachrichtigen
xafford Heinz_Malcher „Das klingt gut, allerdings müsste ich dazu die Variablen nach Server B...“
Optionen

Hmm...es gibt mehrere Möglichkeiten, wie Du das machen kannst. Die einfachste ist das Script auf ServerB direkt aus dem Script auf ServerA mit den entsprechenden Parametern aufzurufen.
Hier ein kleines Beispiel:

Du willst z.B. in die Datenbank folgendes Eintragen:
name='Heinz'
nachname='Malcher'
jetzt arbeitest Du auf Server A ganz normal dein Script zum Eintragen ab, ans Ende baust Du folgendes:
include('http://die-adresse-deines-servers?name=Heinz&nachname=Malcher');

Das Script auf ServerB sieht dann ungefähr so aus:

$name=isset($HTTP_GET_VARS['name'])? $HTTP_GET_VARS['name'] : false;
$nachname=isset($HTTP_GET_VARS['nachname'])? $HTTP_GET_VARS['nachnamename'] : false;
if($name&&$nachname)
{
$sql="INSERT INTO db SET name='$name',nachname='$nachname'";
mysql_query($sql);
}

Das Script is natürlich nicht vollständig und Du solltest auch eine Überprüfung für den referer einbauen, damit niemand die DB vollspammt, aber grundsätzlich sollte es so gehen.
Man kann es aber auch noch komplizierter bauen mit Sockets und POST-Variablen.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Hmm...es gibt mehrere Möglichkeiten, wie Du das machen kannst. Die einfachste...“
Optionen

Vielen Dank, das werde ich versuchen.

Danke nochmal !

bei Antwort benachrichtigen
Heinz_Malcher Nachtrag zu: „Vielen Dank, das werde ich versuchen. Danke nochmal !“
Optionen

Dsa Script klappt, solange jede übermittelnde Variable aus genau einem Wort besteht

Bsp:

heisst die Variable $a ="hallo"; dann geht es ohne Probleme, heisst sie ber $a ="hallo du"; gibt es fehler und zwar diesen hier:

Warning: Failed opening 'http://www.domain.com/extern.php?headline=test test&volltext=test test&teaser=test test' for inclusion (include_path='.:/usr/share/pear') in /home/www/web/scripts/types/standard.php on line 310

bei Antwort benachrichtigen
xafford Heinz_Malcher „Script klappt - aber nur wenn Variable aus einem Wort besteht“
Optionen

codiere die Variableninhalte mittels urlencode(variable) und decodiere sie auf der Gegenseite, alternativ ginge auch ein base64encode und decode.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Script klappt - aber nur wenn Variable aus einem Wort besteht“
Optionen

Klasse: Mit urldecode geht es klasse, daher also:

for($i=0;$i {
echo "Tausend Dank an Xafford!!!";
}

bei Antwort benachrichtigen
xafford Heinz_Malcher „Script klappt - aber nur wenn Variable aus einem Wort besteht“
Optionen

Das sind dann aber 1001 ;o)

*klugscheiss*

ps: keine ursache.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Heinz_Malcher xafford „Script klappt - aber nur wenn Variable aus einem Wort besteht“
Optionen

ups stimmt - hmpf :-)

bei Antwort benachrichtigen