Get Variable aus URL auslesen

  • Guten Tag zusammen.


    Ich darf mich kurz als Neuling vorstellen. Mein Name ist Sven, ich bin KEIN professioneller Programmierer, aber habe mich bereits viel mit PHP beschäftigt und einige Skripte selbst geschrieben. Ich halte mich also nicht für einen blutigen Anfänger, aber bin weit davon entfernt, mich mit einem Profi gleich zu setzen.


    Ich habe mich nun mal ein wenig mehr mit Joomla beschäftigt und finde das ganze Thema vor allem dann interessant, wenn ich eigene Skripte ebenfalls verwenden kann.


    Jetzt bin ich aber mal auf eine ganz banale Problematik gestoßen, die wahrscheinlich peinlich sein wird, hier überhaupt als Frage zu posten, aber ich hab des Rätsels Lösung noch nicht gefunden...


    Und zwar geht es mir um die klassische Übergabe einer Variablen mittels $_GET. In meinem bisherigen PHP-Leben habe ich gelernt, dass eine solche Variable innerhalb einer URL wie folgt übergeben werden kann:


    PHP
    <?php$uid=123echo"<a href=\"http://www.test.de/kategorie?id=$UID\"></a>";?>


    abgerufen habe ich die Variable dann zum Beispiel immer mit


    PHP
    <?phpif (isset($_GET['id']));{$id = $_GET['id'];}?>


    So, nun habe ich natürlich versucht, diese Codierung innerhalb von Joomla-Beiträgem zu implementieren. Die Id erscheint grundsätzlich auch so, wie sie soll in der URL (ich habe Sie nicht id sondern nr genannt).


    ABER:


    Wenn ich die Variable nun in einem anderen Beitrag abrufen möchte, funktioniert das nun nicht. Ich habe mich bereits mit JInput beschäftigt und gehe davon aus, dass dies der Weg nach Rom ist. Mein Versuch sieht aktuell wie folgt aus:


    PHP
    <?php
    $jinput = JFactory::getApplication()->input;
    $UID = $jinput->get('nr', '1');
    ?>


    Leider funktioniert dies jedoch nicht und ich erhalte immer die vordefinierte 1.


    Was mache ich falsch bzw. was muss ich anders machen?


    Bitte erschlagt mich mit meiner Frage nicht sofort.


    Ich hoffe auf helfende Antworten. Besten Dank im Voraus.

  • Wenn ich die Variable nun in einem anderen Beitrag abrufen möchte


    "anderen" versteh ich nicht ganz. Einer der zusätzlich mit dem URL-Parameter nr aufgerufen wird?


    So, nun habe ich natürlich versucht, diese Codierung innerhalb von Joomla-Beiträgem zu implementieren.


    Wie denn?


    Lass dir mal JInput per Debugzeile ausgeben und prüfe, was unter data zu sehen ist.

    Code
    echo 'Debug $jinput: '.print_r($jinput, true);exit;


    Ändere den Wert des nr-Parameters in der Adresszeile händisch und lade Seite im Browser neu.


    Dein erster Code ist falsch, da $uid nicht $UID ist. PHP unterscheidet Groß-Kleinschrift.

  • wenn du die variabel in einen anderen Artikel aufrufen möchtest musst du sie zwischen Speichen

    Code
    $uid=123;$app = JFactory::getApplication();$app->setUserState('nr', $uid);


    so wird sie dann wieder aufgerufen.

    Code
    $app = JFactory::getApplication();
    $nr = $app->getUserState('nr', 'uint');
  • Wenn ich die Variable nun in einem anderen Beitrag abrufen möchte


    "anderen" versteh ich nicht ganz. Einer der zusätzlich mit dem URL-Parameter nr aufgerufen wird?


    Okay, habe ich mich anscheinend wieder mal unklar ausgedrückt. Also ich habe innerhalb Joomla 2 verschiedene Beiträge. Im ersten Beitrag (nennen wir ihn Beitrag A) habe ich eine Liste mit verschiedenen Datensätzen veröffentlich. Die Datensätze werden aus einer MySQL-Datenbank ausgelesen und innerhalb des Beitrages als Liste ausgegeben. Jeder Datensatz hat eine eigene id (wie es ja auch üblich ist). Jeder Datensatz aus diesem Beitrag A führt per Hyperlink zum zweiten Beitrag (nennen wir Ihn Beitrag B). Dazu muss ich aber die id aus Beitrag A mittels GET (oder in Joomla wie auch immer) innerhalb der URL an Beitrag B übergeben.


    Nun habe Beitrag B. Hier benötige ich nun die id, die ich per GET (oder in Joomla wie auch immer) eigentlich über die URL erhalten sollte und auslesen können müsste. Die korrekte ID sehe ich tatsächlich auch in der URL. Die Übergabe selbst funktioniert also scheinbar. Ich bekomme diese jedoch bisher nicht in Beitrag B ausgelesen und in eine Variable gepackt. Da liegt mein Problem.


    So, nun habe ich natürlich versucht, diese Codierung innerhalb von Joomla-Beiträgem zu implementieren.


    Wie denn?


    Naja, es mag ja naiv sein und wie gesagt, Joomla ist noch Neuland für mich, aber ich habe den Tinyeditor ausgeschaltet und habe den Code entsprechend direkt in Beitrag B gepackt. Ich muss allerdings dazu sagen, dass ich den Code für das auslesen der Liste für Beitrag A in einer separaten Datei gespeichert habe und diese per ftp in einen separaten Ordner gepackt habe. Beitrag A zieht sich demnach den code aus dieser Datei per include(), was ich wiederum direkt in das code feld von Beitrag A gepackt habe. Ich hoffe, du kannst mir folgen :)


    Lass dir mal JInput per Debugzeile ausgeben und prüfe, was unter data zu sehen ist.

    Code
    echo 'Debug $jinput: '.print_r($jinput, true);exit;


    Ändere den Wert des nr-Parameters in der Adresszeile händisch und lade Seite im Browser neu.


    Nochmal, Joomla ist Neuland für mich. JInput habe ich vorher weder gehört noch gekannt. Wie lass ich mir dazu die Debugzeile ausgeben? Mag dumm klingen. Sorry. Aber wer nicht fragt, bleibt auch dumm.


    Dein erster Code ist falsch, da $uid nicht $UID ist. PHP unterscheidet Groß-Kleinschrift.


    Das ist mir bewusst. Das ist aber auch ein Fehler, den ich nur hier im Forum eingebaut hatte. Im tatsächlichen code ist es richtig. Sorry dafür.[/quote]

  • wenn du die variabel in einen anderen Artikel aufrufen möchtest musst du sie zwischen Speichen

    Code
    $uid=123;$app = JFactory::getApplication();$app->setUserState('nr', $uid);


    so wird sie dann wieder aufgerufen.

    Code
    $app = JFactory::getApplication();
    $nr = $app->getUserState('nr', 'uint');


    Deinen Vorschlag habe ich ausprobiert. Aber ich erhalte eine Fehlermeldung:

    Zitat

    Fatal error: Uncaught Error: Class 'JFactory' not found in /var/www/web366/html/hipav1/eigene_skripte/jobliste.php:31 Stack trace: #0 {main} thrown in /var/www/web366/html/hipav1/eigene_skripte/jobliste.php on line 31


    Übrigens trotzdem schon mal danke für eure Antworten! Ich weiß eure Hilfe sehr zu schätzen.

  • ber ich habe den Tinyeditor ausgeschaltet und habe den Code entsprechend direkt in Beitrag B gepackt.


    Ohne zusätzliche Erweiterung kannst du keinen PHP-Code in den Beitragseditor packen. Den führt Joomla nicht aus.


    Deswegen habe ich mich über deinen ersten Post gewundert

    Leider funktioniert dies jedoch nicht und ich erhalte immer die vordefinierte 1.


    Es gibt bspw. Erweiterungen wie Sourcerer (kenn ich nur vom Hörensagen), aber auch das JPlugger vom FINWICK (dito).


    Oder hier ein Tutorial von mir. Die Technik bevorzuge ich nach wie vor, weil es auf "purem Joomla" aufbaut, aber natürlich in bestimmtem Umfeld auch "unbequem" werden kann ;)
    ghsvs.de/programmierer-schnipsel/joomla/114-modulstil-zum-includen-eigener-php-dateien-verwenden


    Grundlegend wichtig ist bei allen , dass man sich in eine Joomla-API-Umgebung begibt, wo man dann auch vollen Zugriff auf diese hat, wie z.B. JInput etc.


  • Sorry, das hätte ich natürlich noch erwähnen sollen. Ich habe das Plugin directPHP installiert. Das funktioniert auch definitiv, denn anderen PHP code kann ich einwandfrei verarbeiten. Die GET-Anweisung ist das erste Problem, dass ich nun habe.

  • Also ich bin keine Freunde von solchen Erweiterungen da durch leitet nur die Performance deiner Webseide und es kann in zu ungewollten Sicherheit Problemen kommen.
    Ich Kenne die Erwiderung zwar nicht aber von meine Verständnis her Kannst du keine Joomla Code verwanden.


    Warum Knast du keine Joomla Code verwanden!
    Eigentlich ganz Logisch,
    Es muss Ja erst Joomla komplett geladen sein erst jetzt kann das Plugin denn zusätzlichen Code an denn php Interpreter schicken.
    Zu diesen Zeit Punkt Existiert der Joomla Code nicht mehr.

  • @Robox
    Weiß zwar auch nicht, wo directPHP seine Grenzen hat, aber deine Argumentation hinkt. Es handelt sich um ein Content-Plugin, NICHT um ein System-Plugin, das erst aus der "fertigen Seite" den PHP-Block rausholt und per eval ausführt, z.B. in einer Methode onAfterRender.


    Das Plugin arbeitet mit Methode onContentPrepare und der PHP-Code hat so rechtzeitig Zugriff auch auf die vom TE gewünschten Joomla-Methoden.


    Um das einfach mal zu testen auch mein Tipp oben mal zu debuggen:


    Code
    echo 'DEBUG: '.print_r(JFactory::getApplication()->input, true); exit;


    Funktioniert einwandfrei und der data-Teil enthält auch die korrekte nr, wenn ich ein "?nr=158" an die URL der Seite anhänge.


    Code
    echo 'DEBUG: '.print_r(JFactory::getApplication()->input->get('nr'), true); exit;


    gibt korrekt 158 aus.


  • So, erstmal sorry, dass ich erst jetzt antworte und schon mal danke für die Hilfe bisher. Da ich derzeit parallel auch noch eine neue Terrasse am Haus baue, kann es immer etwas dauern, bis ich antworte. Ich bitte dies zu entschuldigen.


    So, ich bin mir nun nicht ganz sicher, wo ich die Debug Zeile einsetzen soll.


    Ich habe einerseits die datei "jobliste.php" in welcher ich aus einer Tabelle alle erforderlichen Daten auslese (unter anderem auch nr). In diesem Skript packe ich nr in einen link und übergebe per get. Ich gehe davon aus, dass debug hier keinen Sinn macht.


    Also vermute ich, dass ich die Zeile innerhalb Joomla in meinen Beitrag "Jobausschreibung" eintragen muss. Hier habe ich die Zeile nun mal direkt an den Anfang gesetzt und bekomme als Ausgabe dann "DEBUG:" ohne eine Zahl.


    Alles soweit richtig oder muss ich etwas anders machen?

  • Wenn ich beide DEBUG Zeilen in meinem Beitrag eingebe, erhalte ich folgendes:


    Zitat

    DEBUG: JInput Object ( [options:protected] => Array ( ) [filter:protected] => JFilterInput Object ( [stripUSC] => 0 [tagsArray] => Array ( ) [attrArray] => Array ( ) [tagsMethod] => 0 [attrMethod] => 0 [blacklistedChars:Joomla\Filter\InputFilter:private] => Array ( [0] => &tab; [1] => &space; [2] => : [3] => &column; ) [xssAuto] => 1 [tagBlacklist] => Array ( [0] => applet [1] => body [2] => bgsound [3] => base [4] => basefont [5] => embed [6] => frame [7] => frameset [8] => head [9] => html [10] => id [11] => iframe [12] => ilayer [13] => layer [14] => link [15] => meta [16] => name [17] => object [18] => script [19] => style [20] => title [21] => xml ) [attrBlacklist] => Array ( [0] => action [1] => background [2] => codebase [3] => dynsrc [4] => formaction [5] => lowsrc ) ) [data:protected] => Array ( [id] => 72 [?nr] => 1 [roksprocket-showitems] => 1 [4c8607002a27e5fdb3c980271400794d] => 056994ff0db62760e1d1836fcebe781e [joomla_user_state] => logged_in [78ee333abb9dc8389fe79967c52c9254] => dad73c6e168ca66df2e67964314cf72e [Itemid] => 213 [option] => com_content [view] => article ) [inputs:protected] => Array ( [cookie] => JInputCookie Object ( [options:protected] => Array ( ) [filter:protected] => JFilterInput Object ( [stripUSC] => 0 [tagsArray] => Array ( ) [attrArray] => Array ( ) [tagsMethod] => 0 [attrMethod] => 0 [blacklistedChars:Joomla\Filter\InputFilter:private] => Array ( [0] => &tab; [1] => &space; [2] => : [3] => &column; ) [xssAuto] => 1 [tagBlacklist] => Array ( [0] => applet [1] => body [2] => bgsound [3] => base [4] => basefont [5] => embed [6] => frame [7] => frameset [8] => head [9] => html [10] => id [11] => iframe [12] => ilayer [13] => layer [14] => link [15] => meta [16] => name [17] => object [18] => script [19] => style [20] => title [21] => xml ) [attrBlacklist] => Array ( [0] => action [1] => background [2] => codebase [3] => dynsrc [4] => formaction [5] => lowsrc ) ) [data:protected] => Array ( [roksprocket-showitems] => 1 [4c8607002a27e5fdb3c980271400794d] => 056994ff0db62760e1d1836fcebe781e [joomla_user_state] => logged_in [78ee333abb9dc8389fe79967c52c9254] => dad73c6e168ca66df2e67964314cf72e ) [inputs:protected] => Array ( ) ) ) )

  • deine url ist wahrscheinlich Fehler Haft
    nr wird nicht richtig gesetzt bei dir kommt so raus [?nr] => 1


    Das war der Knackpunkt und des Rätsels Lösung. Ich hatte tatsächlich ein ? zuviel im Link, da ich übersehen hatte, dass bereits eine weitere id von Joomla übergeben wird. Nun läuft alles und auch GET funktioniert, wie es mir bekannt ist.


    An alle vielen Dank nochmals für eure Zeit und Hilfe. Hier kann vorerst nun zugemacht werden. Von nun an dürfte ich wieder allein klar kommen.