Hampa: radiobutton und if-schlaufe

Salut zusammen

Ich habe ein Problem. Ich möchte, dass ich über ein Radiobutton etwas auswählen kann und anschliessend soll es mir, je nach ausgewähltem radio button, etwas anders rausgeben. Leider ist es so, dass es im Moment, egal was ich auswähle, "Snow ist aktiviert" erscheint. Kann mir jemand helfen? Ich habe meine Scripts hier gepostet:

<form method="POST" action="/neu/upload/gallery_auswahl.php">
  <p>
  Bilder zu folgender Gallery hinzufügen:</p>
  <p>
    <input type="radio" name="water" value="water">
    Water
</p>
  <p>
    <input type="radio" name="snow" value="snow">
    Snow</p>
  <p>
     <input type="radio" name="air" value="air">
Air  </p>
  <p>
  <input type="submit" value="uploaden" name="B1"></p>
  <p><br>
  </form>

und hier die gallery_auswahl.php - Datei:

<?
$snow = $snowgallery;
$air  = $airgallery;
$water= $watergallery;

if($snowgallery = 1) echo "Snow ist aktiviert";
elseif ($airgallery = 1) echo "Air ist aktiviert";
elseif ($watergallery = 1) echo "Water ist aktiviert";
else echo "Nichts ist aktiviert";

?>

würe mich über eure Hilfe freuen.

Danke und lieben Gruss
Hampa

  1. Hallo Hampa!

    Zuersteinmal vorab: es heißt if-Schleife ;-)

    <form method="POST" action="/neu/upload/gallery_auswahl.php">
      <p>
      Bilder zu folgender Gallery hinzufügen:</p>
      <p>
        <input type="radio" name="water" value="1">
        Water
    </p>
      <p>
        <input type="radio" name="snow" value="1">
        Snow</p>
      <p>
         <input type="radio" name="air" value="1">
    Air  </p>
      <p>
      <input type="submit" value="uploaden" name="B1"></p>
      <p><br>
      </form>

    und hier die gallery_auswahl.php - Datei:

    <?
    $snow = $snowgallery;
    $air  = $airgallery;
    $water= $watergallery;

    Welchen Wert haben $snowgallery, $airgallery und $watergallery?

    if($snowgallery = 1) echo "Snow ist aktiviert";

    Du prüfst nicht, ob der Wert eins ist, sondern ob sich der Variable der Wert eins zuweisen lässt. Außerdem prüfst du nicht $snow. Mit

    if($snow == 1) echo "Snow ist aktiviert";

    sollte es klappen.

    elseif ($airgallery = 1) echo "Air ist aktiviert";
    elseif ($watergallery = 1) echo "Water ist aktiviert";

    Dito.

    Gruß

    Matthias

    --
    ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
    http://www.makaio.de/quotations
    1. Zuersteinmal vorab: es heißt if-Schleife ;-)

      Und zweitens: sowas gibt es nicht. Nur if, keine Schleife. ;)

    2. Hallo,

      Zuersteinmal vorab: es heißt if-Schleife ;-)

      Nö, weil es keine Schleife ist.

      Gruß, Jan

    3. Hi Matthias,

      if($snowgallery = 1) echo "Snow ist aktiviert";
      Du prüfst nicht, ob der Wert eins ist, sondern ob sich der Variable der Wert eins zuweisen lässt.

      nur für's Archiv - das stimmt so nicht ganz. ($var = x) liefert den Wert der gesamten Anweisung, der in diesem Fall der Zuweisung entspricht. So liefert ($var = 0) durchaus 0, was aber, trotz korrekt erfolgter Zuweisung, false entspricht.

      Gruß,
      Andreas.

      1. Hallo!

        nur für's Archiv - das stimmt so nicht ganz. ($var = x) liefert den Wert der gesamten Anweisung, der in diesem Fall der Zuweisung entspricht. So liefert ($var = 0) durchaus 0, was aber, trotz korrekt erfolgter Zuweisung, false entspricht.

        Da bin ich nicht ganz einverstanden (oder habe Auklärungsbedarf). Wenn ich ein Konstrukt (ja, keine Schleife ;-) )

        if ($var = 0) {}

        habe, dann wird mittels if überprüft, ob der Ausdruck in der Klammer wahr oder falsch ist. Wahr, wenn die Operation glückt, falsch, wenn dem nicht so ist. Gleichzeitig wird zwar auch $var auf 0 gesetzt, davon kriegt if selbst doch aber nix mit.

        Im PHP-Handbuch heißt es dazu:

        "Wie im Abschnitt über Ausdrücke beschrieben, wird ausdr auf seinen boolschen Wertinhalt ausgewertet. Wenn ausdr als TRUE ausgewertet wird, führt PHP die Anweisung aus. Falls die Auswertung FALSE ergibt, wird die Anweisung  übergangen."

        Gruß

        Matthias

        --
        ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
        http://www.makaio.de/quotations
        1. Hi,

          "Wie im Abschnitt über Ausdrücke beschrieben, wird ausdr auf seinen boolschen Wertinhalt ausgewertet. Wenn ausdr als TRUE ausgewertet wird, führt PHP die Anweisung aus. Falls die Auswertung FALSE ergibt, wird die Anweisung  übergangen."

          Der Wert einer Zuweisung ist NICHT, ob die Zuweisung geklappt hat oder nicht.
          Der Wert einer Zuweisung ist der zugewiesene Wert.

          Im Falle von
          if ($x = 0)
          {
          }
          ist das also 0.

          Wenn man schreibt

          $b = $a = 5;

          ist $b ja auch 5 und nicht true oder false.

          cu,
          Andreas

          --
          Warum MudGuard?
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo!

            Der Wert einer Zuweisung ist NICHT, ob die Zuweisung geklappt hat oder nicht.
            Der Wert einer Zuweisung ist der zugewiesene Wert.

            Der Wert der _Zuweisung_, ja. Aber es gibt in diesem Fall ja nicht nur eine Zuweisung, sondern auch eine Kontroll-Struktur, die eine Bedingung prüft.

            Die Zuweisung weist einer Variable einen Wert zu. Punkt 1.
            Die if-Kontrolle prüft, ob diese Zuweisung erfolgreich war. Somit bekommt wie auch immer man das nennt, was den Zuweisungswert einer if-Kontrolle speichert, den Wert TRUE oder FALSE zugewiesen. Punkt 2.

            IMHO hat aber weder die Variable, die einen Wert zugewiesen bekommen hat, zusätzlich den Wert TRUE oder FALSE, noch das if-Dingsbums zusätzlich den Wert, der der Variable zugewiesen wurde.

            Liege ich falsch?

            Gruß

            Matthias

            --
            ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
            http://www.makaio.de/quotations
            1. Die if-Kontrolle prüft, ob diese Zuweisung erfolgreich war.

              Er hat es dir doch gerade erklärt: Nein, das macht sie nicht! Die Zuweisung steht dort als Ausdruck, der vom if ausgewertet wird.

              if ($a = 12) {...}

              ist nur die Kurzform für

              $a = 12;
              if ($a) {...}

              1. Hallo!

                if ($a = 12) {...}

                ist nur die Kurzform für

                $a = 12;
                if ($a) {...}

                Ich hätte es dir jetzt spontan auch nicht geglaubt, hab's dann aber mal fix ausprobiert, ein wenig rumexperimentiert, und auch nochmal etwas weniger oberflächlich in der PHP-Doku geblättert - und muß mich geschlagen geben. Da lag dann wohl ein Mißverständnis der grundlegenden Logik meinerseits vor.

                Somit also für's Archiv: ich lag daneben, sorry für die Extra-Lektüre.

                Dieser Auszug aus der Doku dürfte es belegen:

                " Ein letzter Punkt, der noch zu erwähnen ist, ist der ´wahr´-Wert von Ausdrücken. In vielen Fällen, hauptsächlich in bedingten Anweisungen und Schleifen, ist man nicht am spezifischen Wert eines Ausdrucks interessiert, sondern kümmert sich nur darum, ob er WAHR oder FALSCH bedeutet (PHP hat keinen speziellen boolean-Datentyp). Der Wahrheitswert eines Ausdrucks in in PHP wird ähnlich bestimmt wie in Perl. Jeder numerische Wert, der nicht NULL ist, bedeutet WAHR, NULL bedeutet FALSCH. Es ist zu beachten, dass negative Werte nicht NULL sind und deshalb als WAHR aufgefasst werden! Eine leere Zeichenkette und die Zeichenkette "0" sind FALSCH; alle anderen Zeichenketten sind WAHR. Nicht-skalare Datentypen (Arrays und Objekte) werden als FALSCH betrachtet, wenn sie keine Elemente enthalten, anderfalls geben sie WAHR zurück."
                (zu finden hier: http://www.php.net/manual/de/language.expressions.php)

                Gruß

                Matthias

                --
                ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
                http://www.makaio.de/quotations
                1. Ich hätte es dir jetzt spontan auch nicht geglaubt, hab's dann aber mal fix ausprobiert...

                  Das ist gut so. Sonst hätte ich als nächstes mit dem Assembler-Listing eines Testprogramms in C aufwarten müssen, und MudGuard wäre vor lauter ASCII-Art heute abend zu nichts anderem mehr gekommen. ;-)

                  1. Hi,

                    Das ist gut so. Sonst hätte ich als nächstes mit dem Assembler-Listing eines Testprogramms in C aufwarten müssen, und MudGuard wäre vor lauter ASCII-Art heute abend zu nichts anderem mehr gekommen. ;-)

                    Die ASCII-Art kostete mich folgenden Aufwand:

                    banner NEIN!!!

                    und noch ein kleines bißchen Copy/Paste

                    cu,
                    Andreas

                    --
                    Warum MudGuard?
                    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            2. Hi,

              Der Wert einer Zuweisung ist NICHT, ob die Zuweisung geklappt hat oder nicht.
              Der Wert einer Zuweisung ist der zugewiesene Wert.

              Der Wert der _Zuweisung_, ja. Aber es gibt in diesem Fall ja nicht nur eine Zuweisung, sondern auch eine Kontroll-Struktur, die

              einen Ausdruck auswertet. Eine Zuweisung IST ein Ausdruck.

              Die if-Kontrolle prüft, ob diese Zuweisung erfolgreich war.

              N   N  EEEEE  I  N   N  !!  !!  !!
              NN  N  E      I  NN  N  !!  !!  !!
              N N N  EEEE   I  N N N  !!  !!  !!
              N  NN  E      I  N  NN
              N   N  EEEEE  I  N   N  !!  !!  !!

              Ich schreib das jetzt ganz langsam, weil wenn ich es so schnell schreibe wie vorhin, verstehst Du es ja offensichtlich nicht.

              Es wird der gegebene Ausdruck ausgewertet.

              Auch eine Zuweisung ist ein Ausdruck.

              Der Wert des Ausdrucks ist bei einer Zuweisung der zugewiesene Wert.

              Bei der Auswertung des Ausdrucks werden bestimmte Werte als wahr und bestimmte Werte als falsch betrachtet.
              0 und false werden als falsch betrachtet. Andere Zahlen und true werden als wahr betrachtet.
              Bei Strings bin ich mir nicht sicher, aber vermute mal, daß der Leerstring als falsch betrachtet wird, andere Strings dagegen als wahr.
              usw.

              Bei
              if ($x < 5)
              wird auch nicht ausgewertet, ob der Vergleich erfolgreich stattgefunden hat, sondern ob dieser Ausdruck $x < 5 einen Wert hat, der als wahr oder als falsch interpretiert wird.

              cu,
              Andreas

              --
              Warum MudGuard?
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. Hallo!

                Es gilt die gleiche Antowrt wie für Halandriel, hab dich erst hinterher gelesen. Danke für die Mühe mit dem NEIN!

                Gruß

                Matthias

                --
                ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
                http://www.makaio.de/quotations
  2. Tach.

    Das sieht alles so aus, als hättest du nicht wirklich eine Ahnung, was du da eigentlich tust...

    »» <input type="radio" name="water" value="water">

    Wenn du dieses Radiofeld in PHP abrufen möchtest, kannst du das über $_POST['water'] erreichen. Falls dieses Feld aktiviert wurde, hat die Variable den Wert "water". Aber mit

    $water= $watergallery;

    ordnest du $water den Wert einer unbekannten Variablen $watergallery zu. Kein Wunder, daß nichts vernünftiges dabei herauskommt.

    if($snowgallery = 1)

    Das testet nicht, ob $snowgallery gleich 1 ist, sondern weist dieser Variablen den Wert 1 zu und evaluiert dann diesen Ausdruck, der natürlich immer wahr ist.

  3. Hallo,

    Du solltest dir mal den Unterschied zwischen Zuweisungs- und
    Vergleichsoperatoren klarmachen.

    http://www.php.net/manual/de/language.operators.assignment.php
    http://www.php.net/manual/de/language.operators.comparison.php

    Dein ganzes Script ergibt aber sowieso nicht viel Sinn. Wo soll denn
    z.B. deiner Meinung nach die Variable $snowgallery herkommen?

    Gruß, Jan

  4. Hi,

    <form method="POST" action="/neu/upload/gallery_auswahl.php">
        <input type="radio" name="water" value="water">
        Water
        <input type="radio" name="snow" value="snow">
        Snow
        <input type="radio" name="air" value="air">
        Air

    Zusätzlich zum bereits gesagten:
    Du hast hier 3 Radiobutton-Gruppen, nicht eine. Man kann also alle 3 gleichzeitig auswählen. Wenn von den 3 Buttons nur einer gleichzeitig ausgewählt sein darf, solltest Du eine Radiobutton-Gruppe daraus machen (also identische name-Attributwerte verwenden).

    Außerdem solltest Du für die Texte zu den Radiobuttons das label-Element nutzen (dann kann man auch durch Klicken auf den Text den jeweiligen Radiobutton auswählen)

    cu,
    Andreas

    --
    Warum MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.