Datenbankverbindung

Begonnen von kekule, 08 Juli 2004, 11:17:53

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

kekule

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

NeMeSiSX2LC

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
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

kekule

Willst du mir sagen

das die Datenbankverbindung durch includen der mainfile hergestellt wird

und somit die $dbi brauchbar wird.

mfg

NeMeSiSX2LC

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.
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

kekule

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

NeMeSiSX2LC

ne ne mit sql_query ohne das my. die $dbi ist eigentlich bloss wegen denn nuke modulen noch drin.
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

kekule

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

NeMeSiSX2LC

$result =sql_query(" SELECT * FROM mx_users");
$uinfo = sql_fetch_array ($result);

und dann

echo "".$uinfo['uname']."";

so könnte man es zb machen
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

kekule

Hervorragend das klappt

was war mein Fehler ?

NeMeSiSX2LC

du hast das query nicht verarbeitet ;)
CMS-Version: pragmaMx 0.1.8, 1.20.4.5/2006-03-10     
PHP-Version: 5.1.2
MySQL-Version: 5.0.15-max-log
Server-Version: Apache/2.0.55
phpMyAdmin-Version: 2.7.0-pl1

schnikemike

Verstehe ich das richtiG?


Wenn ich die mainfile so wie beschrieben include kann ich auf die datenbank zugreifen und die variablen ändern?


Wer anderen eine Grube gräbt der hat ein Grubengrabgerät!
 

JoergK

#11
@schnikemike
Die 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.


@kekule
Eine 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
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

schnikemike

Vielen dank! Für die ausfühliche Info.  Ich werde das bei gelegenheit gleich mal anwenden.

mfg
Wer anderen eine Grube gräbt der hat ein Grubengrabgerät!
 

schnikemike

#13
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


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.


Wer anderen eine Grube gräbt der hat ein Grubengrabgerät!
 

schnikemike

Geht das so?

Damit würden dann mehre module sich leicht an mx anpasen lassen.
Wer anderen eine Grube gräbt der hat ein Grubengrabgerät!
 

JoergK

#15
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
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

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 mit Beschreibungen der PHP-Funktionen im Umgang mit einer MySQL-Datenbank.


Gruss,
JoergK
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

schnikemike

Klasse danke!

Jetzt bin ich ein gutes stückchen weiter.

Jetzt mir ml weiter anschauen.





Wer anderen eine Grube gräbt der hat ein Grubengrabgerät!