Jones: Anfängerfrage POST-Request simulieren

Hallo,

könnte mir jemand weiterhelfen? Ich sehe vor lauter Bäumen den Wald nicht mehr. Ich bin PHP-Anfänger. Ich möchte mit php meine Html-Seite ein bißchen dynamisieren. Ich möchte meine Index.php Seite mit Parametern aufrufen, die z.B. festlegen, welche Punkte eines Menüs aufgeblättert oder geschlossen werden. Welche Inhalte und Includes eingebunden werden, etc. pp. Die Parameter sollen bei den entsprechenden Links natürlich verändert werden.

Ein Beispiel: Ein Klick auf einen Obermenüpunkt mit der Id n schaltet das Flag n collapsed/expand um. Das heißt, die Seite wird per Link mit dem Parameter neu aufgerufen und beim Laden wird der Parameter und der Link umgesetzt und die Unterpunkte je nach Flag angezeigt oder ausgeblendet.

Mit Get würde ich das glaube ich problemlos hinkriegen, aber das ganze soll nicht mit der GET-Methode, sondern über POST passieren. Ich möchte nicht, daß man meine Flags über die URL auslesen oder setzen kann. Ich liebe zwar Javascript, aber auf Javascript möchte ich bewußt komplett verzichten, da die Seite auch dann funktionieren soll, wenn Javascript deaktiviert ist.

Nach einigem googeln habe ich eine Funktion gefunden, die einen Postrequest simuliert (s.u.). Ich raff aber nicht, wie ich diese Funktion aufrufen muss. Wie kann ich sie in einen link setzen? Normalerweise würde ich ja schreiben: "<a href="index.php?flag1=wert1&flag2=wert2 etc. pp.

Wie kann ich mit der untenstehenden Funktion meine Werte über einen Link an die Seite übergeben? Das ist mir nicht ganz klar.

http://www.php-center.de/faq/faq-scripts.html#scripts-3

#! ./php -q
<?php

function PostToHost($host, $path, $referer, $data_to_send) {
  $fp = fsockopen($host,80);
  printf("Open!\n");
  fputs($fp, "POST $path HTTP/1.1\n");
  fputs($fp, "Host: $host\n");
  fputs($fp, "Referer: $referer\n");
  fputs($fp, "Content-type: application/x-www-form-urlencoded\n");
  fputs($fp, "Content-length: ".strlen($data_to_send)."\n");
  fputs($fp, "Connection: close\n\n");
  fputs($fp, "$data_to_send\n");
  printf("Sent!\n");
  while(!feof($fp)) {
      $res .= fgets($fp, 128);
  }
  printf("Done!\n");
  fclose($fp);

return $res;
}

$data = "pid=14&poll_vote_number=2";

printf("Go!\n");
$x = PostToHost(
              "www.linux.com",
              "/polls/index.phtml",
              "http://www.linux.com/polls/index.phtml?pid=14",
              $data
);

  1. hi,

    Mit Get würde ich das glaube ich problemlos hinkriegen, aber das ganze soll nicht mit der GET-Methode, sondern über POST passieren.

    Warum?
    Für Ressourcen, die nicht personalisiert sind, sondern für jeden aufrufenden Nutzer die gleichen Inhalte liefern, sollte im Normalfall GET benutzt werden.

    Ich möchte nicht, daß man meine Flags über die URL auslesen oder setzen kann.

    Warum?

    Abgesehen davon, dass es absolut nicht kein Mehr an "Sicherheit" bringt, falls du das unsinnigerweise annehmen solltest - es verhindert das Bookmarken, es erschwert dem Nutzer die Unterscheidung von Ressourcen an hand des URLs (bzw. dürfte sie sogar ziemlich unmöglich machen), Suchmaschinen werden deine Unterseiten damit auch nicht finden ...

    Ausserdem sollten URLs "hackable" sein.

    Nach einigem googeln habe ich eine Funktion gefunden, die einen Postrequest simuliert (s.u.).

    Die nützt dir hier absolut Nullkommagarnix.

    Wenn ich Webseiten besuche, ist es Aufgabe meines Clients, Ressourcen anzufordern - was willst du da mit einer serverseitigen Funktion?

    Ich raff aber nicht, wie ich diese Funktion aufrufen muss. Wie kann ich sie in einen link setzen?

    Serverseitige Funktionen kannst du nur durch Anforderung einer Ressource "aufrufen".

    Normalerweise würde ich ja schreiben: "<a href="index.php?flag1=wert1&flag2=wert2 etc. pp.

    Mach das einfach, und alles wird gut.

    Wenn du "schönere" URLs haben willst - dann beschäftige dich mit Techniken wie mod_rewrite.

    Wie kann ich mit der untenstehenden Funktion meine Werte über einen Link an die Seite übergeben?

    G.a.r. n.i.c.h.t.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. ja das mit dem Bookmarken und den Suchmaschinen ist ein Argument, zumindest was die Variablen für den Inhalt angehen. Daran habe ich zugegeben noch gar nicht gedacht.

      Bei anderen Flags komme ich wohl nicht darum herum die Werte auf die Seite zu schreiben und dann kann ich sie glaube ich auch gleich in die URL hängen. Auch ein Argument.

      Naja. Danke für den Denkanstoß. Ich muss Dir Recht geben.

      1. hi,

        Bei anderen Flags komme ich wohl nicht darum herum die Werte auf die Seite zu schreiben und dann kann ich sie glaube ich auch gleich in die URL hängen.

        Parameter sind nichts, wofür man sich schämen müsste (zumindest, so lange man nicht extrem lächerliche Namen oder Werte wählt ...)

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo,

          Parameter sind nichts, wofür man sich schämen müsste (zumindest, so lange man nicht extrem lächerliche Namen oder Werte wählt ...)

          Und wenn schon, dann kann man sie ja noch mit ModRewrite "aufpolieren" ;D

          Gruß,
            Click

          --
          $browser = new BrowserIdentifier()
          if($browser->shortcut == "ie") {
            do_unordinary_things_with_ie();
          }
          else {