Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.8 veröffentlicht (17.10.16)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Includescript - Problem
#1
Guten Tag.

Ich hab wieder mal ein Problem. Dieses Mal hat es etwas weniger mit dem MyBB zu tun, sondern mehr mit meiner Page.

Ich hatte bis jetzt immer folgendes Script zum Includen des Inhaltes in meiner "index.php" genutzt:
PHP-Code:
$dateiname $_GET["page"] . ".php";
if(
file_exists($dateiname))
include 
$dateiname;
else
include 
"start.php"
Nun, will ich demächst meine Homepage etwas überarbeiten. (Es hat auch was mit folgendem Problem zu tun: https://www.mybb.de/forum/showthread.php...5#pid54225)

Ich hab das Problem, dass bei mir einige Seiten aus der Datenbank ausgelesen werden sollen, aber ich hab trotzdem noch 4 Seiten (kontakt_hlg.php, download.php, pic.php und start.php), die nicht in der Datenbank stehen (werden). Ich müsste also ein Script schreiben, das folgende Dinge ermittelt:
  1. ist $_GET["page"] leer; wenn ja, dann soll die Seite "start.php" includet werden.
  2. wenn $_GET["page"] nicht leer ist, dann soll geprüft werden, ob die Datei existiert; wenn ja, dann soll diese includet werden, wenn nein, soll die Datei "error.php" includet werden
  3. wenn $_GET["page"] nicht leer ist und so eine Datei nicht existiert, dann soll $page = $id sein und in die folgende Datei (read.php) eingesetzt werden, die in diesem Moment includet wird:
    PHP-Code:
    <?php

    include 'config.inc.php';

    echo 
    "<link rel=stylesheet type='text/css' href='page.css'>\n";
    echo 
    "<div class='inhalt'>";

    error_reporting(E_ALL);

    // Daten für Verbindung zur Datenbank
    $dbhost "Localhost";
    $dbuser "*****";
    $dbpassword "*****";
    $dbdatabase "*****";

    // Präfix
    $prefix "mybb_";

    // URL zum Forum
    $url "http://www.monk.ja-nee.de/myBB";

    // Verbindung zur Datenbank aufnehmen
    $db mysql_connect($dbhost,$dbuser,$dbpassword) or die ("Verbindung fehlgeschlagen");
    mysql_select_db($dbdatabase,$db);

    //Abfrage der Datenbank
    $abfrage "SELECT message FROM {$prefix}posts WHERE pid=$id";
    $ergebnis mysql_query($abfrage);

    //Ausgabe des Feldes
    while($row mysql_fetch_object($ergebnis))
        {
        
    $posts[] = $row;
        }

    if(
    is_array($posts))
    {
        foreach(
    $posts as $message)
        {
        require_once 
    'bb.php';
            echo(
    bb_decode($message->message));
        }
    }

    echo 
    "</div>";
    ?>
    (Die Datei "config.inc.php" ist eine SWITCH-Abrage, in der ich für jeden Fall von $page einen bestimmten Wert zuweise: z.B. für case "history": $id=5;)
Ich hab mir überlegt, ob ich das per if-Abfrage lösen könnte.

PHP-Code:
$dateiname $_GET["page"] . ".php";
if(!empty(
$_GET["page"]) {
     include 
'start.php'; }
else {
     if(
file_exists($dateiname)) {
          include 
$dateiname; }
     elseif {
          include 
'read.php'; }
     else {
          include 
'error.php'; }

Dieses Script funktioniert leider nicht so, wie ich es mir erhofft habe. Kann mir jemand weiterhelfen?
Was für mich wichtig ist, ist dass das Ganze sicher ist.

Ich hoffe ich hab mich verständlich genug ausgedrückt. Ist für mich selber sehr schwer zu verstehen.
[Bild: sysp-50033.gif]
Zitieren
#2
Probiers mak hier mit, du musst natürlich noch die Datenbank abfrage reinsetzen, aber im Groben und Ganzen sollte es funktionieren.
PHP-Code:
$dateiname $_GET["page"] . ".php";
if(!empty(
$_GET["page"]) {
     if(
file_exists($dateiname)) {
          include 
$dateiname; }
     else {
          
$_GET["page"] = $id;
          
//Hier Datenbankabfrage rein wo gefragt wird nach $id in der Tabelle
          
if($datenbankabfrage){
            include 
'read.php'; }
          else {
          include 
'error.php'; }
}
else   {  include 
'start.php'

Zitieren
#3
Danke, Dave. Smile
Ich habs mal so versucht, allerdings kommt dann eine Fehlermeldung. Mein Code sieht nun so aus. Ist der richtig, weil die Fehlermeldung folgendes schreibt:
Zitat:Parse error: syntax error, unexpected '{' in /var/www/freehost-script/user_web/monk/index_new.php on line 97
So sieht der Code aus:
PHP-Code:
$dateiname $_GET["page"] . ".php";
if(!empty(
$_GET["page"]) {
     if(
file_exists($dateiname)) {
          include 
$dateiname; }
     else {
          
$_GET["page"] = $id;

// Daten für Verbindung zur Datenbank
$dbhost "Localhost";
$dbuser "*****";
$dbpassword "*****";
$dbdatabase "*****";

// Präfix
$prefix "mybb_";

// URL zum Forum
$url "http://www.monk.ja-nee.de/myBB";

// Verbindung zur Datenbank aufnehmen
$db mysql_connect($dbhost,$dbuser,$dbpassword) or die ("Verbindung fehlgeschlagen");
mysql_select_db($dbdatabase,$db);

//Abfrage der Datenbank
$abfrage "SELECT message FROM {$prefix}posts WHERE pid=$id";

          if(
$abfrage){
            include 
'read.php'; }
          else {
          include 
'error.php'; }
}
else   {  include 
'start.php'

Und so die Zeile 97:
PHP-Code:
if(!empty($_GET["page"]) { 

Wenn ich die geschweifte Klammer nun entferne, dann geht doch gar nix mehr, oder?
[Bild: sysp-50033.gif]
Zitieren
#4
Du hast vergessen die Klammer wieder zu schließen.:
PHP-Code:
$dateiname $_GET["page"] . ".php";
if(!empty(
$_GET["page"]) {
     if(
file_exists($dateiname)) {
          include 
$dateiname; }
     else {
          
$_GET["page"] = $id;

Vantage-Forum: http://vantage-forum.de/
Zitieren
#5
Oh, danke.
Es erscheint aber weiterhin die Meldung. Kann es sein, dass ich noch mehr Klammer vergessen hab?
PHP-Code:
$dateiname $_GET["page"] . ".php";
if(!empty(
$_GET["page"]) {
     if(
file_exists($dateiname)) {
          include 
$dateiname; }
     else {
          
$_GET["page"] = $id;


// Daten für Verbindung zur Datenbank
$dbhost "Localhost";
$dbuser "*****";
$dbpassword "*****";
$dbdatabase "*****";

// Präfix
$prefix "mybb_";

// URL zum Forum
$url "http://www.monk.ja-nee.de/myBB";

// Verbindung zur Datenbank aufnehmen
$db mysql_connect($dbhost,$dbuser,$dbpassword) or die ("Verbindung fehlgeschlagen");
mysql_select_db($dbdatabase,$db);

//Abfrage der Datenbank
$abfrage "SELECT message FROM {$prefix}posts WHERE pid=$id";}

          if(
$abfrage){
            include 
'read.php'; }
          else {
          include 
'error.php'; }
}
else   {  include 
'start.php'

Müsste doch passen, aber es erscheint weiterhin die gleiche Fehlermeldung. Sad
[Bild: sysp-50033.gif]
Zitieren
#6
Ja die 2. Runde bei

PHP-Code:
if(!empty($_GET["page"]) //Da nochmal ')' 

EDIT: Das wars von Anfang an! Mach die Klammer die Mak gefunden hatte wieder weg... Die hat sich nur hinter
PHP-Code:
$abfrage "SELECT message FROM {$prefix}posts WHERE pid=$id";} 
versteckt
Denken Hilft!
...und wer nicht denken will fliegt raus!
Zitieren
#7
Gut, danke Gondlar. Smile

Jetzt gibt es aber folgende Probleme:
Wenn $page leer ist, dann wird wie gewollt die Datei start.php angezeigt. Wenn ich jedoch für die Domain so aufrufe
index_new.php?page=start
dann includet zuerst die start.php und gleich dahinter die error.php.
Wenn ich nun index_new.php?page=chor aufrufe, dann soll nach der config.inc.php die $id=2 sein. Er includet aber $id=1, welche als default case gesetzt wurde.
Außerdem wird, wenn ich irgendwas beliebiges schreibe z.B. index_new.php?page=apfel (wobei "apfel" gar nicht existiert) nicht wie gewollt, die datei error.php includet.

Wo liegt da das Problem?
[Bild: sysp-50033.gif]
Zitieren
#8
Phenom schrieb:Wenn $page leer ist, dann wird wie gewollt die Datei start.php angezeigt. Wenn ich jedoch für die Domain so aufrufe
index_new.php?page=start
dann includet zuerst die start.php und gleich dahinter die error.php
Nicht sonderlich Verwunderlich: Du fragst ab ob die Datei existiert oder nicht und erstellst wenn nicht $abfrage.
Wenn ich nun index_new.php?page=chor aufrufe, dann soll nach der config.inc.php die $id=2 sein. Er includet aber $id=1, welche als default case gesetzt wurde. Dann wird else geschlossen und nur wenn es else war gibt es die Variable. Sie kann also beim nächsten if garnicht true sein, deswegen wird error included. Du musst das } nach
PHP-Code:
$abfrage "SELECT message FROM {$prefix}posts WHERE pid=$id";} //Da weg 
hinter
PHP-Code:
else
  {
    include 
'error.php';
  }
}
//Da hin 
verschieben.

Phenom schrieb:Außerdem wird, wenn ich irgendwas beliebiges schreibe z.B. index_new.php?page=apfel (wobei "apfel" gar nicht existiert) nicht wie gewollt, die datei error.php includet.

Wo liegt da das Problem?
$abfrage ist ein String und noch lange keine abfrage an die Datenbank
Denken Hilft!
...und wer nicht denken will fliegt raus!
Zitieren
#9
Danke Gondlar. Smile
Alles funktioniert bis auf die $id.

Zitat:Dann wird else geschlossen und nur wenn es else war gibt es die Variable. Sie kann also beim nächsten if garnicht true sein, deswegen wird error included. Du musst das } nach
Ich verstehe deinen Satz nicht ganz. Sad
Wie müsste ich dann das Problem lösen? Er includet jetzt wenn ich im "page=chor" angebe die $id=1 (ist in der config.inc.php als default gesetzt) anstelle der zur "chor" zugewiesenen $id=2.

Du sagst "nur wenn es else war gibt es die Variable". Heißt das, er ruft gar nicht else auf? Kommt er erst gar nicht so weit?

Danke schonmal im vorraus für die Hilfe.
[Bild: sysp-50033.gif]
Zitieren
#10
Also ich hab ein wenig versucht weiterzuarbeiten.

Ich hab immernoch nicht hinbekommen, dass wenn ich page=chor hab, dass er die $id=2 includet. Sad

Außerdem ist ein neues Problem aufgetaucht: Ich hab, damit die includeten Beiträge ordnungsgemäß angezeigt werden, die Codierung auf UTF-8 gesetzt. Jetzt wird der Text aus der Datenbank richtig dargestellt, aber die Texte aus den normalen Dateien nicht. Dort wird jeder Umlaut als ?-Zeichen dargestellt. Wie kann ich das Problem beheben?

Das Problem mit dem includen der error.php ist mir zur Zeit nicht so wichtig. Ich will erst mal nur, dass auch das includen von den richtigen $id's geht und das die Codierung passt. Smile


EDIT:
Das Codierungsproblem wurde behoben. Jetzt bleibt nur noch das mit der Variablen $id. Kann mir jemand helfen, ich komme anscheinend selber nicht zurecht. Sad
[Bild: sysp-50033.gif]
Zitieren