negatif değerler dönen

3 Cevap

Bu çok basit bir işlevi var ...

function send_mail($to, $from, $from_mail, $subject, $message) {

  if ( empty($from) || empty($from_mail) || empty($subject) || empty($message) ) {
      return -1;
  }

  if ( isset ($_SESSION['last_mailed']) )
  {
    if ( $_SESSION['last_mailed'] + 180 < time() )
        return -2;
  }
  $_SESSION['last_mailed'] = time();

  if ( !validEmail($from_mail) )
     return -3;

  $from = strip_mail_headers_single($from);
  $from_mail = strip_mail_headers_single($from_mail);
  $subject = strip_mail_headers_single($subject);
  $message = strip_mail_headers_multi($message);

  return mail($to, $subject, $message, "From: $from <$from_mail>\r\n");

}

if ( !empty($_POST) ) {
  $result = send_mail($mail_to, $_POST['from'], $_POST['from_mail'], $_POST['subject'], $_POST['message']);

  if ( $result == -1 ) 
  {
      echo "<p>You need to complete all the fields.</p>";
  } 
  elseif ( $result == -2 ) 
  {
      echo "<p>You can only send one mail every three minutes.</p>";
  } 
  elseif ( $result == -3 ) 
  {
      echo "<p>Please enter a valid email address.</p>";
  } 
  else 
  {
      echo "<p>Mail sent successfully!</p>";
  }
}

Ben bazı garip sonuçlar alıyorum. mail() function döner, sonuç 1 olarak ayarlanır ve posta gönderilir. Ancak, "if ( $result == -1 )" nedense true değerlendirir ve karşılık gelen hata iletisi yazdırılır. Neden bu? Herhangi bir fikir?

3 Cevap

Eğer true başarı durumunda olan mail() sonucunu dönen konum ve PHP bu gerçekten aptalca şeyler oluyor çünkü o nerede {[(1) ve semantik ]} o -1 dahil olmak üzere her mantıksal-gerçek bir ifadesi olarak (zayıf == karşılaştırıldığında) aynı olduğunu vardır.

Öneri:

return mail($to, $subject, $message, "From: $from <$from_mail>\r\n") ? 1 : 0;

ve mail() başarısız olduğunu gösteren 0 durum için işleme ekleyin.

=== yerine == da işe kullanılarak karşılaştırılması.

Yeni başlayanlar için mantık yanlış olduğunu:

if ( $_SESSION['last_mailed'] + 180 < time() )
    return -2;
}
$_SESSION['last_mailed'] = time();

// snip

elseif ( $result == -2 ) 
{
    echo "<p>You can only send one mail every three minutes.</p>";
}

Son e-posta gönderildi beri en fazla 3 dakika geçtikten Bu düz-İngilizce diyor, sonra geri -2.

İkincisi mail function PHP true veya false bir bool döndürür. -1 Bu karşılaştırmak için çalışmayın.

Boş değerleri kontrol nereye İlk satırda, kontrol etmek unutuyorsun $to

if ( empty($from) || empty($from_mail) || empty($subject) || empty($message) )

O atlar ki o if-condition bu boş olsa bile, bunun için kontrol etmiyoruz ve bu yüzden hiçbir şey gerçekten yanlış, çünkü.

Eğer mail() fonksiyonu olsun Sonra, e-posta başarıyla hayır to bu durumda ismin ne olursa olsun, gönderilen ve daha sonra boolean true değerini veya döndürür 1.

Ayrıca, bu test çünkü:

if ($result == -1)

Onlar false veya boş olmadıkça dünyada PHP, boolean types true, çünkü her zaman true değerlendirecek.

Kote için bu çekleri değiştirme, şöyle:

if ($result == "-1")