Ich bekomme immer einen Parse error:

Parse error: syntax error, unexpected T_IF, expecting T_FUNCTION in C:\xampp\htdocs\database.class on line 45

Hier der gesamte Code:

<?php /* Klasse: database
\* Zweck: Verbindet mit einer MySQL-Datenbank \*/ class Database { private $cxn; private $database\_name; private $host; private $user; private $password; function \_\_construct ($filename) { include("$filename"); if(!$this-\>cxn = new mysqli($host,$user,$password)) { throw new Exception("Datenbank nicht verf

Sorry, MySQL ist nicht mein Thema.
Gruß
Ralf

Ich habe den Code einfach mal in meinen Editor kopiert und mir angesehen, was in Zeile 44 passiert. Sieht aus, als wäre da eine Klammer zu viel…

Und genau das sagt auch die Meldung. Die aktuelle function der Klasse wird geschlossen - aber es folgt keine neue sondern ein if. Das geht natürlich nicht…

Tipp: Ein guter Editor hilft sehr. Mindestens mit Syntax Highlighting und Markierung von Klammergegenstücken.

Es gibt viele, mit unterschiedlichen Zielgruppen. gPHPedit, Aptana, Eclipse, Bluefish, Quanta Plus, Netbeans um nur ein paar kostenfreie zu nennen.

Schönen Sonntag noch!

Hallo Jens36,

In Zeile 45 bekommt er einen Befehl, den er nicht erwartet hat. Meist ist dies ein vergessener Strichpunkt in der Zeile DAVOR. Das ist bei Dir nicht der Fall.

Du bist in einer „CLASS“-Definition, hierin darf es nur und ausschließlich Funktionen (function) und Variablendefinitionen (var) geben.

In Zeile 44 schließt Du die Function „UseDatabase“, und ab da geht es wie folgt weiter:

44:}
45:
46:if (in_array($dbname,$databases) ||
47:in_array(strtolower($dbname),$databases))
48:{

In Zeile 44 wird die vorherige Function geschlossen und es kommt dann eine IF-Abfrage in Zeile 46, die da nicht kommen darf weil sie nicht innerhalb einer function ist.

Wilde Vermutung: Du wolltest die Functioin „UseDatabase“ erst in Zeile 58 schließen. Also nimm entweder in Zeile 44 die Klammer raus oder ändere Zeile 39 ab, indem Du nach dem Else einen Befehlsblock öffnest den Du dann in Zeile 44 wieder schließt:

39:else{

Du schreibst sehr spartanischen Code, ich persönlich setze auch da Klammern wo es nicht nötig wäre (z.B. nach einem ELSE wenn nur ein Befehl folgt). Das macht den Code meiner Ansicht nach lesbarer. Aber das ist Geschmackssache.

Viele Grüße,
Markus

Die Fehlermeldung ist eigentlich relativ eindeutig:

Parse error: syntax error, unexpected T_IF, expecting
T_FUNCTION in C:\xampp\htdocs\database.class on line 45

Übersetzt heißt das, du hast zuviele schließende Klammern. Deine Function ist beendet. In der Klassendefinition sind keine IF-Statetements erlaubt.

Je nachdem wo du deine Prüfung einbauen willst, musst du eine der schließenden Klammern entfernen oder eine neue Funktion beginnen…
Der Fehler ist in Zeile 45

Hallo Jens,

tut mir Leid, ich kann Dir leider nicht weiterhelfen.

Viel Glück und viele Grüße

Steffi

Hallo,

es fehlt ein „{“ gleich nach „else“ in :

else
while($row = $result->fetch_row())
{

Gruß

Hallo,

Ddu hast hier eine Klasse definiert. Deine Kontrollstruktur steht einfach so da, die gehört in eine Methode hinein, in einer Klasse kann Code nicht einfach da stehen. Wie soll sonst der Code aufgerufen werden?

Grüße
Tom

Hi,

schwierig zu lesen, dein Post. Ich weiß nicht mal, ob ich die Zeile 45 richtig getroffen habe.

Also ich würde mal versuchen, strtolower vor dem IF auf $dbname anzuwenden, um dann das OR im IF weglassen zu können.

Also so:

$dbname = strtolower($dbname);
if (in_array($dbname,$databases))
{
blah und blubb …

Micha

Sorry, ich muss mich korrigieren.

Die Antwort von Markus Seifert ist korrekt. Bitte streicht mal einer meinen Müll von eben.

Schöne Grüße

Micha

Hallo Jens36,

es sieht für mich so aus, als ob du in der Else-Anweisung vor deiner IF-Anweisung auf Zeile 45 die geschweifte Klammer vergessen hast.

wenn Du die Klammer (Zeile 45) vor der if Abfrage entfernst giebt es keinen Fehler.
Was auch immer die Kasse soll!
Beim Strukturierten Schreiben hättest Du das auch gesehen.
MfG
Uwe

}
if (in_array($dbname,$databases) ||

hi,

sorry, kann dir leider im moment nicht weiterhelfen.

cu
harald
*************

Parse error: syntax error, unexpected T_IF, expecting
T_FUNCTION in C:\xampp\htdocs\database.class on line 45

Hier der gesamte Code:

<?php :/* Klasse: database
\* Zweck: Verbindet mit einer MySQL-Datenbank \*/ class Database { private $cxn; private $database\_name; private $host; private $user; private $password; function \_\_construct ($filename) { include("$filename"); if(!$this-\>cxn = new mysqli($host,$user,$password)) { throw new Exception("Datenbank nicht verfügbar. Versuchen Sie es später erneut."); email("[[email protected]](mailto:[email protected])","DB-Problem", "MySQL-Server antwortet nicht. ". $this-\>cxn-\>error()); exit(); } $this-\>host = $host; $this-\>user = $user; $this-\>passwd = $password; } function useDatabase($dbname) { if(!$result = $this-\>cxn-\>query("SHOW DATABASE")) { throw new Exception("Datenbank nicht verfügbar. Versuchen Sie es später erneut."); email("[[email protected]](mailto:[email protected])","DB-Problem", "MySQL-Server antwortet nicht. ". $this-\>cxn-\>error()); exit(); } else while($row = $result-\>fetch\_row()) { $databases[] = $row[0]; } } if (in\_array($dbname,$databases) || in\_array(strtolower($dbname),$databases)) { $this-\>databases\_name = $dbname; $this-\>cxn-\>select\_db($dbname); return TRUE; } else { throw new Exception("Datnbank $dbname nicht gefunden."); return FALSE; } } function getConnection() { return $this-\>cxn; } function getDatabaseName() { return $this-\>database\_name; } } ?\> ...

überprüfe bitte mnal deine geschwungenen klammern!
dann sollte sich der fehler in luft auflösen.

greetz, me