Andreas: prüfen ob< input type=image ... >geklickt wurde

Hallo!
ich verstehe das nicht ganz.
Ich möchte in meinem PHP-Script prüfen, ob eine eine Bild-Schaltfläche angeklickt wurde, aber das funktioniert nicht.

Folgendes steht im Formular:
 <input type="image" src="images/weiter2.gif" width="60" height="18" border="0" name="weiter">

Wenn ich auf diese Button klicke, steht in der Adressleiste als Parameter auch: ?weiter.x=43&weiter.y=8

Aber wie kann ich jetzt in PHP rüfen ob das geklickt wurde?

Meine gescheiterten Versuche:

<?php if(isset($weiter)) echo "ja"; ?>  // passiert nix
 <?php if(isset($weiter["x"])) echo "ja"; ?> // ebenfalls
 <?php if(isset($weiter.x)) echo "ja"; ?> // parse Error(wieso bitte?)

Was mache ich falsch?

Grüße
Andreas

  1. Hi,

    Wenn ich auf diese Button klicke, steht in der Adressleiste als Parameter auch: ?weiter.x=43&weiter.y=8

    [...]

    <?php if(isset($weiter.x)) echo "ja"; ?> // parse Error(wieso bitte?)

    hier offenbart sich eine weitere Schwäche des extremen Mangels und Sicherheitsrisikos, dass PHP aus Parametern automatisch Variablen mit nicht eindeutigen Namen generiert. Der Punkt ist in PHP ein Operator mit spezieller Bedeutung und kann daher nicht in einem Variablennamen stehen.

    Verwende grundsätzlich die assoziativen Arrays $_GET und $_POST, um auf Parameter zuzugreifen. Verwende niemals die magisch generierten Variablen.

    Cheatah

    1. Hallo!

      hier offenbart sich eine weitere Schwäche des extremen Mangels und Sicherheitsrisikos, dass PHP aus Parametern automatisch Variablen mit nicht eindeutigen Namen generiert. Der Punkt ist in PHP ein Operator mit spezieller Bedeutung und kann daher nicht in einem Variablennamen stehen.

      Warum ist das ein Sicherheitsrisiko? Wenn register_globals ausgeschaltet ist ist auch dieses Risiko ausgeschaltet, also keine Schwäche von PHP mehr, oder?

      Verwende grundsätzlich die assoziativen Arrays $_GET und $_POST, um auf Parameter zuzugreifen.

      Das ist mir auch klar, sehr klar sogar. Aber das war ein Test, udn bei Tests muß ich nicht ubedingt auf jede kleinigkeit achten, es ging ums prinzip und wieso sollte ich das unnötig verkomplizieren?

      Verwende niemals die magisch generierten Variablen.

      was meinst Du genau mit "magisch generiert"? Welche wären das denn sonst noch? Mit anderen Worten mit PHP kann ich grafische Schaltflächen vergessen?

      Irgendwie muß das doch gehen, andere machen das ja auch! Leider kann ich nicht so ohne weiteres in fremden PGP-Code schnüffeln, wie bei Javascript oder html :-(

      Grüße
      Andreas

      1. Hi,

        Warum ist das ein Sicherheitsrisiko?

        das wurde bereits multipel diskursiert.

        Wenn register_globals ausgeschaltet ist ist auch dieses Risiko ausgeschaltet, also keine Schwäche von PHP mehr, oder?

        Die Schwäche ist es, dass dieser Wert überhaupt auf TRUE gesetzt werden kann bzw. sehr häufig ist.

        Verwende grundsätzlich die assoziativen Arrays $_GET und $_POST, um auf Parameter zuzugreifen.
        Das ist mir auch klar, sehr klar sogar.

        Das freut mich zu hören.

        Aber das war ein Test, udn bei Tests muß ich nicht ubedingt auf jede kleinigkeit achten, es ging ums prinzip und wieso sollte ich das unnötig verkomplizieren?

        Nun ja, mit sicherheitsrelevanten Dingen ist nun mal nicht zu spaßen - und auch die testweise Benutzung von Sicherheitslöchern[1] lässt auf eine mangelhafte Gewöhnung an die Vermeidung derselben schließen und ist somit eine Bemerkung wert.

        [1] Vorausgesetzt natürlich, es sind nicht die Löcher selbst, die man austesten möchte.

        Verwende niemals die magisch generierten Variablen.
        was meinst Du genau mit "magisch generiert"?

        Auf magischem, also nicht direkt nachvollziehbarem Wege. Hier betrifft es insbesondere die Tatsache, dass Variablen semantisch gleichen Namens aus unterschiedlichen Quellen kommen können.

        Mit anderen Worten mit PHP kann ich grafische Schaltflächen vergessen?

        Nein, die PHP-Entwickler haben an solche Fälle gedacht. Das Problem erübrigt sich aber, sowie Du konsequent $_GET und $_POST verwendest.

        Irgendwie muß das doch gehen, andere machen das ja auch!

        Übrigens ist es sehr häufig überhaupt nicht nötig nachzusehen, ob ein Submit-Button geklickt wurde.

        Leider kann ich nicht so ohne weiteres in fremden PGP-Code schnüffeln, wie bei Javascript oder html :-(

        Dazu würde ich eigentlich nicht "leider" sagen :-) Vor allem aber kannst Du in $_GET schnüffeln.

        Cheatah

        1. Hallo!

          Die Schwäche ist es, dass dieser Wert überhaupt auf TRUE gesetzt werden kann bzw. sehr häufig ist.

          Was ja inzwischen standardmäßig auf Off steht, also in Kürze haben das nur noch Leute die wissen was sie tun.

          Nun ja, mit sicherheitsrelevanten Dingen ist nun mal nicht zu spaßen - und auch die testweise Benutzung von Sicherheitslöchern[1] lässt auf eine mangelhafte Gewöhnung an die Vermeidung derselben schließen und ist somit eine Bemerkung wert.

          Jo, aber man darf ja mal aus Faulheit für einen Test weglassen, oder? Wie gsagt ist mir das Problem ja bewußt.

          Auf magischem, also nicht direkt nachvollziehbarem Wege. Hier betrifft es insbesondere die Tatsache, dass Variablen semantisch gleichen Namens aus unterschiedlichen Quellen kommen können.

          OK, das ist wahr, naja, man arbeitet ja daran das Problem zu beheben.

          Nein, die PHP-Entwickler haben an solche Fälle gedacht. Das Problem erübrigt sich aber, sowie Du konsequent $_GET und $_POST verwendest.

          Das mache ich "normalerweise" auch.

          Übrigens ist es sehr häufig überhaupt nicht nötig nachzusehen, ob ein Submit-Button geklickt wurde.

          Ja, aber in meinem Fall nbenutze ich 6 verschiedene grafische Schltflächen(weiter,zurück,schritt 1-4), man kann einfach weiter, zurück klicken, odr irgendwienen anderen Schritt in der Bestellung und egal was man macht werden die eingegebenen Daten in der Session gespeicheert, nur die header-weiterleitung ist halt eine andere. So stehen dei eingegebenen DAten nämlich garabtiert später wieder zur verfügung und können ggfs noch geändert werden...

          Dazu würde ich eigentlich nicht "leider" sagen :-) Vor allem aber kannst Du in $_GET schnüffeln.

          Kann wirklich nicht verstehen, warum ich auf sowas nicht selbst komme. Das ärgert mich jetzt wirklich. Sorry! Damit hat sich das erledigt ;-) Danke!

          Grüße
          Andreas

  2. Hallo!
    ich verstehe das nicht ganz.
    Ich möchte in meinem PHP-Script prüfen, ob eine eine Bild-Schaltfläche angeklickt wurde, aber das funktioniert nicht.

    Bei grafischen Submitbuttons werden die x- und y-Koordinate des Mausklicks übertragen.

    Wenn ich auf diese Button klicke, steht in der Adressleiste als Parameter auch: ?weiter.x=43&weiter.y=8

    Aber wie kann ich jetzt in PHP rüfen ob das geklickt wurde?

    Du hast immer die Möglichkeit, dir sämtliche dem Script von externen Quellen (GET, POST, COOKIES, ENVIRONMENT, SERVER) her zugänglichen Daten per phpinfo(); anzeigen zu lassen. Es spart Scrollarbeit, wenn du dir nur den Abschnitt über diese Variablen ausgeben läßt: phpinfo(INFO_VARIABLES);

    Ansonsten besteht die Möglichkeit, gezielt den Inhalt bekannter Variablen durch var_dump() ausgeben zu lassen: var_dump($_GET);

    Durch Anwendung einer der beiden Möglichkeiten findest du schnell heraus, welche Daten übergeben werden - entsprechend muß man sie ansprechen. Ein wenig mehr Eigeninitiative und Ideenreichtum hätte ich allerdings schon erwartet. Du bist doch schließlich kein Anfänger mehr!

    - Sven Rautenberg

    1. Hallo!

      Du hast immer die Möglichkeit, dir sämtliche dem Script von externen Quellen (GET, POST, COOKIES, ENVIRONMENT, SERVER) her zugänglichen Daten per phpinfo(); anzeigen zu lassen.

      Das war mir klar, aber - ah, so meinst Du das, einfach das in dieses Script Script einfügen, ich habe das bis jetzt nur in einem einzigen Script zum anzeigen verwndet, eigentlich nur um zu sehen was welche Variablen zurückgeben, aber an die Möglichkeit habe ich noch nie gedacht! Danke für den Tip!

      Es spart Scrollarbeit, wenn du dir nur den Abschnitt über diese Variablen ausgeben läßt: phpinfo(INFO_VARIABLES);

      Wußte ich auch nicht!

      Ansonsten besteht die Möglichkeit, gezielt den Inhalt bekannter Variablen durch var_dump() ausgeben zu lassen: var_dump($_GET);

      Das wußte ich zwar, habe das auch schon zum debuggen benutzt, aber nur bei $_SESSION um zu kontrollieren, was jetzt in die Session geschrieben wurde, ist mir wirklich peinlich das ich in diesem Zusammenhang nicht selbst darauf gekommen bin - sorry.

      Durch Anwendung einer der beiden Möglichkeiten findest du schnell heraus, welche Daten übergeben werden - entsprechend muß man sie ansprechen. Ein wenig mehr Eigeninitiative und Ideenreichtum hätte ich allerdings schon erwartet. Du bist doch schließlich kein Anfänger mehr!

      Gut, jetzt weiß ich es, Eigeninitiative war wohl da, nur ich bin wirklich nicht auf diese Ideen gekommen, zumal das ja eigentlich keine so komplizierte Frage war, aber danke für die Denkanstöße, werds mir meken und das nächste mal kann ich mir eine vergleichbare Frage schenken ;-)

      Danke Dir!

      Grüße
      Andreas