Schorsch: if($var)... Wie wird der INHALT von $var überprüft?

Guten Tag

<?php
$var = "$i == 1 OR $i == 2 OR $i == 3";
$i = 1;
if($var){echo"drin"; }
?>

Nun soll die if-Abfrage nicht schauen, ob die Variable $var gesetzt ist oder nicht, sondern die if-Abfrage soll so aussehen:

if($i == 1 OR $i == 2 OR $i == 3)

Wie bringe ich das zustande? Ist sowas überhaupt möglich? if(eval($var)) wird auch nicht geschluckt.
Danke bereits im Voraus für Hinweise, Tipps, Gedankenanstösse und dergleichen.

Schorsch

  1. Moin Schorsch,

    $var = "$i == 1 OR $i == 2 OR $i == 3";

    Das ergibt für mich überhaupt keinen Sinn. Was soll das denn sein? Was willst du damit erreichen?

    Liebe Grüße, Uschi

    1. Tach Uschi

      $var = "$i == 1 OR $i == 2 OR $i == 3";
      Das ergibt für mich überhaupt keinen Sinn. Was soll das denn sein? Was willst du damit erreichen?

      Ich muss eine Bedingung stellen. Leider ist die Bedingung immer etwas verschieden. Manchmal nur eine, manchmal ganz viele.

      Irgendwo entstehen die Bedingungen: Beispiel:
      $var = "$i == 1 OR $i == 2 OR $i == 3";
      Jetzt habe ich meine Bedingungne in die $var gepackt.

      Irgendwo weiter weg muss ich nun die Bedingungen überprüfen
      if($i == 1 OR $i == 2 OR $i == 3) Allerdings wünsche ich die Überprüfung mit Hilfe der $var zu machen:

      If($var)

      Was leider nicht klappt.

      Die Frage ist also, wie überprüfe ich Bedingungen, die nicht dort definiert wurden, wo sie überprüft werden müssen. Ich könnte zwar die Überprüfung in eine Funktion packen und die $var der Funktion übergeben... Aber was mich heute interessiert ist das:

      If($var)

      Wie bringe ich sowas zum laufen?

      Gruss
      Schorsch

      1. hi,

        $var = "$i == 1 OR $i == 2 OR $i == 3";
        Jetzt habe ich meine Bedingungne in die $var gepackt.

        nein, du hast $var einen text/string zugewiesen.

        eine bedingung ist es nur für _dich_, der du diesen text liest.

        gruss,
        wahsaga

        1. Salü

          $var = "$i == 1 OR $i == 2 OR $i == 3";
          Jetzt habe ich meine Bedingungne in die $var gepackt.

          =======

          nein, du hast $var einen text/string zugewiesen.
          eine bedingung ist es nur für _dich_, der du diesen text liest.

          =======

          Ja, das ist meine Bedingung.
          Und meine Frage:
          Wie wird meine Bedingung auch zur Bedingung des Skriptes (oder wie man dem auch immer sagen darf)

          Wie versteht das if($var) - Dings meine Bedingung? Wie bringe ich es dazu?

          Schorsch

          1. Hello,

            ist eigentlich nicht schwer zu verstehen, was Du willst. Du willst die Stringauswertung erst zur Laufzeit des Programms (Scripts) durchführen.

            Da warst Du mit eval() schon gar nicht so falsch. Eval ist eigentlich auch keine Funktion, sondern eine Compiler- (bzw. hier besser Parser)-Anweisung. Der im Argument übergebene Code wird bei Aufruf so in das Script übernmommen, als stüde er genau an der Stelle des Aufrufes. Das sit wichtig zu wissen, denn dadurch kann man sich sowohl Variablen kaputtschreiben als auch Redefine-Fehler (für Funktionen) auslösen.

            Das mit den Funktionen kann man leider (noch) nicht verhindern, aber die Variablen des Scriptes kann man schützen, indem man eval() nochmals in einer Hüllfunktion kapselt. Dieser übergibt man dann nur DIE Adressen von Variablen oder Werte von Variablen, mit denen tatsächlich gearbeitet werden soll.

            Nun stell Dir bitte vor, du hättest da Dein Script:

            ...
            $a = 27;
            $i = "denkste Paul<br>";
            ...
            $var = "($i == 1) OR ($i == 2) OR ($i == 3);"
            eval($var);
            if ($fragezeichen)
            {
              echo "blah";
            }
            ...

            Nun nächster Denkschritt. Wir führen das eval in Gedanken durch:

            ...
            $a = 27;
            $i = "denkste Paul<br>";
            ...
            $var = "($i == 1) OR ($i == 2) OR ($i == 3);"

            ($i == 1) OR ($i == 2) OR ($i == 3);

            if ($fragezeichen)
            {
              echo "blah";
            }
            ...

            Siehst Du nun, wo es kneift?
            Die Ergenisse der Vergleiche versichern einfach.

            Also nochmal:

            ...
            $a = 27;
            $i = "denkste Paul<br>";
            ...
            $var = "($i == 1) OR ($i == 2) OR ($i == 3);"
            eval("$fragezeichen = (".$var.");");
            if ($fragezeichen)
            {
              echo "blah";
            }
            ...

            Nun packen wir das mal aus:

            ...
            $a = 27;
            $i = "denkste Paul<br>";
            ...
            $var = "($i == 1) OR ($i == 2) OR ($i == 3);"
            $fragezeichen = (($i == 1) OR ($i == 2) OR ($i == 3));;

            besser zwei Semikolen zum Zeilenabschluss als gar keins!

            if ($fragezeichen)
            {
              echo "blah";
            }
            ...

            Wie Du siehst, ist nun ein vollständiger Verglich entstanden, der ausgewertet werden kann.

            Ist es das, was Du wolltest?

            Grüße

            Tom

            1. Salü Tom

              Vielen Dank für deine Antworten, leider gelang es mir bis zum heutigen Tag nicht, mein Problem zu lösen. Auch deine Lösungsvorschläge brachten mich nicht weiter, da entweder der Fehler:
              "Parse error: parse error in c:\www\_snowsaw\admin\b.php(40) : eval()'d code on line 1"
              oder aber es wurde bei "if($variable)" einfach überprüft, ob $variable gesetzt wurde anstelle von deren Inhalt zu überprüfen.

              Hat bei dir eines deiner Beispiele funktioniert?

              MfG
              Schorsch

              1. Hello,

                ist möglich, dass da noch Backslashes vor die $ müssen...

                Musst Du noch mal das manual quälen.

                Grüße

                Tom

  2. if($i == 1 OR $i == 2 OR $i == 3)

    Das war doch eigentlich schon richtig, nur würde es eher so aussehen:

    if (($i == 1) OR ($i == 2) OR ($i == 3)) {

    echo "blubb";  ..oder was auch immer
    }

    1. if($i == 1 OR $i == 2 OR $i == 3)
      Das war doch eigentlich schon richtig, nur würde es eher so aussehen:if (($i == 1) OR ($i == 2) OR ($i == 3))

      Salut
      Jein...
      Ich möchte ($i == 1) OR ($i == 2) OR ($i == 3) in eine Variable packen und dann

      if(Variable)

      durchführen, was leider nicht klappt.
      Ist sowas gar nicht möglich?

      Schorsch