Bernd: if Abfrage

Hallo,

ich möchte verschiedene Mail Adresse ausschließen

if ($email != "xxxx" OR $email != "xxxx") {
// Hier mein Mail Script
}

Gibt es dazu noch eine andere Schreibweise dass ich z.B. im Admin Bereich eine kommagetrennte Liste Anlegen kann, also so

test@example.com, test1@example.com, test2@example.com

So muss ich derzeit ständig das Script anpassen.

  1. Hallo Bernd,

    Gibt es dazu noch eine andere Schreibweise dass ich z.B. im Admin Bereich eine kommagetrennte Liste Anlegen kann, also so

    test@example.com, test1@example.com, test2@example.com

    Schau dir mal in_array() an.

    Bis demnächst
    Matthias

    --
    Pantoffeltierchen haben keine Hobbys.
    ¯\_(ツ)_/¯
  2. Tach!

    Gibt es dazu noch eine andere Schreibweise dass ich z.B. im Admin Bereich eine kommagetrennte Liste Anlegen kann, also so

    test@example.com, test1@example.com, test2@example.com

    Ja, lies diese Liste in ein Array ein und mach einen Vergleich gegen dieses Array. Selbst wenn man diese Liste nicht extern pflegt, ist ein händisch angelegtes Array im Code immer noch besser als einzeln notierte Vergleiche.

    dedlfix.

    1. Hallo,

      meinst du so?

      $keineMailVersand = array('test@example.com', 'test1@example.com');
      
      if ($email != (in_array($email, $keineMailVersand))) {
        // Hier mein Mail Script
      }
      
      1. Hallo Bernd,

        meinst du so?

        $keineMailVersand = array('test@example.com', 'test1@example.com');
        
        if ($email != (in_array($email, $keineMailVersand))) {
          // Hier mein Mail Script
        }
        

        falsch geraten.

        Gruß
        Jürgen

        1. Dann muss ich es aber so machen

          $email = "test4@example.com";
          
          $keineMailVersand = array('test@example.com', 'test1@example.com');
          
          if (!in_array($email, $keineMailVersand)) {
            echo "eMail wurde verschickt";
          }
          

          Warum hat dann meine erste Version auch funktioniert?

          1. Hallo Bernd,

            Warum hat dann meine erste Version auch funktioniert?

            wohl weil der Vergleich zwischen einem String und einem logischen Wert in diesem Fall das gewünschte Ergebnis geliefert hat.

            Gruß
            Jürgen

  3. @@Bernd

    Gibt es dazu noch eine andere Schreibweise dass ich z.B. im Admin Bereich eine kommagetrennte Liste Anlegen kann

    Möglicherweise gibt es ja eine Array-Funktion, die prüft, ob ein Wert in einem Array existiert.

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  4. hi Bernd.

    So muss ich derzeit ständig das Script anpassen.

    Das ist Schlecht. Besser also, diese Liste als Konfiguration auszulagern. MFG

    1. Hallo,

      Das ist Schlecht. Besser also, diese Liste als Konfiguration auszulagern

      ich wollte die Werte in die Datenbank packen und überein <input> Feld pflegen.

      $keineMailVersand = array('test@example.com', 'test1@example.com');
      

      daraus würde dann

      $keineMailVersand = array($Wert_aus_Datenbank);
      

      Nervig ist nur etwas, dass ich die Werte im <input> Feld so schreiben muss

      'test@example.com', 'test1@example.com'

      die '' sind etwas nervig und können schnell vergessen werden. Aber zumindest besser als ständig das Script zu öffnen und anzupassen.

      1. Hallo Bernd,

        Nervig ist nur etwas, dass ich die Werte im <input> Feld so schreiben muss

        'test@example.com', 'test1@example.com'

        Warum meinst du, das tun zu müssen?

        Bis demnächst
        Matthias

        --
        Pantoffeltierchen haben keine Hobbys.
        ¯\_(ツ)_/¯
        1. Hallo,

          Warum meinst du, das tun zu müssen?

          oh, funktioniert auch ohne den ''

          $Wert_aus_Datenbank = "test@example.com, test1@example.com";
          $email = "test4@example.com";
          
          $keineMailVersand = array($Wert_aus_Datenbank);
          
          if (!in_array($email, $keineMailVersand)) {
            echo "eMail wurde verschickt";
          }
          

          Ich hatte es erst so versucht

          $email = "test4@example.com";
          
          $keineMailVersand = array(test@example.com, test1@example.com);
          
          if (!in_array($email, $keineMailVersand)) {
            echo "eMail wurde verschickt";
          }
          

          Und da habe ich einen Fehler bekommen

          Parse error: syntax error, unexpected '@', expecting ')' in

          Deshalb bin ich davon ausgegangen es funktioniert nicht.

      2. Hallo,

        Das ist Schlecht. Besser also, diese Liste als Konfiguration auszulagern

        ich wollte die Werte in die Datenbank packen und überein <input> Feld pflegen.

        Idee: <textarea> und die einzelnen Einträge untereinander. Also wie in einer Datei. Aber der Speicherort ist letztendlich egal. Was die Verarbeitung betrifft: Ich würde die legacy Adressen in einem Array halten und diejenigen die davon auszunehmen sind vor der Verarbeitung aus diesem Array löschen. Dazu sollte es auch eine Arrayfunktion geben die das kann.

        MFG

  5. Hallo,

    mal abseits von deiner eigentlichen Frage, die ja schon beantwortet wurde, ist die logische Verknüpfung falsch. Wenn in $email die erste Adresse wäre, dann wäre es ungleich der zweiten und andersrum. Der Ausdruck wäre also immer wahr. Man müsste die einzelnen Vergleiche mit AND verknüpfen.

    Count

    1. Hallo,

      das verstehe ich jetzt nicht wirklich. Ich verwechsle ja oft OR und AND aber unter https://www.php.net/manual/de/language.operators.logical.php steht bei OR = Oder, also genau was ich benötige? Wenn in $email != "test@example.com" ODER != test1@example.com steht soll nichts passieren. Oder habe ich schon wieder ein Denkfehler?

      1. Hallo,

        habe ich schon wieder einen Denkfehler?

        Ja.

        Gruß
        Kalk

      2. Hallo Bernd,

        und wieder einmal bestelle ich herzliche Grüße von Herrn De Morgan. Wird ein NOT "ausmultipliziert", tauschen AND und OR die Rollen.

        !($a == $v1 || $a == $v2) ist gleichbedeutend zu ($a != $v1 && $a != $v2)

        Ich weiß nicht, wie oft ich das schon erklärt habe 😏. Auch Dir.

        Du hast eine Art "WEDER dies NOCH jenes" Abfrage. Ein "WEDER-NOCH" ist aber kein ODER. Es ist ein UND.

        Du hast zwei Kinder. Beide mögen Gemüse aller Art, nur... eins mag keine Möhren, das andere keine Erbsen.

        Die Regel für ein gelungenes Mittagessen ist: Beide Kids sind zufrieden. Es darf also weder Möhren noch Erbsen geben - oder: "keine Möhren UND keine Erbsen", sonst meckert eins und schmeißt den Teller gegen die Wand. "Beide zufrieden" ==> "UND"

        Ein "ODER" meldet bereits Erfolg, wenn nur eins der Kids zufrieden ist. Broccoli, Spinat, Blumenkohl oder Kohlrabi - sowieso ok, beide mampfen. Möhren? Buh, das eine schreit, das andere mampft, das ODER sieht nur dass was gegessen wurde und ist zufrieden. Erbsen? Wahhh, das eine mampft, das andere schreit, und das ODER wird wieder sein Gemüse los und ist happy. Die grünen oder roten Flecke an der Tapete sind ihm egal. Auf die achtet nur das UND.

        Nun kommt noch ein Freund zum Essen. Der mag keinen Spinat. Also: auf den Tisch kommen keine Möhren UND keine Erbsen UND kein Spinat. Und alle sind happy. Herr De Morgan auch.

        Rolf

        --
        sumpsi - posui - clusi
  6. ich möchte verschiedene Mail Adresse ausschließen

    Diese Frage ist technisch offenbar beantwortet. Sie hat aber auch andere Aspekte - die vielleicht nicht Dich, sondern andere Leser interessieren - und womöglich die gesuchte technische Lösung von vorn herein als "nicht genügend" erscheinen lässt. (Dann lese man nur unten unter 1. "Theoretische Abhilfe")

    Ich gehe, weil ich es nicht weiß, davon aus, es handelt sich um Werbung. (Könnte ja auch sein, Du willst z.B. Bestellungen nicht mehr annehmen, weil der Kunde fast alles zurückschickt oder weil "seine Schecks geplatzt" sind.) - (Auch dann lese nur unten unter 1. "Theoretische Abhilfe")

    Generell ist dann der Mailversand im Hinblick auf die DSGVO (die Adressen müssen ja gespeichert sein) und vor allem die Rechtsprechung bezüglich des "Eingriffs in den eingerichteten Geschäftsbetrieb" bzw. im Hinblick auf Belästigung "juristisch heikel".

    Das beginnt mit der Ausschlussliste, die ich hier mal beispielhaft hernehme.

    1.) Es dürfte in vielen Fällen nicht legal sein, dort klare Mailadressen zu speichern. (Diese Diskussion hatte ich erfolgreich schon anno 2007 mit Österreichern, die damals eine "halbamtliche" Widerspruchsliste bezüglich unverlangter kommerzieller eMails führte. Die Liste an sich war nach damaligem Ösi-Recht legal, die Speicherung und Weitergabe der Adressen im Klartext jedoch nicht.

    Theoretische Abhilfe: Speicher diese Ausschlussadressen als Hashes. MD5 könnte juristisch genügen, eben so die Password-Funktionen von PHP oder, wohl "besser weil technisch einfacher": MySQL aber auch salzfreies SHA-*. Denn dann speicherst Du keine "persönlichen Daten" sondern eine "unumkehrbare Repräsentierung".

    2.) Wenn nach deutschem Recht eine Unterlassungsverfügung bezüglich des Mailversandes zugunsten eines Klägers "Andreas Müller" erging, dann ist diese nicht an die konkrete Mailadresse gebunden. Das bedeutet, wenn die Verfügung wegen eines Mails an "andreasmueller@example.com" erging und die Domain example.com ebendiesem Andreas Müller gehört, dann darfst Du nichts mehr an "*@example.com" senden. Tut man es doch ist die Ordnungsstrafe - in Wiederholungsfällen bis hin zur Ordnungshaft fällig.

    2.a) Es kann aber auch sein, dass "Andreas Müller" zusätzliche Mailadressen bei verschiedenen hat, z.B. "andreasmueller@0815.example.com" "andreas.mueller@0815.example.com" oder "andreas-mueller@1508-example.com" (z.B. bei GMX, Telekom, Google, hotmail). Schickt man nach einem Verbot Mails an eine dieser Adressen, dann ist die Ordnungsstrafe - in Wiederholungsfällen bis hin zur Ordnungshaft fällig - eben weil das Verbot sich nicht auch eine bestimmte Mailadresse sondern stets auf die (natürliche oder juristische) Person erstreckt.

    2.b) Bei einem äußerst außergewöhnlich gut gelaunter Richter könnte man Glück haben, wenn man nachweist, dass man eine Blacklist führt, die den Versand an

    • jeden Hostpart der dem "Andreas Müller" gehörenden Domain[s],
    • jedem Userpart, der auf "Andreas Müller" schließen lässt,
    • beim Userpart, auch solche mit unterschiedlichem und/oder keinem Trennzeichen, Wortumkehr und/oder folgender Zahl ("andreasmueller0815@…")

    ausschließt.

    Ein Vortrag zur technischen Schwierigkeit der Umsetzung bzw. zu zahlreichen "false positive" und also der Verhinderung des Versandes an zahlreiche Dritte wird einen Richter zu Recht nicht interessieren. Auch könnte "Andreas Müller" sich plötzlich im Userpart einer Mailadresse "andimueller" nennen: Es sind, spätestens im Ordnungsmittelverfahren nur zwei Fragen relevant:

    1. Hat "Andreas Müller" als natürliche und/oder juristische Person verbotswidrig ein Mail bekommen und
    2. hat der Versender alles ihm zumutbare unternommen um das zu verhindern?

    Und genau da folgt, dass ein nicht äußerst außergewöhnlich gut gelaunter Richter schon aus seinen früheren Verfahren (da hat er die Urteile des BGH nachgeschlagen) weiß, dass für den Versand kommerzieller Nachrichten STETS ein Double-Opt-In erforderlich ist. Und genau dieses Double-Opt-In-Verfahren macht eine Blacklist komplett obsolet und einen Vortrag über Anstrengungen zur Implementierung einer Blacklist wird er eine "Geschichte vom Pferd" nennen und klar urteilen, dass das Double-Opt-In-Verfahren die sicherste und, weil ohnehin vorgeschrieben auch zumutbare Methode ist, mit der ein Versand weiterer Mails an den Unterlassungsgläubiger (für die Laien: Antragsteller, Kläger) unterbunden werden kann. Das wisse sogar ein gewisser blutiger Rechtslaie aus Kassel. Ein Verstoß liegt also vor und er kann Geldstrafen von bis zu 250.000 €, im Fall der Nichtzahlung oder direkt bis zu 6 Monate - insgesamt bis zu 2 Jahren - Ordnungshaft verhängen.

    1. Hallo,

      danke für deine Aufklärung. Bei mir geht es nicht um Werbung sondern um Bestellungen die ab und an an jemand anderen weitergeleitet werden müssen z.B. an einen Anwalt aus rechtlichen Gründen. Jetzt gibt es aber Besteller, die gleich Anwalt sind, die benötigen natürlich die letzten Mail nicht, daher sollen diese ausgeschlossen werden.

      1. Hallo Bernd,

        d.h. du hast irgendwo in der SQL DB eine Tabelle mit diesen "bekannten Anwälten"? Dann sollte die Prüfung gegen diese Tabelle erfolgen.

        Du hat die Tabelle nicht? Warum? 😉

        Rolf

        --
        sumpsi - posui - clusi