Hallo Linuchs,
Dir fehlen Klammern. Du musst die komplette zweite Zeile nochmal einklammern.
Grund: der ;? Operator hat in PHP die niedrigste Priorität. Alles, was vor dem ? steht, wird deshalb zuerst ausgewertet.
Das ist ohne zusätzliche Klammern dies:
$row_vip['email'] . ( $row_vip['email_2'] && strpos( $row_vip['email_2'], "@" ))
In der Klammer steht ein boolescher Ausdruck, der zu TRUE auswertet (email_2 ist gefüllt und ein @ ist drin), das kettest Du an email an (wobei aus dem TRUE eine 1 wird) und erhältst jan@example.com1.
Das ist truthy, deswegen wird der Teil zwischen ? und : erstellt und an $mailEmail zugewiesen.
Das ist ein typischer Fall, wo man einen Ausdruck besser aufbricht statt eine lange Wurst zu konstruieren. ICH würde hier eine Funktion is_valid_email schreiben.
$mailEmail = $row_vip['email']
. (is_valid_email($row_vip['email_2']) ? ",".$row_vip['email_2'] : '');
Oder vielleicht sogar besser noch
$mailEmail = $row_vip['email'];
if (is_valid_email($row_vip['email_2']))
{
$mailEmail .= "," . $row_vip['email_2'];
}
Das sind zwar vier Zeilen statt zwei, aber VIEL besser lesbar. Und der von PHP daraus erstellte Bytecode dürfte nicht ineffizienter sein als der inline-Ausdruck.
Die is_valid_email Funktion kann deine eigenen Abfragen enthalten. Oder Du verwendest eine fertige PHP Funktion:
function is_valid_email($mail) {
return filter_var($mail,
FILTER_VALIDATE_EMAIL, FILTER_NULL_ON_FAILURE) !== NULL;
}
Ist eigentlich garantiert, dass $row_vip['email']
immer gefüllt ist und ist nur email_2 optional?
Rolf
sumpsi - posui - obstruxi