Scorcher24
Hi Folks !!
Ich bin gerade dabei ein kleines Webinterface für Raumbelegungen zu entwerfen.
Da hab ich doch glatt mal ne Frage:
Mein Klasse schaut so aus:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
//[In der data.php]
class Database
{
var $uplink;
function connect(){.....}
function query($query){....}
function get_all(){...}
};
//[in der index.php]
$data = new Database();
|
|
Und jetzt meine Fragen:
Kann ich zur MySQL Datenbank auch eine Persistente Verbindung aufbauen ??
Und wie kann ich das in der Index.php angelegte Datenbankobjekt übergeben oder in anderen Dateien verwenden ??
Thx for Help.
rya.
Scorcher24
max77
Du könntest in der index.php ein Objekt in einer SESSION-Variablen anlegen. Dieses würde dann während der gesamten Session bestehen bleiben.
Darin kannst Du dann mit "mysql_pconnect" eine persistente Verbindung erstellen.
Allerdings wird auch bei einem normalen mysql_connect, sofern vorhanden, eine bereits bestehende Verbindung genutzt und nicht bei jedem Aufruf eine neuer hergestellt.
Gruß Dirk
Scorcher24
Sorry wenn ich jetzt wie ein Noob klinge:
Aber einfach nur
| code: |
1:
2:
3:
4:
|
$data = new Database();
$_SESSION["data"] = $data
|
|
funzt ja nicht. Wie würde das denn gehen ??
rya.
Scorcher24
vapor
Du musst die Klasse in jedem Script neu aufrufen, sonst geht das nicht.
Sinn und Zweck einer Klasse ist, das du sie für vieles verschiedenes benutzen kannst. Sie ist eben OOP in PHP.
Ich sehe keinen Sinn darin, warum du eine Klasse benutzt.
Nebenebi würde in der $data die du füllst nur die Ergebnisse stehen, die die Klasse returned.
Funktioniert deine Klasse?
Hast du dir mal $data ausgeben lassen? die ($data);
max77
Es kommt darauf an, wie viele Verbindungen Du zur Datenbank benötigst.
Wenn Dir tatsächlich eine einzige ausreicht dann kannst Du diese mit
| php: |
1:
2:
3:
|
<?php session_start();
session_register("data");
$_SESSION["data"] = new Database(); ?> |
|
anlegen und in jeder anderen Klasse verweden.
Ich habe bei mir für den Datenbankzugriff in jeder Klasse eine eigene Instanz angelegt, ganz einfach im Probleme zu vermeiden.
Gruß Dirk
Scorcher24
Ich danke euch Jungs (und Mädels ??

) für eure Antworten.
Damit habt Ihr mir schon ein Stück weitergeholfen.
@vapor
Ja, die Klasse als soches funktioniert. Auch die Rückgaben der Ressource-IDs
für MySQL funzen ohne Probleme.
Es reicht eine Verbindung, weil immer nur ein User darauf Zugriff haben soll - das is so gewünscht.
Wenn vielleicht noch jemand nen Tipp hätte wie ich verhindere dass über eingabefelder
irgendwelche Daten geklaut werden können oder Zugriff auf die DB selber bekommt, dann währe ich euch sehr dankbar !
rya.
Scorcher24
max77
Kannst Du das vielleicht noch etwas genauer beschreiben???
Verstehe nicht ganz, wie Du das mit den Eingabefeldern und Datenklau meinst.
Normalerweise kann nur Dein Script bzw. jemand der Anmeldeinformationen für die DB hat darauf zugreifen!
Scorcher24
Naja meine HP ist zum Beispiel gehackt worden. Der Angreifer hat nur die komplette URL eingegeben und hatte schon einen Admin Account - das darf nicht wieder passieren. Ich habe jetzt zwar ein Sicherheitssystem das funktioniert aber das habe nicht ich gemacht. Ich benutze auf meiner HP den NUKE falls Ihr den kennt.
Ich möchte halt net dass mit diesem Script so was ähnliches passiert !!
Wie kann ich zum Beispiel Infomration verstecken wie übergaben von script zu script ausser in den session vars ?? Sowas meinte ich halt damit...
rya.
Scorcher24
max77
Das verstehe ich nicht ganz.
Wie kommt er zu einem Admin-Account, wenn er keine Berechtigungen hat einen anzulegen?
Mit dem was Du geschrieben hast kann man nur vermuten... Aber ich gehe mal davon aus, daß man (sofern man die URL wußte) Deine Adminseite auch ohne Berechtigungen verwenden konnte (nur der Link dazu war vom User abhängig). Wenn Du in jedem Modul noch mal den User/Userlevel abfragst kann das eigentlich nicht vorkommen. Ohne Script kann eigentlich keiner auf die DB schreiben (sofern er die Anmeldeinformationen nicht hat).
Was hier auch noch zu sagen wäre ist, daß Du den Zugriff auf die DB nur von "localhost" aus erlauben solltest und vor allem in der PHP.INI die "AllowGlobals" auf "Off" setzt!!!
ThiefMaster
session_register("data"); ist unnötig. wenn man $_SESSION verwendet reicht das schon.
max77
Das ist wohl richtig.
Kann man dann auch noch mit isset() abprüfen, ob die Variable bereits gesetzt ist wenn das Script zum zweiten mal aufgerufen wird??
Scorcher24
@max77
Das kannst du mit session_is_registered("var"); machen. isset hilft hier nichts.
Leider habe ich aber keinen Zugriff auf die php.ini und der Datenbank Server is entfernt. Ich habe da die IP stehen. Das Script hatte ja nicht ich geschrieben, sonder des war ja Teil vom Nuke. Aber danke fürn eure Tipps. Von mir aus wäre des erst mal erledigt.
Thx @all.
rya.
Scorcher24
ThiefMaster
oder einfach isset($_SESSION['varname']) nehmen
Aber eine Datenbankklasse hat nichts in der Session verloren. Man muss eh normalerweise bei jedem Aufruf reconnecten.
max77
Ich habe das auch nicht so realisiert:
ich habe zwar zentral ein "include" gemacht, aber dann an jeder benötigten Stelle eine Instanz erzeugt...
Das wäre auch hier der Vorschlag: Die Organisation von Verbindungen wird sowieso automatisch abgewickelt. Besteht also schon eine Verbindung mit gleichen Parametern (also Server/Login/Passwort) wird diese bei "mysql_connect" genutzt und keine neue erstellt.