• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Warum funktioniert das nur ohne Funktion?

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
Kann mir bitte jemand erklären, warum Code 1 funktioniert und Code 2 nicht? Ich blicks nicht. Die Datenbankverbindung kommt bei beiden Codes zustande, aber das Auslesen der Daten klappt nur bei Code 1. Bei Code 2 bekomme ich folgende Fehlermeldung:
Fatal error: Call to a member function query() on a non-object in ...
Code 1:
[src=php]
$db_host = "**********";
$db_user = "**********";
$db_pass = "**********";
$db_name = "**********";
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
if($mysqli->connect_error) {
echo "Datenbankverbindung fehlgeschlagen. Fehler: ".mysqli_connect_error();
exit();
}
echo "Datenbankverbindung hergestellt";

$result = $mysqli->query("SELECT kunden_id FROM db_kunden");
while($row = $result->fetch_array()){
echo "Test: ".$row['kunden_id'];
}
[/src]

Code 2.1 (function.inc.php):
[src=php]
function db_connect() {
$db_host = "**********";
$db_user = "**********";
$db_pass = "**********";
$db_name = "**********";
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
if($mysqli->connect_error) {
echo "Datenbankverbindung fehlgeschlagen. Fehler: ".mysqli_connect_error();
exit();
}
echo "Datenbankverbindung hergestellt";
return $db_connect;
}
[/src]

Code 2.2 (index.php):
[src=php]
$db_connect = db_connect();

$result = $mysqli->query("SELECT kunden_id FROM db_kunden");
while($row = $result->fetch_array()){
echo "Test: ".$row['kunden_id'];
}
[/src]
 

Abul

(Threadleser)

Registriert
20 Sep. 2013
Beiträge
4.087
$result = $mysqli->query("SELECT kunden_id FROM db_kunden");
$result = $db_connect->query("SELECT kunden_id FROM db_kunden");

:unknown:

nachm edit "return $db_connect;" -> "return $mysqli;".
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #3
Danke für die sehr schnelle und brauchbare Antwort (Keine lange Erklärung mit hunderten Fachausdrücken was man machen muss, einfach mal den richtigen Code. Sehr schön)

Nun aber zum Verständnis:
1) Warum muss das "return $db_connect;" in "return $mysqli;" umbenannt werden und vor allem: Wo greife ich darauf wieder zurück? Hier fehlen mir die Zusammenhänge
2) Warum muss das "$result = $mysqli->" in "$result = $db_connect-" umbenannt werden? Auch hier fehlt mir der Zusammenhang.

Bitte die Antwort wieder möglichst einfach halten und nicht mit irgendwelchen Fachausdrücken um sich werfen.
 

exomo

NGBler

Registriert
1 Aug. 2015
Beiträge
129
Ich versuchs mal:
1) Warum muss das "return $db_connect;" in "return $mysqli;" umbenannt werden und vor allem: Wo greife ich darauf wieder zurück? Hier fehlen mir die Zusammenhänge
Du sagst "Gib den Wert der Variablen $db_connect zurück". Die gibt es aber gar nicht (nur deine Funktion heißt so, die kannst du aber nicht zurückgeben). Du willst das Datenbankobjekt zurückgeben, dass du mit new mysqli erstellt hast, und das ist in der Variablen $mysqli gespeichert.
2) Warum muss das "$result = $mysqli->" in "$result = $db_connect-" umbenannt werden? Auch hier fehlt mir der Zusammenhang.
Die Variable $mysqli ist an der Stelle nicht definiert. Die gab es in deiner Funktion, aber was in einer Funktion deklariert wird ist außerhalb nicht automatisch sichtbar. Deshalb musstest du das auch in das return packen. Mit $db_connect = db_connect(); hast du jetzt gesagt: "Nimm das was die Funktion db_connect zurückgibt (also das mysqli Objekt) und speichere es in einer Variablen $db_connect". Folglich heißt dein Datenbankobjekt jetzt $db_connect und du musst darüber auf die Methoden wie query zugreifen.
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #5
Verwende ich eigentlich den "Prozedural"-Stil oder den "Objektorientierten"-Stil?
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #7
Ich denke ich bin dabei den Objektorientierten zu verwenden. Ich war mir halt nicht sicher. Momentan suche ich auch noch die Vorteile dessen, weil ich bislang ja immer nur mysql verwendet habe und daher alles ungewohnt ist. Mit dem abstrakten Denken habe ichs nicht so.
 

keksautomat

Neu angemeldet

Registriert
15 Juli 2013
Beiträge
471
Prozedual ist "du schleppst A nach B und verwendest es dort. Dann schleppst du es wieder von B nach C."
OOP ist "du hast es irgendwo liegen" und benutzt es einfach in A und C.
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #9
Wo muss ich nun eigentlich das mysqli->close(); verwenden? Noch in der Funktion selbst oder am Ende jeder Seite?

Das $result->close(); muss ich wohl so anwenden, oder?
[src=php]
$result = $mysqli->query("SELECT kunden_id FROM db_kunden");
while($row = $result->fetch_array()){
echo "Test: ".$row['kunden_id'];
$result->close();
}
[/src]
 

Abul

(Threadleser)

Registriert
20 Sep. 2013
Beiträge
4.087
Wieso sollte "$result->close();" in der while-Schleife stehen?
 

Cyperfriend

Der ohne Avatar

Registriert
14 Juli 2013
Beiträge
1.123
  • Thread Starter Thread Starter
  • #11
Ja gut, ich meinte natürlich nach der geschweiften Klammer ;)
Beantwortet aber meine Frage noch nicht ganz.
 

Abul

(Threadleser)

Registriert
20 Sep. 2013
Beiträge
4.087
"Das $result->close(); muss ich wohl so anwenden, oder?" Ist beantwortet ;)

Aber mal eben ne andere sache, du musst doch nicht den "query" schließen, du musst die geöffnete verbindung schließen.

[src=php]$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
$result = $mysqli->query("SELECT kunden_id FROM db_kunden");
while($row = $result->fetch_array()){
echo "Test: ".$row['kunden_id'];
}
$mysqli->close();[/src]


Und zur anderen Frage, du solltest "close" natürlich innerhalb der Funktion verwenden.
Das sind aber so Fragen, die du selbst beantworten können solltest. Ich würde dir empfehlen ein paar Bücher durchzulesen und Tutorials durchzuarbeiten.
Ich meine, das sind so Basics die musst du einfach können. Im grunde kauen wir dir gerade den Code vor und du tippst den nur ab.
Das hilft dir wenig bis garnicht weiter wenn du garnicht verstehst was überhaupt passiert.
 
Zuletzt bearbeitet:
Oben