2012-04-09 4 views
0

Ich habe ein PHP-Skript, das ein Formular bearbeitet, aber ich möchte eine spezifische Bestätigungs-E-Mail senden, wenn der Benutzer eine Information für einen bestimmten Satz von Feldern eingegeben hat (referral_1, referral_2, etc.)PHP Wenn der Wert Null ist, senden Sie eine E-Mail

im Moment habe ich dies zu überprüfen, ob der Benutzer eine beliebige Informationen in den Verweisungsfeldern (Texteingaben) eingegeben:

if($referral_1 or $referral_2 or $referral_3 or $referral_4 or $referral_5 == null) { 
    $autosubject = stripslashes($autosubject); 
    $automessage = stripslashes($automessage); 
    mail($email,"$autosubject","$automessage","From: $recipientname <$recipientemail>"); 
} 

if($referral_1 or $referral_2 or $referral_3 or $referral_4 or $referral_5 != null) { 
    $autosubject = stripslashes($autosubject); 
    $automessage = stripslashes($automessage); 
    mail($email,"$autosubject2","$automessage2","From: $recipientname <$recipientemail>"); 
} 

Aber es beide E-Mails zu senden, wenn der Benutzer die Befassung Felder abgeschlossen ist. Wenn sie keine Empfehlungsinformationen eingeben, scheint es gut zu funktionieren (sie erhalten nur die angegebene Bestätigungs-E-Mail). Irgendeine Idee, was ich falsch mache?

Antwort

2

Wenn diese Variablen direkt von $ _POST kommen, dann werden sie niemals null sein, z eine URL wie

http://example.com/script.php?field= 

wird

$_GET['field'] = ''; 

produzieren und einen leeren String, nicht einen Nullwert enthalten.

Darüber hinaus, Ihre Logik ist fehlerhaft, es wird analysiert, wie:

if (($referral_1 != '') or ($referral_2 != '') etc...) 

Für Ihre Aussage zu arbeiten, müssen Sie die or Bits klammern, weil or eine niedrigere Priorität als == hat, so .. .

if (($referral_1 or .... or $referal_5) == null) { 
    ^---        ^--- new brackets 

Das öffnet eine andere Dose Würmer. Die or Sequenz wird einen booleschen Wert true oder false erzeugen, nie einen null.also, was Sie wirklich wollen, ist einfach:

if ($referral_1 or ... $referal_5) { 
    ... a referal was specified in at least ONE of those fields. 
} 
1

Sie haben jeden Referrer Variable überprüfen einzeln zu sehen, ob sie null sind:

if(is_null($referral_1) || is_null($referral_2) || is_null($referral_3) || is_null($referral_4) || is_null($referral_5)) { 

Ich empfehle auch is_null statt == null

+0

Danke. Warum ist 'is_null' besser? – miles

+0

Es ist besser lesbar und erlaubt es Ihnen, sich darauf zu verlassen, dass PHP all die richtigen Dinge hinter den Kulissen tut, um sicherzustellen, dass der Wert wirklich null ist. Das kann oder darf nicht über einen einfachen Vergleich hinausgehen, aber PHP muss sich Sorgen machen, nicht wir. –

2

PHP boolean Vergleiche mit bekannten auf diese Weise nicht funktionieren. Sie können sie nicht mit einem Vergleich zum ersten oder letzten Argument verknüpfen. Stattdessen müssen Sie so etwas wie:

// Build an array of all the values and test NULL appears in the array 
if(in_array(NULL, array($referral_1, $referral_2, $referral_3, $referral_4, $referral_5)) { 

// ADDED: 
// To test if any value is NOT NULL, you can't use in_array(). Instead you can use 
// array_filter() and check if the output array has any values 
// This is complicated, and unless there are a lot of values to check, I'd probably just write 
// out all each one longhand... 
if (count(array_filter(array($referral_1, $referral_2, $referral_3, $referral_4, $referral_5), function($v) {return !is_null($v);})) > 0) { 
    // There's a non-null 
} 

Hinweis Um eine anonyme Funktion in array_filter() verwenden wie diese PHP 5.3 erfordert.

Oder schreiben sie aus Langschrift mit einem vollen Vergleich für jeden:

if($referral_1 === NULL or $referral_2 === NULL or $referral_3 === NULL or $referral_4 === NULL or $referral_5 === null) { 

es die Art und Weise tun Sie getan haben, nimmt Kurzschluss Auswertung von PHP über, und die erste nicht-null Wert in der Liste zurückkehrt WAHR, macht das Ganze WAHR.

+0

+1 für 'in_array' - netter. – iambriansreed

+0

Danke. Wie würde ich einen Vergleich machen, um das Gegenteil zu überprüfen? 'if (in_array (isset, array (...'? – miles

+0

@miles siehe Zusatz oben. –

1

Ich würde die Tatsache ausnutzen, dass isset() gibt false zurück, wenn der Wert null ist, und dass es mehrere Werte überprüfen:

if (isset($referral_1, $referral_2, $referral_3, $referral_4, $referral_5)) { 
// all values are not-null 
} else { 
// at least one value is not null 
} 

, wenn Sie überprüfen möchten, ob alle Werte null:

if (is_null($referral_1) and is_null($referral_2) and is_null($referral_3) and is_null($referral_4) and is_null($referral_5)) { 
// all values are null 
} 
+0

Dies könnte sein, wonach ich suche. Solange der Benutzer eines der Felder ausfüllt, möchte ich ihm eine E-Mail senden 1 Wenn sie keine ausfüllen, erhalten sie Email 2. – miles