Ankündigung

Einklappen
Keine Ankündigung bisher.

form method=get und routing Probleme...

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • form method=get und routing Probleme...

    Hallöchen,

    auch wenn es wirklich eine Anfängerfrage ist und mich etwas beschämt, nervt mich das aktuell echt sehr.

    Nun in meinem System spreche ich z.B. via ?route=admin/settings/menus meine Controller an, bei Post Formularen kann ich diese Route bequem in das action-Feld des Formular Tags angeben, bei GET funktioniert es schon mal nicht ich lande dann auf der index.php ohne Route.

    Nun dachte ich ok versuchen wir es mal mit nem verstecktem route Feld im Formular was auch funktioniert jedoch in der URL die / dann durch %s ersetzt sind und wirklich blöde ausschaut.

    Nun würde mich natürlich interessieren ob es hier alternativen gibt, ich möchte auf GET eigentlich nicht gänzlich verzichten, denn für diverse kleinere Filter eignet sich das ja zb. ganz gut.


    MFG: Paykoman


  • #2
    Keine Ahnung wovon du redest. Codebeispiel?
    Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

    Kommentar


    • #3
      Du muss doch lediglich dein action-Attribut im Formular anpassen an die Stelle wo du das Formular verarbeitest. Auch bei GET kannst du action="index.php?bla=foo" verwenden.

      Kommentar


      • #4
        Hallo,

        aber eben genau das klappt nicht wirklich =(

        PHP-Code:
        // <form method="post" action="<?php link::get(); ?>"> link::get() gibt die aktuelle Route aus
        // verwende ich eigentlich und das klappt wunderbar =(
        <form method="get" action="index.php?route=admin/settings/menus">
            <select name="menu" id="menu" class="selectizeASC" onChange="this.form.submit()">
                <option value=""><?php $wwm->ttrans('admin_settings''Select a menu'); ?></option>
            <?php foreach( $this->_['menus'] as $menu ){ ?>
                <option value="<?php echo $menu['id']; ?><?php if( isset($_GET['menu']) AND $menu['id'] == $_GET['menu'] ){ echo "selected"; } ?>><?php echo $menu['id']; ?></option>
            <?php ?>
            </select>
        </form>
        Ich bekomme dann lediglich: index.php?menu=member
        und die Route ist eben völlig entfernt.

        Mit dieser Zeile innerhalb der form,
        Code:
        <input type="hidden" name="route" value="admin/settings/menus" />
        Klappt es zwar wieder aber da werden wie gesagt aus den / ein %2 in der url

        Kommentar


        • #5
          Klappt es zwar wieder aber da werden wie gesagt aus den / ein %2 in der url
          Slashes werden zu %2F, jedoch nur in der URL - das hat dich aber nicht zu interessieren, auf PHP Seite kommt wieder ein Slash heraus...

          PHP-Code:
          <?php
          if (isset($_GET['route'])) 
              
          var_dump($_GET);
          ?>
          <form method="GET" action="">
          <input type="hidden" name="route" value="/admin/settings/menu" />
          <input type="submit" name="button" value="send!">
          </form>
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Naja klar, sagte ja das es klapüpt aber nur in der URL halt nimmer so schön aussieht =)

            Die Frage ist ja mehr wenn es möglich sein soll in der action="" Parameter zu machen wie uach bei POST warum es denn hier jetzt nicht klappt?

            Kommentar


            • #7
              Klappt.. klappt nicht.. ?
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Mit dem versteckten Feld klappt es, steht auch ganz oben schon...

                Ich würde es aber gerne ohne das versteckte Feld hinbekommen das es eben über den action Parameter funktioniert....

                Kommentar


                • #9
                  Das geht aber nunmal nicht da bei method=GET einfach alles was hinter ? steht vom Browser neu gesetzt wird.
                  Zitat von nikosch
                  Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                  Kommentar


                  • #10
                    Trenn deine Route aus dem GET-Query und wickel diese virtualisiert ab ( PATH_INFO ). So vergessen deine URL später ihre Route nicht.

                    Code:
                    dein-script.php/this/is/my/route
                    Code:
                    $_SERVER['PATH_INFO'] <= '/this/is/my/route'
                    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                    Kommentar


                    • #11
                      So, habe nun ein paar Änderungen gemacht um auf PATH_INFO umzubauen und die Route zu virtualisieren.
                      Soweit scheint es nun auch zu klappen und ist denke ich die bessere Methode, so werde ich morgen denn rest auf das neue System umstellen.

                      Danke für die Infos und Hilfe.

                      mFG: Pay

                      Kommentar


                      • #12
                        Bedenke aber, das für diesen Zweck der Webserver konfiguriert sein muss. nginx konstruiert PATH_INFO nicht von hause aus. Apache schon. Ist aber mehr oder weniger Pseudo-Default das PATH_INFO auf fast allen Mass-Hostern aktiv ist.
                        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                        Kommentar


                        • #13
                          Hallöchen,

                          ich habe ja damals mein System auf die Virtualisierung umgebaut und von dort an das ganze immer über die vhost.conf verwaltet (also RewriteRule für freundliche URLs etc.).
                          Dies hat auch immer ganz gut geklappt, leider habe ich dort aber atm Probleme nur für einen Unterordner Regeln zu erstellen (so das der Rest eben nicht betroffen ist), aktuelles Thema dazu.

                          Die vhost.conf sieht z.B. so aus:
                          Code:
                          <IfModule mod_rewrite.c>
                              RewriteEngine On
                              ################
                              # Hostname 'normalisieren'
                              ################
                              RewriteCond %{HTTP_HOST} !=domain.tld
                              RewriteRule (.*) http://domain.tld$1 [R=301,L]
                          
                              ################
                              # Aufruf der index.php datei weiterleiten zur Startseite
                              ################
                              RewriteRule ^/index.php$ http://domain.tld/Startseite [R=301,L]
                          
                              ################
                              # Zugriff auf die Seite via freundliche URL
                              ################
                              RewriteRule ^/admin/(.*)/(.*)$ /index.php/admin/$1/$2
                              RewriteRule ^/site/(.*)/(.*)$ /index.php/site/$1/$2
                          
                              ################
                              # SEO URLS
                              ################
                              RewriteRule ^/Startseite$ /index.php/site/portal/home
                              RewriteRule ^/Region-ändern(.*)$ /index.php/site/wwmanager/region$1
                              RewriteRule ^/Sprache-ändern(.*)$ /index.php/site/wwmanager/slang$1
                              RewriteRule ^/Content-nach-Region-filtern(.*)$ /index.php/site/wwmanager/cregion$1
                              RewriteRule ^/Content-nach-Sprache-filtern(.*)$ /index.php/site/wwmanager/cslang$1
                          
                              RewriteRule ^/Anmelden(.*)$ /index.php/site/auth/login$1
                              RewriteRule ^/Abmelden(.*)$ /index.php/site/auth/logout$1
                              RewriteRule ^/Session-löschen(.*)$ /index.php/site/auth/clear$1
                              RewriteRule ^/Registrieren(.*)$ /index.php/site/auth/register$1
                              RewriteRule ^/Konto-aktivieren(.*)$ /index.php/site/auth/activation$1
                              RewriteRule ^/Passwort-vergessen(.*)$ /index.php/site/auth/newpassword$1
                              RewriteRule ^/Aktivierungs-email(.*)$ /index.php/site/auth/resend$1
                          </IfModule>
                          So das ganze funktioniert auch wie gewüncht aber wie eben erwähnt wenn jetzt ein zweites Skript im Unterordner läuft wird es unschön, des weiteren würde ich eigentlich gerne später auch wieder meinen .htaccess Genertor benutzten der dann eben immer genau diese Regeln nach aktuellem Stand anlegt.
                          Leider klappt das mit der Virtualisierung aber nicht wirklich wie ich das eben feststellen musste.

                          .htaccess
                          Code:
                          RewriteEngine On
                          RewriteBase /project_x/
                          
                          RewriteRule ^Startseite$ index.php/site/portal/home
                          Resultat: "No input file specified."

                          Gibt es da nen kleinen Trick-17 damit es auch via .htaccess funktioniert oder muss ich das dafür wieder in den _GET param packen?
                          Ach ja die .htaccess liegt natürlich im Ordner httpdocs/project_x/ weil die Regeln die dort definiert werden sollen, sollen ja nur für diesen Ordner gültig sein und nicht für den ganzen /httpdocs

                          MFG: Pay

                          Kommentar


                          • #14
                            Deine RewriteRule zeigt auf den Unterordner und sucht dort eine index.php

                            Ich vermute allerdings du willst in dem Unterordner auf den Hauptordner zugreifen, dann solltest du wie in deinen vhost-Einstellungen ein / dem index.php vorstellen. Ein Rewrite-Base ist eigentlich dort nicht nötig.

                            Ist dir eigentlich bewusst das du mit deinen Rewrite-Rules grundsätzlich alles umschreibst, von der css-Datei bis zum Bild über nicht existierende Pfade hinweg ?
                            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                            Kommentar


                            • #15
                              Hi,

                              ja, sofern die Scripte anständig aufgebaut sind können die damit ganz gut umgehen (habe da bisher keine Probleme, habs ja schon eine lange Zeit via vhost.conf so laufen).

                              Nein, die index.php befindet sich in besagtem Unterordner ( httpdocs/project_x/index.php ), hier kommen wir dann ja auch zu dem anderen Problem das ich oben verlinkt habe...
                              Ich wollte genau für diese Situation die vhost.conf anpassen, da dies aber zu keinem Erfolg führte, versuche ich nun mittels .htaccess ausschließlich für das Skript das sich in diesem Ordner befindet Regeln zu erstellen, scheint aber genau so wenig erfolgreich zu klappen =(

                              Ich hatte das schon mal gehabt, bevor ich meine Route virtualisiert habe, da hat die selbe .htaccess-anweisung funktioniert, der Unterschied war halt das dort das Ziel index.php?route=site/portal/home gewesen ist, jetzt ist es index.php/site/portal/home und jetzt mit .htaccess scheint die index.php wohl nicht mehr wirklich angesprochen zu werden und es kommt die Fehlermeldung "No input file specified." über die vhost.conf funktioniert es jedoch -,-

                              Kommentar

                              Lädt...
                              X