1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

wpde Klasse Verständnisproblem

Dieses Thema im Forum "Allgemeines" wurde erstellt von finno, 23. Juli 2013.

  1. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Ich hoffe, ich bin hier richtig! Falls nicht, kann mir jemand nen Tipp geben, wo ich die Frage posten kann?

    Folgendes Problem:
    Ich habe die Klasse wpde ausprobiert um verschiedene Daten aus der Datenbank abzufragen. Funktioniert auch erstmal alles einwandfrei.

    Nun möchte ich aber per Javascript eine php Datei aufrufen, die dann die Datenbankabfrage macht (der Hintergrund ist etwas komplizierter, aber vielleicht auch nicht so wichtig). Ich kann auch problemlos die php Datei ausführen lassen. Aber sobald ich folgenden Code einfüge, wird das ganze Script nicht mehr ausgeführt:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Gibt es da Einschränkungen aus Sicherheitsgründen? Oder warum kann ich wpdb nicht mehr benutzen, sobald die Datei durch ein Javascript aufgerufen wird? Und gibt es eine Möglichkeit, wie die php Datei doch an Daten aus der Datenbank kommt?

    merci!!
     
  2. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    ...die Klasse wpdb meinte ich natürlich ;)
     
  3. formateins

    formateins Gast

    Ist die Klasse in der PHP-Datei eingebunden? Fehlermeldungen? Was sagt var_dump? Ajax-Request? Wie sieht der aus?
     
  4. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Ich bin mir nicht ganz sicher, wie das mit dem Klassen einbinden funktioniert. Glaube, das muss ich gar nicht, da es keine fremde Klasse ist. Man findet sie bei Wordpress unter /wp-includes/wp-db.php.

    Geht beides nicht, weil die php Datei scheinbar gar nicht erst ausgeführt wird.

    Hier die php Datei, die per Javascript aufgerufen wird:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    So wie es da steht, wird gar nichts ausgegeben. Sobald ich die Zeile mit wpdb entferne, funktioniert der echo Befehl.

    Ist ein Ajax-Request, wenn eine php Datei via Javascript aufgerufen wird? Das sähe in meinem Fall so aus:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Das funktioniert auch. Die display.php wird wie gesagt ausgeführt, solange ich darin nicht wpdb verwende.
     
  5. entwickler

    entwickler Well-Known Member

    Registriert seit:
    27. Oktober 2012
    Beiträge:
    76
    Zustimmungen:
    0
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Du brauchst das require und das global.
    Dann sollte es gehen. Oder hast Du das schon?

    Damit Dein Code unabhängig vom gewählten Tabellenprefix ist,
    schreibe die Tabellen so, wie ich es oben im SELECT geändert habe.
    Schließlich hat jeder ein anderes Prefix.
    Und wp_ als Prefix ist unsicher.
     
    #5 entwickler, 24. Juli 2013
    Zuletzt bearbeitet: 24. Juli 2013
  6. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Danke!

    Mit dem require verhält es sich jetzt leider genauso, wie mit dem $wpdb->get_col(). Sobald ich es benutze, geht gar nichts mehr (echo "klappt"; wird nicht mehr ausgeführt).

    Klingt für mich, als ob das Script bestimmte Aktionen nicht ausführen darf. Kann das sein? Es wird ja scheinbar komplett abgebrochen.
     
  7. formateins

    formateins Gast

    Debuggen will gelernt sein. Lass Dir mal den XHR-Status in der Konsole ausgeben.

    Probiers mal saubererer:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
  8. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Puuuh, bitte nachsichtig sein. Ich hab eigentlich kaum Ahnung von Javascript und natürlich auch noch nie von Debugging per Console gehört. Wenn ich jetzt nicht völlig auf dem Holzweg bin, meinst du das, was man sich von Firebug anzeigen lassen kann, oder?

    Da wird sinngemäß folgendes gemeldet:


    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Warum jetzt 404? Wenn die Datei nicht gefunden wird, wie kommt Firefox dann an die korrekte Ausgabe der php Datei?
     
  9. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    ...die Ausgabe bei firebug funktioniert allerdings ohne console.log() im javascript genauso. Versteh noch nicht ganz wozu die Anweisung gut ist.
     
  10. formateins

    formateins Gast

    Poste bitte mal den aktuellen, kompletten Inhalt der display.php.

    Ersetze ihn Testweise durch:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    PS: Es hilft auch, die display.php mit angehängtem Parameter mal direkt im Browser aufzurufen und mit aktiviertem error logging von PHP zu analysieren. In diesem Bezug das Thema Sicherheit nicht vergessen! ;)
     
    #10 formateins, 29. Juli 2013
    Zuletzt von einem Moderator bearbeitet: 29. Juli 2013
  11. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Hier die komplette display.php:
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wenn ich die php Datei direkt im Browser aufrufe, sehe ich die korrekte Ausgabe der echo Anweisungen. Nur per Javascript in den <div id="display"></div> kann ich nichts einhängen. Der bleibt leer, es sei denn ich lösche die Zeile mit $wpdb->get_col().

    Wenn ich den Inhalt der display.php durch Code von formateins ersetze, bleibt beides leer. Sowohl der div, als auch die Ausgabe der display.php direkt im Browser.

    Ich bin mir allerdings auch nicht ganz sicher, ob mein Error Reporting in der php Datei wirksam ist. Auf eine zentrale php.ini Datei habe ich keinen Zugriff. Kann ich stattdessen einfach eine zweite im beliebigen Verzeichnis erstellen?
     
  12. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Ok, nochwas - Lasse ich require() weg, bekomme ich jetzt diese Fehlermeldung:
    Mit require('domain.tld/wp-blog-header.php') bekomme ich diese Fehlermeldung:
    Wenn ich bei require() statt der Domain den kompletten Pfad der Verzeichnisse auf dem Server angebe, bekomme ich gar keine Fehlermeldung im Browser, aber die Konsole meldet 404.
     
  13. formateins

    formateins Gast

    Entweder setzt Du Dich mal intensiver mit dem Thema auseinander oder Du wirst Dich dauerhaft im Kreis drehen. Ohne Programmierkenntnisse ist letzteres garantiert. ;)

    1. Vollkommen klar, dass das nicht funktioniert. Auch Fehlermeldungen kann man Googeln. Nur soviel: keine Objektinstanz der WPDB-Klasse > nix funktionieren.
    2. Wenn Du die Wordpress-API nutzen willst, musst Du sie auch richtig einbinden. Schon mal einen Blick in die wp-blog-header.php geworfen? Die befindet sich im Wurzelverzeichnis und inkludiert auch von dort aus. Wenn Du diese Datei irgendwo im Theme einbindest, funktioniert des nicht.

    Probiers mal hiermit, das funktioniert 100% ohne Probleme:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wenn Dein Blog in einem Unterverzeichnis installiert ist, bitte mit angeben.
     
  14. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Das merke ich auch langsam. Hätte ich ein bischen mehr Zeit, würde ich liebend gerne nochmal php von Grund auf lernen ;)

    hmm ...jetzt muss ich mich auch noch mit oop auseinandersetzen? Ich versteh zwar nicht warum, aber durch das inkludieren der wp-load.php scheint jetzt ja auch das Objekt verfügbar zu sein. Zumindest funktioniert jetzt alles einwandfrei und ohne Fehlermeldung.

    Hast mir echt weiter geholfen. Ich hab zwar scheinbar zu viele Wissenslücken, um meinen Fehler so richtig zu kapieren ...aber es funzt!!! :D ...Danke!!
     
  15. formateins

    formateins Gast

    Es gibt nur OOP und MVC. Okay, ich mag ja auch Spaghetticode hier und dort, aber sehr begrenzt. Jeder fängt mal an und ich hab auch schon richtig böse Dinger gebastelt.

    Die wp-load.php inkludiert schlichtweg alles. Steht aber auch in der Datei drin. Kann man aufmachen und lesen. :D Bei der wp-blog-header.php fehlt die Angabe des ABSPATH (absoluter Pfad), deswegen versucht sie, die weiteren Dateien relativ reinzuholen. Ergo hättest Du den ABSPATH dort übermitteln müssen. Kann man sich sparen - wp-load.php und fertig.

    Einer der Gründe, warum ich Wordpress sch... nicht mag. Und nach wie vor wird um eine Problemzone drumherum gebastelt, anstatt sie mal richtig anzugehen...
     
  16. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Ich bin bisher immer ans Ziel gekommen, indem ich an den vorhandenen Dateien des Themes oder der Plugins rumeditiert habe. Für meine kleineren Probleme war weder OOP noch MVC nötig. Ein paar Grundlagen werde ich mir da aber wohl oder übel mal aneignen müssen..

    Da geht's ja schon los - ich hatte auch mal reingeschaut und gesehen das die wp-config.php und wp-settings.php geladen wird. Aber ohne die WP Hierarchie ein wenig zu kennen, nützt mir das Wissen auch erstmal nicht viel. Aber sei's drum - danke nochmal, kommt ja doch noch etwas Licht ins Dunkel.
     
  17. formateins

    formateins Gast

    Ich könnte ja jetzt noch schreiben, dass man das idealerweise gar nicht in eine externe Datei presst sondern einfach als Funktion in der functions.php hinterlegt, aber wenn es funktioniert... alles wird gut... :D
     
  18. finno

    finno Well-Known Member

    Registriert seit:
    23. Juli 2013
    Beiträge:
    66
    Zustimmungen:
    0
    Wie kann ich denn Funktionen aus der functions.php im Javascript nutzen? Meines Wissens nach geht das nicht und ich muss stattdessen den Request machen.

    Es geht ja darum, nachdem die Seite vollständig geladen ist, weitere Inhalte nachzuladen. Dabei soll auch noch ein sleep in der display.php verwendet werden, damit die Ausgabe erst nach ein paar Sekunden erscheint.
     
  19. formateins

    formateins Gast

    In JavaScript nutzt Du die ja auch nicht. Grundsätzlich steht die functions.php im Theme zur Verfügung. Es wäre also ein Leichtes, ein Objekt (oder von mir aus ein Array) mit Daten zu füllen und diese mit einem kleinen jQuery-Script zeitversetzt (setTimeout) darzustellen. Spart den zusätzlichen Request über Ajax und bietet ein wenig mehr Sicherheit. :)
     
  20. derheimwerker

    derheimwerker Well-Known Member

    Registriert seit:
    5. Dezember 2012
    Beiträge:
    271
    Zustimmungen:
    0
    Das Delay wäre clientseitig besser aufgehoben. Ansonsten startest Du serverseitig einen PHP-Prozess, der dann einige Sekunden läuft und die Ressourcen blockiert. Wenn Du es mit Javascript implementieren würdest, würdest Du das auf den Benutzer "abwälzen". Warum brauchst Du ein Dely, wenn ich fragen darf?
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden