[S] Hilfe zur erweiterung auf zusätzliche mysql db

Begonnen von Nice0ne, 21 April 2005, 20:54:32

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Nice0ne

hallo und guten abend zusammen,

ich habe ein vkp mx am laufen und zusätzlich noch ein externes chatsystem. dieses speichert die userdaten (6 per user) in einer mysql im klartext. soweit alles tutti.

nun schau ich mir eben den code von den modulen an und komm da nicht wirklich weiter.

als erstes habe ich mich an folgende datei rangemacht:
edituser.php,v 1.1.1.1 2003/08/25 22:22:05 EllselAn Exp aus \modules\Your_Account

also ich wollte damit anfangen das bestehende user wenn sie ihr passwort ändern im vkp, das passwort zusätzlich noch in klartext in der anderen db gespeichert wird...

wenn ich das mal so richtig sehe, sollte die "function saveuser" das sein was ich machen will... nur bin ich nicht wirklich der crack im coden  ;)   also komme ich da nicht weiter...

daher suche oder schreihe ich mal hier nach hilfe  :)

öhm, mal so als kleinen ansporn, wer sich so fühlt mir das vkp um diese sachen zu erweitern, also alle änderungen im vkp was die zusätzliche db betrifft, dem zahl ich bis zu 50 euro  :)  auf rechnung oder als taschengeld. wie gewünscht. jup, mir liegt die zeit im nacken. daher bitte um schnelle angebote.

ich weiss nicht genau wieviele files es wirklich sind die bearbeitet werden müssen, aber ich denke es sind nicht mehr wie 10 stück...
was ich denke:
- user edit sich selber
- user del sich selber
- user reggt sich
- user bekommt pw per mail (admin freischaltung nach überprüfung)
- admin edit user
- admin del user
- user bekommt vergessenes pw per mail
.... was vergessen?


so wer nun mir helfen kann oder es auf kohle babsisi wie oben geschrieben für mich machen möchte, soll mich bitte per pm anschreiben.

ich bleib heute noch die ganze zeit hier im system  ;)

mfg Nice0ne


p.s. an die admins hier: wieso konnte ich mich nicht mit meinen alten userdaten hier einloggen? selbst nach abrufen und bestätigen des codes? *mal am kopf kratzt*

Nice0ne

nochmals hallo,

da mir wie gesagt die zeit im nacken sitzt und sich wohl keiner 50 euro verdiehnen will, hab ich mich selbst mal rangemacht und es ja auch irgendwie geschaft da was einzubauen in die edituser.php

vorweg, ich habe den user vorher in die chatdatenbank eingetragen um zu sehen ob er wenn ein user sein pw im vkp ändert, er es auch in der 2. db ändert, und wenn ja wie.
hmmm, es kommt keine fehlermeldung, aber schreiben tut er das pw in die 2. db auch nicht.
ich bin mal so frei den code hier rein zu posten, wäre schön wenn mir da wer erklären könnte wo der fehler bei ist.


###############################################
### Start - Erweiterung zum Schreiben in die Chatdatenbank
###############################################

# DB Daten
$chatdatenbankhost = localhost;
$chatdatenbankuser = xxx;
$chatdatenbankpassword = xxx;
$chatresource=mysql_connect($chatdatenbankhost, $chatdatenbankuser, $chatdatenbankpassword);
$chatdatenbankname = xxx;
$chatresource_lnk=mysql_select_db($chatdatenbankname, $chatresource);

# Schreibe in die DB

sql_query("UPDATE defaultusers SET password=".$pvs['pass']." WHERE name=".$pvs['uname'].", $chatresource_lnk");


# DB nach dem Schreiben schliesen
mysql_close($chatresource);


###############################################
### Ende - Erweiterung zum Schreiben in die Chatdatenbank
###############################################



habe ich eingefügt in die edituser.php über ## NEWSLETTER by sidewind START

ist das da falsch oder wieso passiert da nix?

mlg von Nice0ne

jubilee

Hallo !
Änder das hier :
Zitat
sql_query("UPDATE defaultusers SET password=".$pvs['pass']." WHERE name=".$pvs['uname'].", $chatresource_lnk");
mal so ab :
Zitat
sql_query("UPDATE defaultusers SET password='".$pvs['pass']."' WHERE name='".$pvs['uname']."'", $chatresource_lnk);


MfG
jubilee

Nice0ne

hallo jubilee,

danke für die hilfe, aber hat nix gebracht :-(
genau das selbe wie vor deiner abänderung. script läuft, keine fehlermeldung, aber auch kein schreiben in die 2. db.

trotzdem danke, evtl. noch ne idee?

mlg von Nice0ne

jubilee

#4
Hallo !
Zitattrotzdem danke, evtl. noch ne idee?
Script nochmal abändern und Fehlerroutine einbauen :

Zitat
###############################################
### Start - Erweiterung zum Schreiben in die Chatdatenbank
###############################################

# DB Daten
$chatdatenbankhost = localhost;
$chatdatenbankuser = xxx;
$chatdatenbankpassword = xxx;
$chatdatenbankname = xxx;


$chatresource=mysql_connect($chatdatenbankhost, $chatdatenbankuser, $chatdatenbankpassword)
or die("Feher bei Verbindungsaufbau: " . mysql_error());

$chatresource_lnk=mysql_select_db($chatdatenbankname, $chatresource)
or die("Feher bei dem Auswählen der Datenbank: " . mysql_error());

# Schreibe in die DB

mysql_query("UPDATE defaultusers SET password='".$pvs['pass']."' WHERE name='".$pvs['uname']."'", $chatresource_lnk) or die("Fehler in der Query: " . mysql_error());


# DB nach dem Schreiben schliesen
mysql_close($chatresource);


###############################################
### Ende - Erweiterung zum Schreiben in die Chatdatenbank
###############################################

MfG
jubilee

Nice0ne

:-) danke, nu kommt ne fehlermeldung..

Fehler in der Query: You have an error in your SQL syntax near ' 1' at line 1

aber was bitte und wo bitte??? ich seh da nix.

mlg Nice0ne

jubilee

Ahhhh, hab wieder die alte Query kopiert.
Hab das Beispiel nochmal geändert.
Kopier die Query nochmal un versuch dann nochmal.
Wichtig sind die einfachen Anführungszeichen (') vor den doppelten  und die link-Resource darf nicht mit der Query zusammen in Anführungszeichen gesetzt sein ....

MfG
jubilee

Nice0ne

jo und nochmal danke und trotzdem nix gewesen :-(

jetzt kommt folgende meldung...
Keine gültige Datenbankverbindung ($dbi = 1)Fehler in der Query:

hier mal den code so wie ich ihn jetzt habe...

###############################################
### Start - Erweiterung zum Schreiben in die Chatdatenbank
###############################################

# DB Daten
$chatdatenbankhost = localhost;
$chatdatenbankuser = xxx;
$chatdatenbankpassword = xxx;
$chatdatenbankname = xxx;

$chatresource=mysql_connect($chatdatenbankhost, $chatdatenbankuser, $chatdatenbankpassword)
or die("Feher bei Verbindungsaufbau: " . mysql_error());

$chatresource_lnk=mysql_select_db($chatdatenbankname, $chatresource)
or die("Feher bei dem Auswählen der Datenbank: " . mysql_error());

# Schreibe in die DB
sql_query("UPDATE defaultusers SET password='".$pvs['pass']."' WHERE name='".$pvs['uname']."'", $chatresource_lnk)
or die("Fehler in der Query: " . mysql_error());


# DB nach dem Schreiben schliesen
mysql_close($chatresource);


###############################################
### Ende - Erweiterung zum Schreiben in die Chatdatenbank
###############################################


hmmm, also das der mist doch soviele probleme bereitet, hätte ich nich gedacht.

mlg Nice0ne

jubilee

#8
Hallo !
Geh mal bitte nicht über den im MX integrierten sql_layer via sql_query sondern nimm das
original von php = mysql_query
Weiter : Variablenzuweisungen
NICHT
$chatdatenbankhost = localhost;
$chatdatenbankuser = xxx;
$chatdatenbankpassword = xxx;
$chatdatenbankname = xxx;

sondern :
$chatdatenbankhost = "localhost";
$chatdatenbankuser = "xxx";
$chatdatenbankpassword = "xxx";
$chatdatenbankname = "xxx";
Es handelt sich hier ja nicht um Zahlen sondern um Strings ....

Und auch auf Groß-/Kleinschreibung bei Datenbankbname/Username/Passwort/Tabellennamen etc achten.
MfG
jubilee



Nice0ne

 :-[ geht immernoch nicht

das mit den vars und der der mysql ist gebongt, hab ich geändert, und nun kommt:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /var/www/web1/html/modules/Your_Account/edituser.php on line 205
Fehler in der Query:


mal ne saudumme farge nebenbei...
das hat aber nicht zufällig was damit zu tun das die tabelle 6 felder pro user hat, aber nur das eine neu gesetzt werden soll?
tabelle heisst defaultusers, die ist auch da und der user ist angelegt.

und ich dachte das mit 33 jahren noch nicht alles vorbei ist was man lernen kann ;-) hab mich wohl geirrt. werde wohl nie ein coder freak werden.

mlg von Nice0ne

p.s und sorry wenn ich nerven sollte  ::)

jubilee

Öhhhh , auch wieder mein Standardfehler drinne ....
Schön, das es nicht nur mir passiert ....
Zitat
###############################################
### Start - Erweiterung zum Schreiben in die Chatdatenbank
###############################################

# DB Daten
$chatdatenbankhost = "localhost";
$chatdatenbankuser = "xxx";
$chatdatenbankpassword = "xxx";
$chatdatenbankname = "xxx";

$chatresource=mysql_connect($chatdatenbankhost, $chatdatenbankuser, $chatdatenbankpassword)
or die("Fehler bei Verbindungsaufbau: " . mysql_error());

mysql_select_db($chatdatenbankname, $chatresource)
or die("Fehler bei dem Auswählen der Datenbank: " . mysql_error());

# Schreibe in die DB
mysql_query("UPDATE defaultusers SET password='".$pvs['pass']."' WHERE name='".$pvs['uname']."'", $chatresource)
or die("Fehler in der Query: " . mysql_error());


# DB nach dem Schreiben schliesen
mysql_close($chatresource);


###############################################
### Ende - Erweiterung zum Schreiben in die Chatdatenbank
###############################################


So, so müsste es gehen.
mysql_select_db gibt als rückgabewert keinen neuen Resource_link zurück.
Es wird immer der Resource link vom mysql_connect verwendet.
Das steht hier irgendwo auch schon mal falsch im Board . . . .
Probier damit mal aus.
Jetzt sollte es gehen ....

Nice0ne

 :genie:

fett geht soweit! nu endlich macht ers *freu und hüpf auf dem stuhl*

jo soweit sag ich mal danke. ich gugg mal ob ich da jetzt noch ne abfrage reinbekomme die vor dem schreiben des neuen pw´s überprüft ob der user schon in der db ist, wenn nicht soll er ihn dann da anlegen.

mal sehen wie weit ich komme, meld mich hier wieder.

und nochmals dickes danke!

mlg von Nice0ne

jubilee

#12
Zitat...ob ich da jetzt noch ne abfrage reinbekomme die vor dem schreiben des neuen pw´s überprüft ob der user schon in der db ist, wenn nicht soll er ihn dann da anlegen...

=


Zitat
###############################################
### Start - Erweiterung zum Schreiben in die Chatdatenbank
###############################################

# DB Daten
$chatdatenbankhost = "localhost";
$chatdatenbankuser = "xxx";
$chatdatenbankpassword = "xxx";
$chatdatenbankname = "xxx";

$chatresource=mysql_connect($chatdatenbankhost, $chatdatenbankuser, $chatdatenbankpassword)
or die("Fehler bei Verbindungsaufbau: " . mysql_error());

mysql_select_db($chatdatenbankname, $chatresource)
or die("Fehler bei dem Auswählen der Datenbank: " . mysql_error());

# Schreibe in die DB
mysql_query("UPDATE defaultusers SET password='".$pvs['pass']."' WHERE name='".$pvs['uname']."'", $chatresource)
or die("Fehler in der Query: " . mysql_error());
$erfolg=mysql_affected_rows();
if ($erfolg==0)
{
mysql_query("INSERT INTO defaultusers (feld1, feld2, feld3, feld4, feld5, feld6) VALUES ('$feld1', '$feld2', '$feld3', '$feld4', '$feld5', '$feld6')", $chatresource) or die ("Fehler beim Einfügen des neuen Datensatzes: ". mysql_error());
}

So vom Prinzip her.
Wenn Du autoincrement-Felder in der Datenbank hast, dann lasst Du das Feld beim Insert sowohl bei der Feldangabe als auch bei der Wertangabe weg .
MfG
jubilee

Nice0ne

hehehe , ober fett und super nett von dir!!!

ging zwar nicht so auf anhieb, aber ich habs so gemacht ...

# Schreibe in die DB
mysql_query("UPDATE defaultusers SET password='".$pvs['pass']."' WHERE name='".$pvs['uname']."'", $chatresource)
or die("Fehler in der Query: " . mysql_error());
$erfolg=mysql_affected_rows();
if ($erfolg==0)
{
mysql_query("INSERT INTO defaultusers SET name='".$pvs['uname']."', password='".$pvs['pass']."', lastlogin='0', maxlogin='0', servergroup='1', channelgroup='1'", $chatresource)
or die ("Fehler beim Einfügen des neuen Datensatzes: ". mysql_error());
}


so, und die sache mit neu freigeschalteteten usern die vom admin freigeschaltet wurden, habe ich auch schon hinbekommen :-) wenn man mal den anfang hat, ist ja der rest dann auch nicht so wirklich schwer *freu*
ich mach mal noch die anderen files fertig und meld mich dann wieder hier.

dickes dickes danke an dich jubilee, kann man dir mit etwas eine freude machen? *mal lieb nachfragt*

mlg von Nice0ne

Nice0ne

hallo nochmals,

hier mal der stand wo ich bin und wo ich mal wieder jetzt nicht weiter komme.

was drinne ist:
- neuer datensatz wird angelgt wenn user vom admin freigeschaltet wird.
- neuer datensatz wird angelgt wenn user sein passwort ändert und noch nicht in der db ist.
- userdatensatz wird geändert wenn user sein pw ändert.
- userdatensatz wird gelöscht wenn sich ein user selber löscht.
- userdatensatz wird gelöscht wenn ein admin den user löscht.
- userdatensatz wird geändert wenn user per code sein neu angefordertes pw bestätigt hat.

was ich nicht hinbekomme:
- userdatensatz wird geändert wenn admin das userpasswort ändert
- löschen des userdatensatzes wenn admin den user deaktiviert.
- neuer datensatz wird angelgt wenn admin einen user erstellt.

die funktionen habe ich schon gefunden, nur blick ich da mit dem changestauts nicht so wirklich durch.

könntest du nochmals so nett sein und mir da evtl. weiterhelfen? *mal lieb nachfragt*

mlg von Nice0ne

jubilee

Hallo !

Zitat- userdatensatz wird geändert wenn admin das userpasswort ändert
Schaue mal in die Datei :
admin/modules/users.php ab/bei Zeile 208-322
Hier wird vom Admin ein Userdatensatz aktualisiert. Die eignetlich e Query liegt in Zeile 292.
Das sollte Dir aus dem User-Modul schon bekannt sein (weil fast identisch) und so solltest Du da keine Probleme haben da deine Quera dazuzubasteln (alledings diesmal OHNE den Teil für das Anlegen eines neuen Users in die Chatdatenbank weil diese Admin-Funktion NUR bestehende User ändert)

Zitat- neuer datensatz wird angelgt wenn admin einen user erstellt.
admin/modules/users.php Zeile 322-418
Hier wird ein neuer User vom Admin angelegt.
Query ist bei Zeile 391.... Sollte auch bekannt aussehen und nicht allzuviel Probleme bereiten.
Hier bitte NUR den Teil aus Deiner Query um einen neuen Datensatz anzulegen.


Zitatlöschen des userdatensatzes wenn admin den user deaktiviert.
admin/modules/users.php Zeile 443-507
Da sind es mehrere Queries die ab 460~ verteilt sind.

Wenn Du es selbst nicht hinbekommst, geb mir bitte die genaue Struktur der Chatdatenbank und dann baue ich Dir die  Querys zusammen und sage Dir wo diese dann plaziert werden müssen ...

MfG
jubilee



Nice0ne

#16
und da bin ich wieder,

erstmal hallo und danke für die mühe und sorry für ne woche abwesendheit, aber ich musste beruflich weg :-(

so nun aber zu der sache mal, von seiten so wie du und ich es gemacht haben ist es eigentlich richtig, ... aber... wenn die daten direkt in über die mysql geschrieben werden, hängt sich der chatserver auf. :-(((

hat auch ne weile gedauert bis ich dahinter kamm wieso. im laufenden betrieb des chatservers, darf man nur über die chat eigene api oder dem mitgelieferten config tool die daten in der mysql db verändern, anlegen etc.

ich schieb nen tierisch dicken hals und muss alles nochmal machen   :'(

evtl. ist es ja möglich das du mir dabei auch helfen könntest *mal ganz mitleidig guggt*

es gibt grundsätzlich bei der api einen gewissen grundablauf... ich versuch mich mal es einfach zu halten.

1. verbindung zum server herstellen per fsockopen
2. ASCII senden
3. jede eingabe wird bestätigt mit einer ok oder false meldung

es gibt ne reihe div. befehle. hier die wo ich denke das sie entsprechend wären.

Zitat
Wenn eine Verbindung zum Chatserver-Port aufgebaut wird und der String ASCII gesendet wird, wird die Verbindung in den sogenannten "ASCII Mode" geschaltet. Der Chatserver wird den String ASCII zurückschicken. Beachten Sie, das zusätzliche Bytes gesendet werden können, bevor ASCII gesendet wird. Clients im ASCII-Modus sollten diese Bytes ignorieren.

Nach dem Umschalten in den ASCII-Modus können trotzdem eine Reihe von Befehlen geschickt werden. Jeder Befehl ist in reinem ASCII-Text geschrieben. Jeder Text, der gesendet wird, wird als ein Befehl erachtet. Jede Zeile, bis zur LF-Markierung (Linefeed, in vielen Programmiersprachen \n) wird als ein Befehl angesehen.

Antworten des Chatservers beginnen mit einer dreistelligen Nummer:

100

bedeutet Erfolg

200

Fehler.

Außerdem schickt der Chatserver gelegentlich Nachrichten, die aus mehreren Zeilen bestehen, zurück. Diese Nachrichten beginnen mit einer Nachricht mit Code 100 und hören mit einer Nachricht mit Code 101 auf. Eventuell werden später mehr Codes hinzugefügt.

Unbekannte Befehle werden von Chatserver komplett ignoriert. Falls nichts anderes eingestellt wurde, antwortet der Chatserver normalerweise auf Fehler mit

200 FAILED

oder

200 FAILED COMMAND UNKNOWN

falls das Kommando unbekannt bzw. die Syntax nicht korrekt ist

und auf Erfolg mit

100 OK



ASCII

            Die Verbindung wird in den ASCII Mode umgeschaltet. Der Chatserver wird den folgenden String zurückgeben
ASCII

Beachten Sie, daß zusätzliche Bytes vor dem Senden von ASCII verschickt werden können. ASCII Clients sollten diese Bytes ignorieren.


QUIT

            Dieser Befehl beendet die ASCII-Verbindung. Der Chatserver schickt erst
100 QUIT

und bricht danach die Verbindung ab.


ECHO

            Mit diesem Befehl schickt der Server Ihnen Argumente zurück.
Beispiel: Wenn Sie ECHO test benutzen, schickt der Server folgendes zurück

100 ECHO test
 



Um diese Befehle ausführen zu können, ist es erforderlich, Namen und Paßwort eines Benutzers zu besitzen, der Administrator-Rechte auf dem chatserver hat. Bei der Verwendung dieser Befehle in CGI-Scripten ist Vorsicht angeraten, besonders wenn eine dritte Partei Leserechte hat.

SU_ADMIN

            Für diesen Befehl brauchen Sie Administratoren-Rechte für einen einzigen virtuellen Server.
Syntax: SU_ADMIN "username" password


SU_SERVERADMIN

            Dieser Befehl braucht Administratoren-Rechte für alle virtuellen Server und Rechte für zusätzliche Befehle. Unbedingt erforderlich ist das Recht, SERVERADMIN_ zu sein. Der Name dieses Benutzers ist IMMER serveradmin, es muß lediglich das Paßwort eingegeben werden.
Syntax: SU_SERVERADMIN password


ADMIN_ADD_USER

            Mit diesem Befehl kann man einen neuen Benutzer einfügen.
Syntax:  ADMIN_ADD_USER "username" password


ADMIN_SET_PASSWORD

            Mit diesem Befehl legen Sie das Paßwort eines Benutzers fest.
Syntax: ADMIN_SET_PASSWORD "username" password



Es gibt einige Befehle, die den Benutzern der Systeme zugänglich sind. Sie können mit diesen Befehlen z.B. CGI- oder PHP-Scripte schreiben, um Paßwörter zu ändern oder sich selbst zu löschen. Diese Befehle überprüfen selbständig das username/passwort-Paar. So kann der Gebrauch der superuser/admin-Rechte vermieden werden.

USER_CHANGE_PASSWORD

            Dieser Befehl ändert das Paßwort eines Benutzers, wenn das alte Paßwort korrekt eingegeben wurde.
Syntax: USER_CHANGE_PASSWORD "username" oldpassword newpassword


USER_DELETE

            Mit diesem Befehl kann ein Benutzer gelöscht werden, falls sein Paßwort korrekt eingegeben wurde.
Syntax: USER_DELETE "username" password



Hier geht es um verschiedene Test-Befehle, die vom Server mit

100 Test-Befehl Argumente OK

falls alles in Ordnung ist, oder mit

200 Test-Befehl Argumente FAILED

falls ein Fehler aufgetreten ist, beantwortet werden.

TEST_PASSWORD

            Dieser Befehl testet, ob das Paßwort eines bestimmten Benutzers richtig ist.
Syntax: TEST_PASSWORD "username" password. Wie oben erklärt wird der Server entweder mit

100 TEST_PASSWORD "username" password OK

antworten, oder er schickt

200 TEST_PASSWORD "username" password FAILED

zurück.


TEST_REG_USER

            Dieser Befehl testet, ob es einen registrierten Benutzer mit einem bestimmten Namen gibt.
Syntax: TEST_REG_USER "username"

TEST_USER

            Dieser Befehl überprüft, ob ein Benutzer mit einem bestimmten Namen eingelogged ist.
Syntax: TEST_USER "username"
 



so... und was soll ich sagen, die häfte habe ich schonmal geschaft :-)

ich habs soweit das ich die verbindung habe und auch das ASCII sende und auch das ASCII als meldung zurück bekomme. nur dann hörts bei mir auch schon wieder auf :-( und so komme ich nicht weiter wie so oft.

hier mal das wie ich es habe:
################################################
### API Chatserveranbindung VKP - START
################################################

$chatport=400;
$chathost="localhost";
$message="ASCII";
$status=senddata($chathost,$chatport,$message);
print "$status";

function senddata($chathost,$chatport,$message) {

$fp = fsockopen("$chathost", $chatport, $errno, $errstr, 30);
if (!$fp) {
   echo "$errstr ($errno)";
}
else {

   fputs($fp, "$message\r\n");
   
     $status.=fread($fp,1);
     $bytes_left = socket_get_status($fp);
     if ($bytes_left > 0) { $status.=fread($fp, $bytes_left[unread_bytes]); }

   fclose ($fp);
}
return $status;
}

################################################
### API Chatserveranbindung VKP - ENDE
################################################


ich versuch mich mal auch weiter dranne und melde mich wenn ich selbst noch irgendwie weiter kommen sollte hier wieder. und nächste zeit kann ich fast permanent hier nen auge im forum haben. :-)

mlg von Nice0ne