Hallo
ich möchte mir gern ein Modul basteln
jedoch scheiterst bei mir schon an den Basics.
Wie kann ich eine Datenbank verbindung aufbauen?
ich weiss zwar das es mit sql_connect() klappen sollte
jedoch möchte ich nicht in das Modul die Datenbank das Passort usw. einfügen.
Da es eineige Module gibt die auf die Datenbank zugreifen ohne dem connect
hätte ioch gerne gewusst wie die das machen :)
bin da komplett unerfahren und auch etwas blind
bitte helft mir da ich mittels suche hier im Forum nichts gefunden habe.
mfg
schau dir doch mal ein andere module an bei allen test oben ein if anweisung damit wird die mainfile aufgerufen und somit steht auch dann die verbindung zur DB.
du musst dann eigentlich nur noch mit sql_query, sql_fetch_array/row oder halt sql_num_rows arbeiten
Willst du mir sagen
das die Datenbankverbindung durch includen der mainfile hergestellt wird
und somit die $dbi brauchbar wird.
mfg
die variable $dbi wird im MX nicht mehr benötigt. Ja will ich dir damit sagen schau dir doch die mainfile an da werden alle file die nötig sind included.
Also
ind der Mainfile wie im sql_layer wird aber die $dbi
gesetzte
und ich habe versuche mit einfachen code die verbindung herzustellen jedoch klappt das so nicht
include_once("mainfile.php");
$q = "SELECT * FROM nuke_users";
$result = mysql_query($q, $dbi);
echo $result;
bekomme als ausgabe: Resource id #22
und damit kann ich nichts anfangen
ne ne mit sql_query ohne das my. die $dbi ist eigentlich bloss wegen denn nuke modulen noch drin.
bekomme auch ohne my die Ausgabe: Resource id #22
wie genau msste ich das denn schreiben das ich die verbindung habe und mit fetch usw. arbeiten kann
mfg
$result =sql_query(" SELECT * FROM mx_users");
$uinfo = sql_fetch_array ($result);
und dann
echo "".$uinfo['uname']."";
so könnte man es zb machen
Hervorragend das klappt
was war mein Fehler ?
du hast das query nicht verarbeitet ;)
Verstehe ich das richtiG?
Wenn ich die mainfile so wie beschrieben include kann ich auf die datenbank zugreifen und die variablen ändern?
@schnikemikeDie Datei "mainfile.php" braucht nicht (erneut) included werden, da dies bereits durch den (automatichen) Aufruf der modules.php geschieht. Um mit einem eigenen Modul auf die Datenbank und/oder Systemvariablen zuzugreifen, muß es nur, wie jedes andere Modul auch, über die modules.php aufgerufen werden:
Zitathttp://www.deinedomain.tld/modules.php?name=DeinModul
Mit diesem URL würde die index.php im Verzeichnis modules/DeinModul aufgerufen. Soll eine Datei mit einem anderen Namen von diesem Modul aufgerufen werden , so sähe der URL so aus:
Zitathttp://www.deinedomain.tld/modules.php?name=DeinModul&file=AndererDateiname
Wie Du siehst, wird hier die Endung .php
nicht mit angegeben.
Ein Grundgerüst für ein Modul wäre folgendes:
<?PHP
if (!defined("mxMainFileLoaded")) die ("You can't access this file directly...");
// Rechte Blöcke anzeigen: 1 = ja, 0 = nein
$index = 1;
include("header.php");
// Hier kommt Dein Code rein
include("footer.php");
?>
Die if-Zeile sorgt dafür, dass das Modul
nicht direkt (www.deinedomain.tld/modules/DeinModul/), sondern nur über die modules.php und somit das CMS aufgerufen werden kann.
@kekuleEine DB-Abfrage besteht in der Regel aus zwei Befehlen:
- Mit dem ersten (z.B. $result =sql_query(" SELECT * FROM mx_users"); ) wird dem Datenbank-Server der auszuführende SQL-Befehl übermittelt, der Server speichert das mögliche Ergebnis in seinem Zwischenspeicher und gibt einen Ergebniscode als Antwort auf den Befehl
- Mit dem zweiten (z.B. $uinfo = sql_fetch_array ($result); ) wird dann das Ergebnis aus dem Zwischenspeicher des DB-Servers abgerufen und in einer Variablen/einem Array gespeichert.
Jetzt kann mit dem Ergebnis (steht ja nun in dem Array $uinfo[]) entsprechend Deinen Wünschen gearbeitet werden.
Die Beschreibung der DB-Abfrage ist sicherlich etwas laienhaft formuliert. ::)
Sollte ich mich falsch oder unverständlich ausgedrückt haben, ist bestimmt einer der Mx-Gurus bereit, eine verständlichere und/oder korrektere Erklärung zu schreiben. ;)
Gruss,
JoergK
Vielen dank! Für die ausfühliche Info. Ich werde das bei gelegenheit gleich mal anwenden.
mfg
So jetzt hab ich mir das mal durch den Kopf gehen lassen.
Ich habe mir dazu mal das Personal adon angeschaut.
http://www.pragmamx.org/modules.php?name=Downloads&d_op=getit&lid=368 (http://www.pragmamx.org/modules.php?name=Downloads&d_op=getit&lid=368)
Darin werden die Datenbanverbindungen noch manuell angeben.
Jetzt habe ich mir gedacht wenn das so ist das über die modules.php? ... der datenbank mit included wir, dann müsste es doch so funktionieren.
Als info die configfile ist in dem fall show.php.
<?php
### orginal zeile deaktiviert von show.php ######
# $hostname = "localhost";
# $user = "*****";
# $password = "*****";
# $dbname = "********";
##########################
########### by schnikemike für pragmamx #######
#Include (config.php);
$hostname = $mxConf['dbhost'];
$dbname = $mxConf['dbname'];
$user= $mxConf['dbuname'];
$password = $mxConf['dbpass'];
$prefix = $mxConf['prefix'];
$user_prefix = $mxConf['user_prefix'];
#################### by schnikemike für pragmamx #############
if($id) {
// you may have to modify login information for your database server:
@MYSQL_CONNECT($hostname,$user,$password,$prefix,$user_prefix);
@mysql_select_db("$dbname");
$query = "select * from personals_img where imgid='$id'";
$result = @MYSQL_QUERY($query);
$data = @MYSQL_RESULT($result,0,"img_data");
echo $data;
};
?>
Ich hatte mir gedacht wenn ich es so mache dann werden die einstellungen von pragmamx übernommen.
Bin absoluter anfänger also bitte nicht wundern wenn total falsch ist.! :D
+++++++++++++++++++++++++++++++++
@ Joergk > Die daten sind in der install mitdrinnen. Ich denk mal die sind zuvor schon verändert worden . Zuminderst ist die seite nicht ereichbar. Hab sie aber trotzdem rausgenommen.
LG > Danke nochmal für die schnelle Info! Hätten ja wirklich ein feheler sein können.
Geht das so?
Damit würden dann mehre module sich leicht an mx anpasen lassen.
Also auf die Schnelle kann ich (noch) nicht viel dazu sagen. Nur erstmal soviel:
<?php
### orginal zeile deaktiviert von show.php ######
# $hostname = "localhost";
# $user = "*****";
# $password = "*****";
# $dbname = "********";
##########################
########### by schnikemike für pragmamx #######
#Include (config.php);
# $hostname = $mxConf['dbhost']; // Nicht notwendig, da durch pragmaMx bereits erledigt
# $dbname = $mxConf['dbname']; // Nicht notwendig, da durch pragmaMx bereits erledigt
# $user= $mxConf['dbuname']; // Nicht notwendig, da durch pragmaMx bereits erledigt
# $password = $mxConf['dbpass']; // Nicht notwendig, da durch pragmaMx bereits erledigt
# $prefix = $mxConf['prefix']; // Nicht notwendig, da durch pragmaMx bereits erledigt
# $user_prefix = $mxConf['user_prefix']; // Nicht notwendig, da durch pragmaMx bereits erledigt
// Unter Umständen ist die nachfolgende Zeile notwendig, um die Variablen aus pragmaMx verfügbar zu machen
global $prefix, $user_prefix;
#################### by schnikemike für pragmamx #############
if($id) {
// you may have to modify login information for your database server:
# @MYSQL_CONNECT($hostname,$user,$password,$prefix,$user_prefix); // Nicht notwendig, da durch pragmaMx bereits erledigt
# @mysql_select_db("$dbname"); // Nicht notwendig, da durch pragmaMx bereits erledigt
$query = "select * from personals_img where imgid='$id'";
// Umschreiben: Nutzung der pragmaMx function aus der sql-api
# $result = @MYSQL_QUERY($query);
$result = @sql_query($query);
$data = @MYSQL_RESULT($result,0,"img_data"); // Hier bin ich mir noch unsicher, was da zu machen/ändern ist
echo $data;
};
?>
Mehr kann ich im Moment nicht zu dem Modul und der Anpassung an pragmaMx sagen, denn dazu müßte ich mir das mal in ner Testumgebung aufsetzen und genauer analysieren. Doch dazu komme ich frühestens Anfang kommender Woche. Falls sich bis dahin kein anderer damit befaßt hat, werd ich das mal machen.
Gruss,
JoergK
Sodele, hab mir die Geschichte noch mal durch den Kopf gehen lassen und bin zu folgendem Schluss gekommen:
1. Fremdmodule an pragmaMx anpassen ist mehr, als nur die Datenbankabfragen zu ändern/anzupassen.
2. Um hier beim Thema zu bleiben ein paar Infos zur Anpassung von DB-Abfragen:
- Wenn vorhanden, Codeteile mit DB-Daten (DB-Name, Host, User etc.) auskommentieren = "//" vor die jeweiligen Zeilen
- Wenn vorhanden, Code-Zeilen für DB-Verbindungen auskommentieren (z.B. mysql_connect(), mysql_close() etc.)
- "PHP"-DB-Abfragen (z.B. mysql_query())durch die entsprechenden Mx-DB-Abfragen ersetzen (hier: sql_query())
Das geschulte Auge wird erkennen, dass die "Mx-Befehle" für DB-Abfragen quasi genauso lauten, wie die "PHP-Befehle",
ohne das
my vorne dran. Für die gebräuchslichsten DB-Abfragen sind im pragmaMx entsprechende "Befehle" vorhanden.
Und hier noch für alle Interessierten ein Link zum SelfPHP (http://www.selfphp.de/) mit Beschreibungen der PHP-Funktionen (http://www.selfphp.de/funktionsreferenz/mysql_funktionen/index.php) im Umgang mit einer MySQL-Datenbank.
Gruss,
JoergK
Klasse danke!
Jetzt bin ich ein gutes stückchen weiter.
Jetzt mir ml weiter anschauen.