Dakar: Variable auf einen festen Wert prüfen

Hallo Forum,

ich brauche einen rat von euch bei diesem Code!

if (isset($uhr) && !empty($uhr) && $uhr === '9-12 Uhr')
    {
     echo "uhr wurde gesetzt";
      }
      else
         {
          echo "uhr wurde nicht gesetzt";
          }

Jetzt möchte ich die echo Ausgabe aber genau umgekehrt haben,

{
     echo "uhr wurde nicht gesetzt";
      }
      else
         {
          echo "uhr wurde gesetzt";
          }

aber irgendwie bin ich total daneben und bekomme es seit einer Stunde probieren nicht hin? Könnt Ihr mir auf die Sprünge helfen?

Danke für die antwort!

Gruß,

Dakar

  1. ich weiß zwar nicht genau worauf Du hinaus willst, weil Deine Problembeschreibung etwas mager ist, aber versuch doch einfach mal eine negation in der IF-Klausel, á la:
      if (!isset($uhr) && empty($uhr) && $uhr != '9-12 Uhr')

    Gruß, Markus**

    1. Hi Markus**,

      ich weiß zwar nicht genau worauf Du hinaus willst, weil Deine Problembeschreibung etwas mager ist, aber versuch doch einfach mal eine negation in der IF-Klausel, á la:
        if (!isset($uhr) && empty($uhr) && $uhr != '9-12 Uhr')

      Das ist aber nicht die Negation („das Gegenteil”) von dem was Dakar im Ausgangsposting geschrieben hat.

      Bedingung:
        isset($uhr) && !empty($uhr) && $uhr === '9-12 Uhr'
      Negation:
        !(isset($uhr) && !empty($uhr) && $uhr === '9-12 Uhr')
      Negation, vereinfacht:
        !isset($uhr) || empty($uhr) || $uhr !== '9-12 Uhr'

      Abgesehen davon verstehe ich jetzt aber auch nicht, was Dakar eigentlich überhaupt will bzw. wo sein Problem liegt.

      Viele Grüße,
        ~ Dennis.

      1. Hallo Markus**,

        meine Problembeschreibung ist deswegen etwas mager ausgefallen weil ich dachte dass es kein großer Akt wird, trotzdem erst einmal danke für den tipp!

        Also ich möchte insgesamt vier Checkboxen im Kontaktformular prüfen ob mindestens eine davon angeklickt (Häkchen gesetzt) wurde. Denn Code den ich hier gerade veröffentlicht habe prüft nur den Wert einer Checkbox, aber ich muss ja erst einmal wissen wie sich diese Prüfung zusammensetzt bevor ich mit OR arbeite.

        Dein Beispiel:

        if (!isset($uhr) && empty($uhr) && $uhr != '9-12 Uhr')
             {
              echo "uhr wurde nicht gesetzt";
             }
             else
             {
              echo "uhr wurde gesetzt";
             }

        funktioniert zwar, aber hier bekomme ich zusätzlich die Notiz Undefinierte variable: uhr zur echo Ausgabe: Uhr wurde nicht gesetzt! Ist ja auch irgendwie logisch da isset vorher mit Ausrufezeichen belegt und auch kein Wert übergeben wurde wenn das Kästchen leer ist. Sobald das Häkchen gesetzt wird verschwindet die Notiz und echo Uhr wurde gesetzt erscheint.

        Um es abzukürzen, dein Beispiel ist sehr nah am richtigen Resultat dran aber ich weis momentan nicht wie ich es umsetzen soll, bei nicht gesetzten Wert, das keine Notiz erscheint.

        Gruß, Dakar

        1. Hallo Dennis und Markus**,

          vereinfachte Negation, genau das habe ich gesucht!

          if (!isset($uhr) || empty($uhr) || $uhr !== '9-12 Uhr')
               {
                echo "uhr wurde nicht gesetzt";
               }
               else
               {
                echo "uhr wurde gesetzt";
               }

          Manchmal sieht man den Wald vor Bäumen nicht mehr. :-)

          Vielen Dank und ein schönes Osterfest wünsche ich euch beiden!

          Gruß, Dakar

          1. Hallo Dakar!

            Manchmal sieht man den Wald vor Bäumen nicht mehr. :-)

            Vielen Dank und ein schönes Osterfest wünsche ich euch beiden!

            Gruß, Dakar

            Eben die richtige Lösung hab ich Dir nicht vorgeschlagen, sondern Dich nur in die Richtung geschickt, die ich vermutet habe in die Du willst. Selbst rausfinden ist besser als abschreiben!

            In diesem Sinne, auch Dir ein schönes Osterfest!

            Markus**

            1. Hallo Markus**,

              da hast Du vollkommen recht das abschreiben nichts bringt, so lernt man gar nichts! Ich wäre aber nie auf diese zwei || gekommen weil ich das noch nicht kannte. Ohne eure Hilfe hätte ich es wohl noch in 100 Jahren versucht das hinzubekommen.

              Also nochmals vielen Dank für eure Stellungsnahme, habe auf jedenfall wieder was dazugelernt!

              Gruß, Dakar

              1. Ich wäre aber nie auf diese zwei || gekommen ...

                Beschäftige Dich mit Operatoren: http://www.html-world.de/program/php_4.php

                Gruß, Markus**

      2. Hallo Dennis!

        Das ist aber nicht die Negation („das Gegenteil”) von dem was Dakar im Ausgangsposting geschrieben hat.

        Darum schrieb ich ja auch oben "á la:", weil es nur ein Hinweis sein sollte und kein kompletter Lösungsweg! Ich finde es besser den Leuten den Weg zu bereiten und sie die Lösung selbst finden zu lassen. Das hat einen deutlich höheren Lerneffekt, als wenn man ihnen alles vorsagt.

        Gruß, Markus**

  2. Hello,

    ich brauche einen rat von euch bei diesem Code!

    if (isset($uhr) && !empty($uhr) && $uhr === '9-12 Uhr')

    wenn !isset() zutrifft, trifft empty() auch zu.

    Jetzt möchte ich die echo Ausgabe aber genau umgekehrt haben,

    if (!isset($_POST['uhr']) or $_POST['uhr'] != '9-12 Uhr')
          {
              echo "uhr wurde nicht gesetzt";
          }
          else
          {
              echo "uhr wurde gesetzt";
          }

    Das sollte genügen.

    Es wird zuerst ausgewertet, ob uhr überhaupt übertragen wurde.
    Wenn kein Uhrwert übertragen wurde, trifft der if-Zweig zu.
    Wenn ein Wert übertragen wurde, darf und wird der or-Teil ausgewertet.
    Wenn der Text jetzt ungleich '9-12 Uhr' ist, trifft der if-Zweig zu.
    Wenn der Text jetzt aber gleich ist, trifft der else-Zweig zu.

    Ich ahne und befürchte, dass Du mit "register_globals = on" arbeitest. Google mal nach diesem Begriff oder suche hier im Archiv danach. Du solltest diese Einstellung nicht mehr benutzen. Ich habe deshalb gleich $_POST['uhr'] benutzt.

    Liebe Grüße aus dem Cyberspace

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Moin,

      »»   if (isset($uhr) && !empty($uhr) && $uhr === '9-12 Uhr')
      wenn !isset() zutrifft, trifft empty() auch zu.

      ... und wenn empty() zutrifft, kann ==='9-12 Uhr' niemals zutreffen.
      Ergo: Du hast Recht, empty() ist in dieser Prüfung redundant.

      if (!isset($_POST['uhr']) or $_POST['uhr'] != '9-12 Uhr')
            {
                echo "uhr wurde nicht gesetzt";
            }
            else
            {
                echo "uhr wurde gesetzt";
            }

      Das sollte genügen.

      Ja, aber man sollte darauf achten, dass der logische ODER-Operator unterschiedliche Prioritäten hat, je nachdem ob man ihn als || oder als or schreibt. Das ist hier unerheblich, weil der Vergleichsoperator in beiden Fällen stärker bindet. Aber es gibt Ausdrücke, in denen das einen Unterschied ausmacht.

      Ich ahne und befürchte, dass Du mit "register_globals = on" arbeitest. Google mal nach diesem Begriff oder suche hier im Archiv danach. Du solltest diese Einstellung nicht mehr benutzen. Ich habe deshalb gleich $_POST['uhr'] benutzt.

      Guter Hinweis - auch wenn das aus dem Codeschnipsel des OP nicht direkt hervorgeht.

      Fröhliche (F)eiertage,
       Martin

      --
      Schon gewusst, dass Aftershave trotz des Namens eigentlich eher fürs Gesicht gedacht ist?
      1. Hello Martin,

        auch Dir viele bunte Ostereier ;-)

        Ich ahne und befürchte, dass Du mit "register_globals = on" arbeitest. Google mal nach diesem Begriff oder suche hier im Archiv danach. Du solltest diese Einstellung nicht mehr benutzen. Ich habe deshalb gleich $_POST['uhr'] benutzt.

        Guter Hinweis - auch wenn das aus dem Codeschnipsel des OP nicht direkt hervorgeht.

        Im Prinzip geht das schon daraus hervor:

        Wenn schon jemand "isset()" benutzt, tut er dies in der Datenübernahme-Section. Später hat es keinen Sinn mehr. Und wenn nun jemand in der Datenübernahme-Section auf eine einfache Variable zugreift, dann muss die ja irgendwoher gekommen sein, also zu 99% direkt aus dem Request.

        Wenn man stattdessen diese typischen nutzlosen Konstrukte

        $uhr = $_POST['uhr'];

        benutzt, dann ist die Notice[1] ja schon bei dieser Zuweisung fällig, wenn $_POST['uhr'] nicht vorhanden ist.

        Für die übrigen Möglichkeiten, wie $uhr entstehen könnte, ohne dass im Fehlfall eine Notice fällt, sollten die 1% Restwahrscheinlichkeit im Vorkommen von "normalen" Scripten ausreichen.

        [1] und wenn die Notices ausgeschaltet sind, würde die obige nutzlose Umkopieraktion tritzdem noch ein $uhr erzeugen, auch wenn $_POST['uhr'] nicht vorhanden ist - dann natürlich mit dem Wert false.

        Das macht dann aber isset() unbrauchbar an dieser Stelle.

        Liebe Grüße aus dem Cyberspace

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. echo $begrüßung;

          $uhr = $_POST['uhr'];
          [1] und wenn die Notices ausgeschaltet sind, würde die obige nutzlose Umkopieraktion tritzdem noch ein $uhr erzeugen, auch wenn $_POST['uhr'] nicht vorhanden ist - dann natürlich mit dem Wert false.

          Nicht false sondern null.

          Das macht dann aber isset() unbrauchbar an dieser Stelle.

          Nein, denn ein null-Wert in einer Variablen wird von isset() ebenfalls als nicht vorhanden gewertet. Man kann sich vom Vorhandensein einer null enthaltenden Variable mit var_dump($GLOBALS); überzeugen (im globalen Kontext natürlich).

          echo "$verabschiedung $name";

          1. Hello,

            Das macht dann aber isset() unbrauchbar an dieser Stelle.

            Nein, denn ein null-Wert in einer Variablen wird von isset() ebenfalls als nicht vorhanden gewertet. Man kann sich vom Vorhandensein einer null enthaltenden Variable mit var_dump($GLOBALS); überzeugen (im globalen Kontext natürlich).

            *ups*
            tatsächlich?

            Siehst Du, ich dachte noch: müsstest Du eigentlich nochmal überprüfen, was bei der Zuweisung rauskommt. Aber ich sitze hier am fremden PC und da kann ich froh sein, dass ich meiner Forums-Sucht nachkommen darf. :-)

            Ich vertaue Dir da also einfach mal. Aber nur, weil Du es bist :-)

            Liebe Grüße aus dem Cyberspace

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
    2. echo $begrüßung;

      »   if (isset($uhr) && !empty($uhr) && $uhr === '9-12 Uhr')
      wenn !isset() zutrifft, trifft empty() auch zu.

      Du hast die Negierung bei isset() und empty() getauscht. War das Absicht oder ein Versehen? Wie auch immer, isset() ist nicht die Umkehrfunktion von !empty(). Bei beispielsweise $foo = '0'; ergibt isset($foo) true und empty($foo) ebenfalls.

      Man kann beim Prüfen mit empty() im Allgemeinen auf eine isset()-Prüfung verzichten, denn das Ergebnis ändert sich wie im obigen Fall nicht. isset() ergibt true bei nicht vorhandenen oder zwar vorhandenen aber null enthaltende Variablen. empty() beklagt sich nicht, wenn die zu prüfende Variable nicht vorhanden ist und ergibt true für nicht vorhandene sowie Variablen mit null und außerdem noch bei false, leerem Array, 0, '' und '0'.

      » Jetzt möchte ich die echo Ausgabe aber genau umgekehrt haben,
      »

      if (!isset($_POST['uhr']) or $_POST['uhr'] != '9-12 Uhr')
            {
                echo "uhr wurde nicht gesetzt";
            }
            else
            {
                echo "uhr wurde gesetzt";
            }

      Das sollte genügen.

      Es wird zuerst ausgewertet, ob uhr überhaupt übertragen wurde.
      Wenn kein Uhrwert übertragen wurde, trifft der if-Zweig zu.

      Ein isset($_POST['foo']) prüft nicht den Inhalt sondern das Vorhandensein. Ein leer gelassenes Eingabefeld (das nicht durch irgendwelche Manipulationen von der Übertragung ausgeschlossen wurde) erzeugt einen Leerstring im dazugehörigen $_POST-Eintrag. Es ist also egal, ob eine Uhrzeit eingetragen wurde oder nicht. Für ein Text-Eingabefeld wird !isset($_POST['uhr']) lediglich bei nicht versendetem Formular zu true evaluieren. Nicht selektierte Checkboxen und Radiobuttons werden nicht übertragen und ergeben dann bei der isset()-Prüfung true.

      Wenn ein Wert übertragen wurde, darf und wird der or-Teil ausgewertet.

      Auch '' ist ein übertragbarer Wert.

      Wenn der Text jetzt ungleich '9-12 Uhr' ist, trifft der if-Zweig zu.
      Wenn der Text jetzt aber gleich ist, trifft der else-Zweig zu.

      Diese beiden Aussagen stimmen wegen Folgefehler nicht mehr. Es sei denn, es handelt sich um Checkboxen oder Radiobuttons.

      echo "$verabschiedung $name";

      1. Hello,

        »   if (isset($uhr) && !empty($uhr) && $uhr === '9-12 Uhr')
        wenn !isset() zutrifft, trifft empty() auch zu.

        Du hast die Negierung bei isset() und empty() getauscht. War das Absicht oder ein Versehen?

        Ich habe nicht genau berücksichtigt, was Dakar in den Zeilen gecoded hat, sondern was er zwischen den Zeilen zum Ausdruck gebracht hat, was er eigentlich coden wollte.

        Ich hoffe, dass ich diesem Wunsche entsprochen habe mit meinem Codevorschlag.
        Überprüfen kann Dakar das ja anhand meiner mitgelieferten Funktionsbeschreibung.

        Liebe Grüße aus dem Cyberspace

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de