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
Homepage selbermachen 7.852 Themen, 35.619 Beiträge
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.
Wie würde man eine synchronisation erreichen?
Danke für Deine Hilfe
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.
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
Nein, keinen Dump. Einfach die binären Dateien unter /data/datenbankname von A nach B kopieren.
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
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.
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
register globals = Off?
ist bei beiden Providern ON
Ü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.
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
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.
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?
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.
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 !!!
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.
Vielen Dank, das werde ich versuchen.
Danke nochmal !
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
codiere die Variableninhalte mittels urlencode(variable) und decodiere sie auf der Gegenseite, alternativ ginge auch ein base64encode und decode.
Klasse: Mit urldecode geht es klasse, daher also:
for($i=0;$i {
echo "Tausend Dank an Xafford!!!";
}
Das sind dann aber 1001 ;o)
*klugscheiss*
ps: keine ursache.
ups stimmt - hmpf :-)