cygnus: Nach input durch User Seite direkt ausgeben

Hallo :)

Ich kann eine Seite, deren Nummer ein User eingibt, bisher nur über 2 Klicks ausgeben lassen.
input type submit ist der erste Klick.
Die Zahl wird gesendet, geprüft und dann wird ein Seitenlink ausgegeben, der einen erneuten Klick nötig macht, um diese Seite aufzurufen.
Das klappt soweit.

Ist es möglich, mit dem Klick auf den submit-Button nach Prüfung der Zahl gleich die verlinkte Seite auszugeben?
Wenn ja:
Womit wird das gemacht? Kann man dafür überhaupt eine Verlinkung nehmen?
Ich möchte das Problem nicht mit Javascript lösen.

So sieht der Code derzeit aus:

  
  
echo " <form action='index.php' method='post'> ";  
echo " <input name='seitennummer'> ";  
echo " <input type='submit'> " ;  
  
  
// definiert Konstante 'seitennummer'  
  
   if ( ! isset ($_POST['seitennummer']))  
        { $_POST['seitennummer'] = '0'; }  
  
  
  
// wandelt Konstante in Variable  
  
        $seitennummer = $_POST['seitennummer'];  
  
  
  
// prüft ob eingegebene Seitennummer vorhanden ist  
  
    if ( $seitennummer > $gesamtseiten OR $seitennummer < 1 )  
         { echo "Bitte geben Sie eine Zahl zwischen 1 und $gesamtseiten an." ; }  
  
  
// wenn vorhanden Ausgabe des Links mit der eingegebenen Seitennummer  
  
    else { echo "<a href=\"?seite=$seitennummer\">Seite $seitennummer</a> "; }  
  
echo " </form> ";  
  

Kann jemand helfen?

cygnus

--
Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
  1. Hi,

    Ich kann eine Seite, deren Nummer ein User eingibt, bisher nur über 2 Klicks ausgeben lassen.
    input type submit ist der erste Klick.
    Die Zahl wird gesendet, geprüft und dann wird ein Seitenlink ausgegeben, der einen erneuten Klick nötig macht, um diese Seite aufzurufen.

    das ist nicht nötig. Mir fallen auf Anhieb zwei Möglichkeiten ein, das gewünschte Ziel mit nur einem Klick (1x Submit) zu realisieren.

    Womit wird das gemacht? Kann man dafür überhaupt eine Verlinkung nehmen?

    Ein Link (im Sinne von HTML) hat hier gar keinen Auftritt.

    Möglichkeit 1: Ein HTTP-Redirect
    Dein PHP-Script prüft die übergebene Nummer auf Gültigkeit, und sendet dann einen Redirect auf die entsprechende Seite:

    $newpage = "http://www.example.net/page" . $seitennummer . ".html");
     header("Location: $newpage");

    Dabei darf vor der header-Anweisung kein Code an den Client ausgegeben werden, weil diese Art der Weiterleitung über HTTP-Header realisiert wird, die immer vor den Nutzdaten ausgegeben werden müssen.

    Möglichkeit 2: Inhalt direkt ausgeben
    Dein PHP-Script prüft die übergebene Nummer auf Gültigkeit, und sendet dann selbständig die Inhalte der gewünschten Seite, ohne noch einmal umzuleiten. Das könnte man mit include oder readfile lösen:

    $incpage = "http://www.example.net/page" . $seitennummer . ".inc");
     readfile($incpage);

    Ich möchte das Problem nicht mit Javascript lösen.

    Das würde ich auch nicht wollen.

    // definiert Konstante 'seitennummer'
       if ( ! isset ($_POST['seitennummer']))
            { $_POST['seitennummer'] = '0'; }

    Das ist nicht unelegant - falls kein POST-Parameter übergeben wurde, erzeugst du ihn selbst. Der Kommentar ist allerdings gelogen - hier wird keine Konstante angelegt.

    // wandelt Konstante in Variable
            $seitennummer = $_POST['seitennummer'];

    Warum kopierst du den Parameter hier nochmal um, nachdem du eben sichergestellt hast, dass er existiert? Das sieht man oft, es ist aber ineffizient und verschleiert die Herkunft der Daten. Arbeite im Script ruhig direkt mit $_POST['seitennummer']. Da sieht man wenigstens direkt, wo's herkommt.

    So long,
     Martin

    --
    Ich bin im Prüfungsstress, ich darf Scheiße sagen.
      (Hopsel)
    1. Hallo :)

      Möglichkeit 2: Inhalt direkt ausgeben

      $incpage = "http://www.example.net/page" . $seitennummer . ".inc");
      readfile($incpage);

      Ich weiss nicht, ob ich das umsetzen kann. Eine Seite setzt sich bei mir aus 6 includierten Dateien zusammen, aber eine der Dateien wird zur Zählung der Elemente pro Seite verwandt.
      Ich probiere das mal.

      // definiert Konstante 'seitennummer'
          if ( ! isset ($_POST['seitennummer']))
               { $_POST['seitennummer'] = 0; }

      Das ist nicht unelegant - falls kein POST-Parameter übergeben wurde, erzeugst du ihn selbst.

      Die Blümchen kann ich nicht behalten.
      Leider muss ich die an Beat hier im Forum weiterreichen ...

      Der Kommentar ist allerdings gelogen - hier wird keine Konstante angelegt.

      Na ich lüge doch nicht, ich irre mich nur ...
      Aber richtig: Die Warnmeldung lautete: Notice: Undefined index: seitennummer

      // wandelt Konstante in Variable
               $seitennummer = $_POST['seitennummer'];

      Warum kopierst du den Parameter hier nochmal um, nachdem du eben sichergestellt hast, dass er existiert?

      In einem PHP Handbuch las ich, man müsse das so machen, um eine Manipulation der URL zu verhindern.
      Das hing mit der Einstellung der register_globals zusammen.
      Dies ist nicht die Seite, auf der ich es gelesen habe, aber da wird es auch beschrieben:
      http://www.heddesheimer.de/blog/index.php/2006/01/25/p94

      mfg
      cygnus

      --
      Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
      1. hi,

        » Warum kopierst du den Parameter hier nochmal um, nachdem du eben sichergestellt hast, dass er existiert?

        In einem PHP Handbuch las ich, man müsse das so machen, um eine Manipulation der URL zu verhindern.
        Das hing mit der Einstellung der register_globals zusammen.

        Sind sie denn bei dir auf ON? Wenn ja, kannst du es ändern?
        Siehe auch: http://de.php.net/register_globals

        „This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged“

        mfg

        --
        echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
        array(2) {
          ["SELFCODE"]=>
          string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
          ["Meaningful"]=>
          string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
        }
        1. Hallo :)

          Sind sie denn bei dir auf ON?

          Nein, die sind ausgestellt.
          Ich habe aber festgestellt, dass ich für den a href  link eine Fehlermeldung bekomme, wenn ich nicht umkopiere.
          Nun suche ich ja inzwischen nach einer anderen Lösung ...

          mfg
          cygnus

          --
          Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
          1. hi,

            Ich habe aber festgestellt, dass ich für den a href  link eine Fehlermeldung bekomme, wenn ich nicht umkopiere.

            Wie lautet die Fehlermeldung?

            mfg

            --
            echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
            array(2) {
              ["SELFCODE"]=>
              string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
              ["Meaningful"]=>
              string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
            }
            1. Hallo :)

              Ich habe aber festgestellt, dass ich für den a href  link eine Fehlermeldung bekomme, wenn ich nicht umkopiere.

              Wie lautet die Fehlermeldung?

              else { echo "<a href="?seite=$_POST['seitennummer']">seite $_POST['seitennummer']</a>" ;
                    }
              Parse error: parse error, expecting T\_STRING' or T_VARIABLE' or `T_NUM_STRING' in C:\ ...index.php on line 163

              Ich habe weiter ausprobiert: ohne die Anführungstriche kommt keine Fehlermeldung.

              else { echo "<a href="?seite=$_POST[seitennummer]">seite $_POST[seitennummer]</a>" ;
                    }

              Aber das gilt nur für die Ausgabe im Link. Mache ich das im übrigen Code, bekomme ich das:
              Notice: Use of undefined constant seitennummer - assumed 'seitennummer' in C:\x

              Irgendwie bin ich immer wieder überrascht ...

              mfg
              cygnus

              --
              Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
              1. Mahlzeit cygnus,

                Irgendwie bin ich immer wieder überrascht ...

                Das wärst Du nicht, wenn Du in der Dokumentation den entsprechenden Abschnitt ("Array do's and don'ts") durchgelesen und verstanden hättest.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                1. Ja das ist durchaus richtig erkannt.

                  Lese ich die Handbücher, muss ich gestehen, dass ich im deutschsprachigen Handbuch nur wenig von der Materie verstehe und dass das noch schwieriger wird, ja eigentlich unmöglich wird, wenn es sich um die englische Ausgabe handelt.

                  Am besten geht es noch, wenn ich ein funktionierendes Script analysiere.

                  mfg
                  cygnus

                  --
                  Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
                  1. echo $begrüßung;

                    Lese ich die Handbücher, muss ich gestehen, dass ich im deutschsprachigen Handbuch nur wenig von der Materie verstehe und dass das noch schwieriger wird, ja eigentlich unmöglich wird, wenn es sich um die englische Ausgabe handelt.

                    Handbuchphobie, eine nicht gerade gering verbreitetes Problem ...

                    Am besten geht es noch, wenn ich ein funktionierendes Script analysiere.

                    Einfach so notiert

                    $array[key]

                    wird key zunächst als Konstante interpretiert. Gibt es keine solche, notiert PHP das und versucht es als String zu interpretieren.

                    "im String $array[key] hingegen"

                    wird key direkt als String angesehen.

                    "im String {$array['key']} und mit einfachen Anführungszeichen"

                    werden die {}-Klammern benötigt. Und dann gibt es noch die Funktion sprintf(), mit der man Platzhalter im String definiert und dafür die Werte als Parameter übergibt:

                    $foo = sprintf('ein %s im String', $platz['halter']);

                    Statt echo sprintf(...) kann man übrigens auch gleich printf(...) schreiben.

                    echo "$verabschiedung $name";

              2. hi,

                else { echo "<a href="?seite=$_POST['seitennummer']">seite $_POST['seitennummer']</a>" ;
                      }
                Parse error: parse error, expecting T\_STRING' or T_VARIABLE' or `T_NUM_STRING' in C:\ ...index.php on line 163

                Ich wollte meinem Posting noch hunzufügen, dass

                "<a href=\"?seite=$_POST['seitennummer']\">seite $_POST['seitennummer']</a>"

                nicht funktioniert, hielt es aber nicht für nötig.

                '<a href="?seite=' . $_POST['seitennummer'] . '">seite ' . $_POST['seitennummer'] . '</a>'  
                oder auch  
                "<a href=\"?seite={$_POST['seitennummer']}\">seite {$_POST['seitennummer']}</a>"  
                
                

                Wobei davon abzuraten ist, die $_POST-Inhalte, egal ob umkopiert oder nicht, einfach im HTML auszugeben, Stichwort „Kontextgerechtes behandeln“.

                mfg

                --
                echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
                array(2) {
                  ["SELFCODE"]=>
                  string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
                  ["Meaningful"]=>
                  string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
                }
                1. echo $begrüßung;

                  Wobei davon abzuraten ist, die $_POST-Inhalte, egal ob umkopiert oder nicht, einfach im HTML auszugeben, Stichwort „Kontextgerechtes behandeln“.

                  Gutes Stichwort und eine Gelegenheit das mit (s)printf() zu kombinieren. Statt

                  echo 'den String zu unterbrechen, um eine ', htmlspecialchars($_POST['Benutzereingabe']), 'einzusetzen';

                  printf('kann man die %s auch per Platzhalter einbinden', htmlspecialchars($_POST['Benutzereingabe']));

                  echo "$verabschiedung $name";

    2. Hallo :)

      $newpage = "http://www.example.net/page" . $seitennummer . ".html");
      header("Location: $newpage");

      $incpage = "http://www.example.net/page" . $seitennummer . ".inc");
      readfile($incpage);

      Das scheint mir beides nicht umsetzbar (obwohl es natürlich auch daran liegen kann, dass ich etwas falsch mache).
      Die Seiten werden erst durch eine  for Schlaufe gebildet.
      Die Adresse muss so aussehen:
      http://www.example.net/index.php?seite=$seitennummer

      mfg
      cygnus

      --
      Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
      1. Mahlzeit cygnus,

        Das scheint mir beides nicht umsetzbar

        Warum nicht?

        (obwohl es natürlich auch daran liegen kann, dass ich etwas falsch mache).

        Offensichtlich.

        Die Seiten werden erst durch eine  for Schlaufe gebildet.

        Ja und?

        Die Adresse muss so aussehen:
        http://www.example.net/index.php?seite=$seitennummer

        Und was hindert Dich daran, exakt zu dieser URL weiterzuleiten?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Hi,

    Ist es möglich, mit dem Klick auf den submit-Button nach Prüfung der Zahl gleich die verlinkte Seite auszugeben?
    Wenn ja:
    Womit wird das gemacht?

    Mit Copy&Paste beispielsweise - in dem man die Pruefung der Zahl gleich oben in diese "Seite" mit reinschreibt. (Ggf. noch mit weiteren Vorbedingungen verknuepft, wenn die Pruefung der Zahl nicht immer stattfinden soll.)

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hallo :)

      Mit Copy&Paste beispielsweise - in dem man die Pruefung der Zahl gleich oben in diese "Seite" mit reinschreibt. (Ggf. noch mit weiteren Vorbedingungen verknuepft, wenn die Pruefung der Zahl nicht immer stattfinden soll.)

      Diese "Seite" wird durch eine forschlaufe gebildet,
      ausgelesen wird zeilenweise  ein Textfile, dass in der ersten Spalte einer Tabelle steht und kombiniert ist mit etwa 5 weiteren Textfiles in 5 parallelen Spalten.
      Wie kann ich in "diese Seite" eine Prüfung hineinschreiben?
      Bisher habe ich mit if und else gearbeitet und dann einen Link angegeben.

      Die Adresse sieht üblicherweise so aus:
      http://www.beispiel.de/irgendwas.php?seite=1

      mfg
      cygnus

      --
      Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
  3. Hallo :)

    Ich möchte mich erst einmal für alle Antworten bedanken.

    Ich muss einige Tage pausieren, möchte aber später versuchen, die Antworten umzusetzen.

    Ich hoffe, dass der Thread bis dahin nicht verschwunden ist ...
    vielleicht kann er bis Mitte nächster Woche stehen bleiben?

    mfg
    cygnus

    --
    Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
    1. Hallo cygnus!

      Ich hoffe, dass der Thread bis dahin nicht verschwunden ist ...
      vielleicht kann er bis Mitte nächster Woche stehen bleiben?

      Das wird er nicht. Aber wenn ein Thread im Archiv gelandet ist, ist es nicht verboten, einen neuen aufzumachen und sich auf den Archivthread zu beziehen.

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --
      _ - jenseits vom delirium - _

         Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?