Tobi: Variable erhöhen

Hallo!

ich will eine Variable mit jedem abschicken erhöhen...
anfangs ist keine Variable gesetzt.
Diese soll dann auf 1 gesetzt werden.
Ist die Variable bis auf 5 erhöht worden, soll sie wieder auf 1 gesetzt werden.

Irgendwie geht es nicht.... (HILFE!)

Tobi

---

Mein Quelltext:

<html>
<head>
<?php
 if ($variable > 5 | $variable = "") {
  $variable = "1";
 }
 else {
  $variable++;
 }
?>
 <title>Test</title>
</head>
<body>
<form action="<?php PHP_SELF ?>" method="post" enctype="multipart/form-data">
 <input name="eingabefeld" size="2" value="
 <?php
  echo $variable;
 ?>
 ">
 <hr>
 <input type="submit" value="abschicken">
 <hr>
 <?php
  $dieverschicktevariable = $_POST["eingabefeld"];
  echo $dieverschicktevariable;
 ?>
</form>
</body>
</html>

  1. Hallo!

    if ($variable > 5 | $variable = "") {

    Du weißt was Du hier machst?

    http://de3.php.net/manual/de/language.operators.bitwise.php

    Was Du vermutlich willst ist folgendes:
    http://de3.php.net/manual/de/language.operators.logical.php

    Und überhaupt - woher kommt denn die Variable "$variable" auf einmal? Woher nimmt die ggfs. ihre Daten?

    Grüße
    Andreas

  2. Hoi

    Du machst ein Durcheinander mit Text und Zahl:

    if ($variable > 5 | empty($variable)) {
    $variable = 0;
    }
    else {
    $variable++;
    }
    ?>

    Nicht getestet, aber in diese Richtung sollte es gehen...
    HTH
    kaepten

    1. Hoi

      Du machst ein Durcheinander mit Text und Zahl:

      if ($variable > 5 | empty($variable)) {
      $variable = 0;
      }
      else {
      $variable++;
      }
      ?>

      Und Du baust unsauberen Code..
      Zuerst Variable initialisieren!
      also isset $_POST['blabalblub'];
      dann Werte überprüfen oder zuweisen und dann erst in die Verarbeitung gehen.

      TomIRL

      1. Hoi Tom

        Und Du baust unsauberen Code..

        ja ja alles der Reihe nach *lach* wollte nur mal das if klären.

        Und: PHP und "sauberer" Code. Geht das? Eine Sprache die nicht mal typisiert ist, die ist in meinen Augen schon sehr unsauber. Da braucht man gar nicht mehr viel dazu beitragen... *gggg* (Ok doch, die unsauberheiten der untypisierung mit x-Zeilen auszubügeln)

        kaepten

        1. Hallo!

          Und: PHP und "sauberer" Code. Geht das?

          ja.

          Eine Sprache die nicht mal typisiert ist, die ist in meinen Augen schon sehr unsauber.

          Es steht Dir frei Typen zu verwenden und zu erzwingen.

          Da braucht man gar nicht mehr viel dazu beitragen... *gggg* (Ok doch, die unsauberheiten der untypisierung mit x-Zeilen auszubügeln)

          Wenn man weiß wie PHP mit den Typen umgeht sehe ich die automatische Konvertierung nicht wirklich als Nachteil - eher im Gegenteil! Nenn doch mal ein Beispiel was Du als unsauber empfindest.
          In PHP5 gibt es sogar "Class Type Hints", was will man mehr... ;-)

          http://de3.php.net/zend-engine-2.php

          Grüße
          Andreas

          1. hoi

            Mag ja alles sein.

            Aber ich verwette mein letztes Hemd, dass selbst im brandneuen PHP5 Konstrukte wie folgt funktionieren:

            $flag = "test";
            if ($flag) {
             echo "$flag ist eigentlich nicht true, aber für php eben doch";
            }

            $flag = 3;
            if ($flag) {
             echo "$flag ist eigentlich nicht true, aber für php eben doch";
            }

            EINZIG RICHTIG:

            $flag = true;
            if ($flag) {
             echo "$flag ist true";
            }

            So. Das heisst für mich unsauber!
            kaepten

            überhaupt: ich bin nicht "gegen" PHP, ich liiiebe PHP, das lässt so schön unsaubere und schnelle programmierung zu... *lach*

            1. Hallo!

              Aber ich verwette mein letztes Hemd, dass selbst im brandneuen PHP5 Konstrukte wie folgt funktionieren:

              Jo, die Wette solltest Du gewinnen, aber Du wirst vermutlich niemanden finden der darum mit Dir wetten wollte, ist ja so als würde ich mit Dir wetten wollen dass ich Andreas heiße oder dass heute Donnerstag ist...

              $flag = "test";
              if ($flag) {
              echo "$flag ist eigentlich nicht true, aber für php eben doch";
              }

              $flag = 3;
              if ($flag) {
              echo "$flag ist eigentlich nicht true, aber für php eben doch";
              }

              EINZIG RICHTIG:

              Wer oder was sagt das? Nur weil es in einer anderen Programmiersprache nur so "EINZIG RICHTIG" ist, muss das noch lange nicht bei PHP so sein. Bei PHP ist alles was Du oben genannt hast korrekt und gewollt. Wenn einem das nicht gefällt kann man gerne eine andere Sprache verwenden, die einem besser gefällt. So einfach ist das ;-)

              $flag = true;
              if ($flag) {
              echo "$flag ist true";
              }

              So. Das heisst für mich unsauber!

              ;-)

              Ok, zum mitschreiben ;-):
              http://de3.php.net/manual/de/control-structures.php#control-structures.if

              "    if (ausdr)
                       Anweisung

              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. Mehr Informationen drüber welche Werte als FALSE ausgewertet werden finden Sie im Abschnitt 'Umwandlung nach boolean'. "

              Ok, gucken wir auch da:
              http://de3.php.net/manual/de/language.types.boolean.php#language.types.boolean.casting

              "Bei der Umwandlung nach boolean werden folgende Werte als FALSE angesehen:

              * das boolean FALSE selbst
                  * die Integer 0 (Null)
                  * die Fließkomma-Zahl 0.0 (Null)
                  * ein Array ohne Elemente
                  * ein Objekt ohne Mitgliedsvariablen
                  * der spezielle Typ NULL (einschließlich nicht definierter Variablen)

              Jeder andere Wert wird als TRUE angesehen (einschließlich jeder Resource)."

              Das sind die Regeln die man kennen muss. Und wenn man die kennt ist das ganze wirklich sehr einfach. Wenn man eben typensicher testen muss verwendet man if ($val === mixed), z.B.

              if ($val === TRUE)

              dann erreichst Du das was Du erwartest. Nur ist das oft nicht notwendig. Es ist halt so gewollt, und die meisten Leute können damit gut leben :)

              Ich will ja auch nicht sagen dass es nur Vorteile hat :)
              Das ist halt eine Gewöhnungssache. Bei kleinen Formmailern ist das ganze Thema recht unwichtige, bei größeren Applikationen muss man halt wissen was man tut, genauso wie bei jeder anderen Sprache auch.

              Auch noch lesenswert:
              http://de3.php.net/manual/en/language.expressions.php

              überhaupt: ich bin nicht "gegen" PHP, ich liiiebe PHP, das lässt so schön unsaubere und schnelle programmierung zu... *lach*

              Naja, für mich findet "unsaubere Programmierung" auf einem anderen Level statt, halt so Sachen wie unsaubere Verwendung von OOP oder globalen Variablen...

              Streich "unsaubere" und ich unterschreib den Satz ;-)

              Grüße
              Andreas

      2. Hallo!

        Vielen Dank für die Hilfe!

        Hier meine "verbesserte" Version, die leider noch immer nicht funktioniert... :-(
        Die Variable bekommt den Wert 1 und dieser ändert sich nie... (?)

        ---

        <html>
        <head>
        <?php
         if (isset ($variable)) {
          if ($variable > 5 || empty($variable)) {
           $variable = 1;
          }
          else {
           $variable++;
          }
         }
         else {
          $variable = 1;
         }
        ?>
         <title>Test</title>
        </head>
        <body>
        <form action="eingabe.php?variable=<?php echo $variable; ?>" method="post" enctype="multipart/form-data">
         <input name="variable" size="2" value="<?php echo $variable; ?>">
         <hr>
         <input type="submit" value="abschicken">
         <hr>
         Die gesendete Variable hat den Wert:
         <?php
          $variable = $_POST["variable"];
          echo $variable;
         ?>
        </form>
        </body>
        </html>

        1. Hoi

          Wie ich sehe kämpfst Du noch mit unterschiedlichen Dingen, hier sende ich Dir einen funktionierenden Code auf Basis Deines Posting:

          <html>
          <head>
          <?php
           // Erste Initialisierung z.B. beim 1. Aufruf
           if (isset ($_POST["variable"])) {
            $variable = $_POST["variable"];
           } else {
            $variable = 0;
           }

          // Inkrementierung und Rücksetzung
           if ($variable >= 5 || $variable == 0) {
            $variable = 1;
             } else {
            $variable++;
            }

          ?>
           <title>Inkrementierer</title>
          </head>
          <body>
          <form action="test.php" method="post" enctype="multipart/form-data">
           <input name="variable" size="2" value="<?php echo $variable; ?>">
           <hr>
           <input type="submit" value="abschicken">
           <hr>
           Die gesendete Variable hat den Wert:
           <?php
           if (isset ($_POST["variable"])) {
           echo $_POST["variable"];
          } else {
           echo "Dies ist der Erstaufruf!";
          }
           ?>
          </form>
          </body>
          </html>

          So gehts, ich hoffe das gibt Dir eine Idee wo Deine Fehler lagen und wie das Ganze funktioniert.

          HTH
          kaepten

          1. Vielen Dank!

    2. Jetzt wo ich noch Andreas's posting sehe, merke ich dass mein Schnipsel wohl nicht wirklich weiterhilft.

      Das Form ruft sich ja selbst wieder auf. Du solltest zumindest die $variable auch weiterreichen! Denn sonst bist Du immer bei 0.

      <input type="hidden" name="variable" value="<?= $variable ?>">

      könnte weiterhelfen.
      HTH
      kaepten

      PS: Möglicherweise brauchst Du dann aber noch vor dem if die Zeile

      $variable = $_POST['variable'];