Eigene PHP-Seiten mit DB-Abfrage

  • Hallo zusammen,
    ich habe ein eigenes Theme erstellt (Glücksbotschaften » Startseite) und versuche nun selbst erstellte Seiten und dynamische Wordpress Seiten anzuzeigen. Das funktioniert soweit ganz gut, aber nun stoße ich auf Schwierigkeiten:

    Wie man an der linken Navigation sehen kann, gibt es dort ein Login-Feld. Wenn man dieses Formular absendet, rufe ich eine weitere Datei auf, die die Daten mit einer DB-Tabelle abgleicht. Anschliessend möchte ich den User per "include"-Befehl wieder auf die Startseite zurückführen. Ausserhalb von WordPress funktioniert das wunderbar, aber hier nicht.

    An dieser Stelle bekomme ich folgende Fehlermeldung:

    Zitat

    Fatal error: Call to undefined function: bloginfo() in /www/htdocs/w006a2a6/wp-content/themes/glueck/header.php on line 12

    Kann hier jemand helfen?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Also per "include" weiterleiten halte ich für etwas abwegig. Mach doch ein Redirect, z.B. so:

    PHP
    header( "Status: 302 Moved Temporarily" );
    header("Location: $_SERVER['SCRIPT_URI']");
    exit();

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Oh je um ehrlich zu sein, weiss ich nicht, wie und wo ich das einbauen soll. Ich bin noch ein "alter" und nicht so versierter PHP-Anfänger.

    Zu der Zeit, als ich bissel PHP programmiert habe, lief das so:

    Ein Formular wird abgesendet (index.php) --> eine neue Seite kontrolliert die Eingaben auf Gültigkeit etc. (z.B. check_form.php) --> per include(xxx.php); wird der User dann, je nach Fall mit einer Fehlermeldung zurück zur index geschmissen, oder weiter zu einer Folgeseite.

    Ich bin schon am überlegen, ob ich den kompletten WordPress-part vielleicht auf eine Subdomain auslagern soll, dann habe ich u. U. nicht so viele Probleme mit den ganzen eigenen Formularen. Da kommen noch zig weitere. Passwort vergessen... Benutzerdaten ändern.... Botschaft senden.... Freunde einladen... Anzahl gesendeter Botschaften zählen und ausgeben etc.

    Wenn ich schon "nur" beim Einloggen so grosse Probleme mit dem WordPress-Dateien habe, was wird dann noch alles folgen?

  • Die Vorgehensweise ist so schon richtig, mir ist nur nicht klar, wie Du nach der Verarbeitung der Eingabedaten dann mit 'include' wieder auf z.B. die Startseite kommen willst.

    WP macht ja bei den Kommentaren etwas Ähnliches. Das Formular ist auf der Seite das Artikels zu sehen, beim Absenden geht das Ganze aber dann an die wp-comments-post.php im WP-Wurzelverzeichnis. Hier werden die Daten ausgewertet und im Erfolgsfall wirst Du einfach wieder auf Die Seite redircted, von der Du gekommen bist (siehe ganz unten ). Sonst werden halt eine Fehlerbehandlung durchgeführt.

    Guck Dir die wp-comments-post.php einfach mal an.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Also die Datei ist mir etwas zu kompliziert. Da komm ich nicht mehr mit.

    Wenn ich mich in dem Login-Feld einlogge, dann dann kommt die nächste Seite, das passt soweit. Aber dennoch bleibt das Loginfeld stehen. Erst wenn man auf irgendeinen Link klickt, dann ändert sich der Status und man wird begrüsst. Auch hier sind die Daten korrekt.

    Also besteht das Problem hauptsächlich in der Übergabe der Variablen. Wie kann man das lösen?

    Wer mal testen möchte:
    Glücksbotschaften » Startseite
    Benutzername: oli
    Passwort: oli

    Ich brauche echt Hilfe... bin schon so weit gekommen. Nun soll es doch nicht daran scheitern....

  • Irgendwie komm ich da nicht mit.
    Warum willst Du die Logingeschichte selbst machen? Nutzt Du da eine eigene Benutzerverwaltung oder die von Wordpress?

    Ich habe das eben mal getestet. Das Problem ist ja, daß Du nach der Anmeldung eben nicht auf die ursprüngliche Seite weitergeleitet wirst, sondern irgendwo im Theme-Ordner stehenbleibst. Das finde ich zumindest nur suboptimal. Wenn Du dich in Wordpress anmeldest, willst Du ja auch nicht auf der /wp-login.php-Seite stehenbleiben, sondern dahin zurück, wo du hergekommen bist.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Also der Login bezieht sich nur auf das "Versenden der Glücksbotschaften". Das ist vom WP-Teil komplett ausgekoppelt, muss aber sein um Mißbrauch einzudämmen. Um im WP-Teil mitbloggen zu können muss man nicht registriert sein.

    Auf welche Seite man nach dem einloggen landet ist nicht mal das grosse Problem. Mein Problem ist, das ich von der check_login - Seite nicht einfach eine Seite direkt ansteuern kann. Ein direkter Link zu "http://www.gluecksbotschaften.de/wp-content/the….php?login=true" funktioniert leider nicht. Das endet in der o. g. Fehlermeldung. Aber wenn ich zum Beispiel nur "http://www.gluecksbotschaften.de/index.php?login=true" als Ziel angebe, dann schleift er meine Variable nicht mit, das der User eingelogged ist. Diese Information geht verloren, bis man auf der eigentlichen Startseite des Blogs ist.

    Wenn man bedenkt, wie viele andere Seiten noch in diesem Stil ablaufen (wie zuvor beschrieben: Benutzerdaten ändern, PW vergessen Formular, eigene Statistiken über versendete und erhaltene Botschaften...), dann bin ich echt unsicher, ob sich das alles in WP integrieren lässt. Ich hätte es gerne, daher bin ich ins kalte Wasser gesprungen und habe das Theme gemacht, aber nun beginne ich zu zweifeln ... :confused:

    Was hälst du von der Idee, den "normalen" Teil auf der Domain zu belassen und WP auf einer Subdomain zu installieren (z.B.blog.gluecksbotschaften.de) um die Skripte zu trennen? Könnte das funktionieren?

    Vielen Dankfür deine Geduld. Ich weiss, das das was ich vor habe schräg ist.

  • Eigentlich ist hier alles gut beschrieben, damit würd ich sogar zurecht kommen ;)

    Du musst in /wp-content/themes/glueck/check_login.php nach der Validierung nur den Schnippsel von Ingo einbauen. Dann muss noch der logoutLink wieder auf die entspr. Datei gelenkt werden und nicht auf index.php , wie es jetzt ist.

  • Wobei [COLOR=#000000][COLOR=#cc0000]$_SERVER['SCRIPT_URI'][COLOR=Black] nicht richtig ist, das funktioniert so nur bei Redirects. Wenn das Ziel des Posts [/COLOR][/COLOR][/COLOR]check_form.php ist, wäre das ja dann die SCRITPT_URI, so daß man doch wieder bei der check_form.php landen würde.

    Ich würde im Formular einen Hidden-Wert mit der aktuellen URL belegen.

    HTML
    <input type="hidden" name="redirect_uri" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />

    Und in der check_form.php dann am Ende

    PHP
    $location = $_SERVER['HTTP_HOST'].$_POST['redirect_uri'];
    header( "Status: 302 Moved Temporarily" );
    header("Location: $location");

    Nicht in der check_form.php die ganze Seite wieder ausgeben, bestenfalls die Fehlermeldung bei ungültigem Login.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Also erstmal vielen Dank für eure Hilfe. Ich weiss das zu schätzen.

    Ich habe die Daten mal so eingebaut, leider funktioniert es immer noch nicht korrekt. Die Abfrage

    PHP
    redirect_uri

    funktioniert leider nicht korrekt und daher hängt er einfach immer den Domain in der URL hinten dran, wenn man sich falsch einlogged. Probiert es mal aus.

    Ich poste jetzt mal den Code der einzelnen Dateien, damit man einen besseren Überblick hat.

    Codeschnipsel der linken Navi, in der der Loginstatus überprüft und dann die entsprechende Datei inkludiert wird:

    PHP
    <?php if (session_is_registered ("Session_benutzer"))  { include ("login_true.inc.php"); } else { include ("login_false.inc.php");  } ?>

    Codeschnipsel der login_false.inc.php, die in die linke Navi inkludiert wird:

    Codeschnipsel der check_login.php die bei Klick auf "einloggen" aufgerufen wird:

    Codeschnipsel der login_true.inc.php:

    PHP
    <td class="table_navi_left"><span class="navi">Hallo <b><?php echo $Session_benutzer.","; ?></b>
                        sch&ouml;n das du da bist!<br><br>Du hast seit dem xx.xx.2007 <b>999</b> Gl&uuml;cksbotschaften versendet!</span></td>

    Es fällt mir relativ schwer das zu erklären, aber man muss es doch hinbekommen, das die Informationen des Loginstatus mit Aufruf einer URI übergeben werden. Aber wie soll man das machen, wenn man keine Seite direkt ansteuern darf. Wenn man zum Beispiel nach dem Login auf einen anderen Link klickt, dann ändert sich der Status ja und man wird unterhalb der linken Navi begrüßt

    PHP
    <span class="navi">Hallo <b><?php echo $Session_benutzer.","; ?></b>
                        sch&ouml;n das du da bist!<br><br>Du hast seit dem xx.xx.2007 <b>999</b> Gl&uuml;cksbotschaften versendet!</span>

    Die Variable $Session_benutzer versuche ich Testweise auch auf der Seite zum schreiben der Nachricht auszugeben und es funktioniert nicht... In der linken Navi kann er die Variable ausgeben und im Contentbereich der gleichen Seite funktioniert es nicht mehr.

    Alles sehr verwirrend für eine kleine Leuchte wie mich :roll: Bringt ihr Licht ins Dunkel?

  • Entschuldige bitte, das ist meine Fehler.
    Bei den Locations muß vorn noch das http:// dran, also so:

    PHP
    $location = 'http://'.$_SERVER['HTTP_HOST'].$_POST['redirect_uri'];

    Gruß und gute Nacht
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Ich versuch mal mein Glück, bin aber auch nicht sooo der PHP-Experte:

  • Also das funktioniert alles soweit. Die Funktion mit dem redirect ist sehr gut. Da wäre ich nie drauf gekommen, wobei es ja eigentlich auf der Hand liegt.

    Das Hauptproblem ist aber immer noch nicht gelöst:

    Warum werde ich nicht als "eingelogged" angezeigt, wenn ich mich korrekt angemeldet habe? Das funktioniert erst, wenn ich danach einen anderen Link betätige. Erst dann kapiert der Browser, das eine Session mit dem Benutzernamen läuft. Wenn ich meine Skripte auf einen anderen Webspace lege, dann funktioniert alles fehlerfei, aber sobald die Dateien mit WP in Kontakt kommen, habe ich die Verzögerung drin.

    Und die Übergabe "blablabla/index.php?login=false" klappt überhaupt nicht.

    Habe da nun mal die Holzhammermethode getestet, die aber auch nicht funktioniert hat:
    Ich habe in WP eine Seite angelegt, die ich "logout" genannt habe. Dorthin verlinke ich nun, wenn man auf "Logout" klickt. Diese Seite besteht aus folgendem Code

    PHP
    <?php 
    session_destroy();
    $location = 'http://www.gluecksbotschaften.de';
    header( "Status: 302 Moved Temporarily" );
    header("Location: $location");
    ?>

    So versuche ich die aktive Session zu beenden um den User dann auf die Startseite zu schicken. Leider ohne erfolg...

    PHP
    Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w006a2a6/wp-content/themes/glueck/header.php:8) in /www/htdocs/w006a2a6/wp-content/plugins/exec-php.php(39) : eval()’d code on line 3

    Auch hier wird der gewünschte Status erst nach dem Klick auf einen weiteren Link übernommen.

    Irgendwie muss man doch auch im WP von einer Seite zu einer andern verweisen können und dabei Variablen übergeben... Mir fallen schon die Haare aus :?

    Einmal editiert, zuletzt von pullox (9. Juli 2007 um 00:21)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!