4.5.2: Login-Funktionalität

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mi 10. Nov 2004, 18:56

kann ich dir leider nicht sagen...dazu müßte ich debuggen...da ich aber im Moment krankgeschrieben bin kann ich leider nicht viel nachsehen...

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 11. Nov 2004, 08:43

na dann gute besserung...
*** make your own tools (wishlist :: thx)

m.wohlers
Beiträge: 93
Registriert: Di 25. Mai 2004, 16:11
Wohnort: Bad Aibling
Kontaktdaten:

Beitrag von m.wohlers » Fr 12. Nov 2004, 09:41

Hallo timo!
timo hat geschrieben:kann ich dir leider nicht sagen...dazu müßte ich debuggen...da ich aber im Moment krankgeschrieben bin kann ich leider nicht viel nachsehen...
Danke für die Bemühungen... dann wünsche ich erstmal gute Besserung und hoffe auf baldige Genesung!
Michael Wohlers

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 12. Nov 2004, 14:36

ich hab mich noch etwas mit dem problem beschäftig und hab folgendes gefunden:
http://www.phpbuilder.com/columns/peter20001107.php3
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 12. Nov 2004, 16:56

okay ich muss da jetzt ein wenig ausholen...

ich hab jetzt ein wenig mit externen dbs herumgespielt und bin eigentlich nicht wirklich auf ein problem gestossen...

folgendes ist mir aufgefallen

ich definiere eine contenido verbindung
$db = new DB_Contenido();

anschließend frag ich etwas auf ner anderen db ab so wie du das gemacht hast...

zeigt die $db auf deine neue verbindung !

eine definition von
$dummy = new DB_Contenido();
anschließend, biegt das in der $db nicht wieder gerade... (ist auch logisch)

ein zurücksetzen muss funktionieren wenn du nach deinem code teil
nochmals
$db = new DB_Contenido();
aufrufst...

dann zeigt die $db(nur diese) wieder auf die contenido db...
alle anderen vorher initialisierten zeigen dennoch auf die falsche, solange sie nicht neu initialisiert werden...

viel einfacher kann ich es momentan nicht beschreiben...

ich hab jetzt noch folgendes ausprobiert
in conlib/local.php hab ich einfach folgendes ergänzt.

Code: Alles auswählen

class DB_External extends DB_Sql {

  var $Host;
  var $Database;
  var $User;
  var $Password;

  var $Halt_On_Error = "report";

  //Constructor
  function DB_External($Host, $Database, $User, $Password)
  {

      $this -> Host = $Host;
      $this -> Database = $Database;
      $this -> User = $User;
      $this -> Password = $Password;

  }

  function haltmsg($msg) {
    error_log($msg);
  }

  function copyResultToArray ()
  {
  		$values = array();

  		$metadata = $this->metadata();

		if (!is_array($metadata))
		{
			return false;
		}

		foreach ($metadata as $entry)
		{
			$values[$entry['name']] = $this->f($entry['name']);
		}

		return $values;
  }
}
damit kann ich zb eine neue $dbx variable definieren die auf einen anderen host zeigt...
zb:

$dbext = new DB_External("localhost", "xmb", "root", "");

die verbindung auf den neuen server und/oder db beeinträchtigt somit keinerlei bestehende verbindung

mein kleines testscript zum testen sah dann einfach so aus:

Code: Alles auswählen

<?php

$sql = "SHOW TABLES";

$db = new DB_Contenido;
$dbext = new DB_External("localhost", "xmb", "root", "");

$dbext->query($sql);
echo "x".$dbext->nf();

$db->query($sql);
echo "y".$db->nf();

?>
soweit so gut...

kommen wir zu dem punkt warum das eigentlich auftritt:
die klasse DB_Contenido beruht ja auf phplib
sobald einmal eine verbindung zu einem db server hergestellt wurde
wird die Link_ID innerhalb dieser klasse gespeichert(um nicht jedesmal wieder einen connect auf die db zu machen).

wird nun mittels
mysql_select_db (OSC_DB_DATABASE, $osc_connection);
auf ne andere db gewechselt, kann das die klasse nicht wissen !
mysql zeigt dann immer auf die zuletzt selektierte...

innerhalb der klassen funktioniert das aber ganz wunderbar...
das heisst -> mysql_db_select in der $dbext wirkt sich nicht auf die in der $db selektierten aus...
*** make your own tools (wishlist :: thx)

m.wohlers
Beiträge: 93
Registriert: Di 25. Mai 2004, 16:11
Wohnort: Bad Aibling
Kontaktdaten:

Beitrag von m.wohlers » So 14. Nov 2004, 12:01

Hallo emergence!
emergence hat geschrieben:okay ich muss da jetzt ein wenig ausholen...

ich hab jetzt ein wenig mit externen dbs herumgespielt und bin eigentlich nicht wirklich auf ein problem gestossen...

folgendes ist mir aufgefallen

ich definiere eine contenido verbindung
$db = new DB_Contenido();

anschließend frag ich etwas auf ner anderen db ab so wie du das gemacht hast...

zeigt die $db auf deine neue verbindung !

eine definition von
$dummy = new DB_Contenido();
anschließend, biegt das in der $db nicht wieder gerade... (ist auch logisch)

ein zurücksetzen muss funktionieren wenn du nach deinem code teil
nochmals
$db = new DB_Contenido();
aufrufst...

dann zeigt die $db(nur diese) wieder auf die contenido db...
alle anderen vorher initialisierten zeigen dennoch auf die falsche, solange sie nicht neu initialisiert werden...

viel einfacher kann ich es momentan nicht beschreiben...
Danke... ich habe also am Ende des Moduls ein

Code: Alles auswählen

$db = new DB_Contenido();
eingefügt - aber die Datenbankverbindung wurde nicht wie gewünscht "zurückgebogen", daß also wieder genau derselbe Fehler aufgetreten ist.
emergence hat geschrieben:
ich hab jetzt noch folgendes ausprobiert
in conlib/local.php hab ich einfach folgendes ergänzt.

Code: Alles auswählen

class DB_External extends DB_Sql {

...
 
}
damit kann ich zb eine neue $dbx variable definieren die auf einen anderen host zeigt...
zb:

$dbext = new DB_External("localhost", "xmb", "root", "");

die verbindung auf den neuen server und/oder db beeinträchtigt somit keinerlei bestehende verbindung

mein kleines testscript zum testen sah dann einfach so aus:

Code: Alles auswählen

<?php

$sql = "SHOW TABLES";

$db = new DB_Contenido;
$dbext = new DB_External("localhost", "xmb", "root", "");

$dbext->query($sql);
echo "x".$dbext->nf();

$db->query($sql);
echo "y".$db->nf();

?>
soweit so gut...
Okay, das hört sich vernünftig an... dann muß ich jetzt schauen, wie ich das Modul umbaue, um diese Klasse zu nutzen... die Bedienung ist ja ein wenig anders als direkt mit mysql_...()-Methoden...
emergence hat geschrieben: kommen wir zu dem punkt warum das eigentlich auftritt:
die klasse DB_Contenido beruht ja auf phplib
sobald einmal eine verbindung zu einem db server hergestellt wurde
wird die Link_ID innerhalb dieser klasse gespeichert(um nicht jedesmal wieder einen connect auf die db zu machen).

wird nun mittels
mysql_select_db (OSC_DB_DATABASE, $osc_connection);
auf ne andere db gewechselt, kann das die klasse nicht wissen !
mysql zeigt dann immer auf die zuletzt selektierte...

innerhalb der klassen funktioniert das aber ganz wunderbar...
das heisst -> mysql_db_select in der $dbext wirkt sich nicht auf die in der $db selektierten aus...
Das erscheint logisch... was meint jetzt timo zu dieser Ergänzung? Vielleicht gibt's ja einen "offiziellen" Lösungsansatz der Entwickler?
Michael Wohlers

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » So 14. Nov 2004, 18:30

nein, von unserer Seite gibts da keinen Lösungsansatz - zumindest wüsste ich keinen...

Gesperrt