Tworzę formularz opinii dla mojej strony internetowej za pomocą php, myślałem, że działa, ale potem wziąłem strzałkę do kodu.

W każdym razie formularz ma 4 pola: "imię", "e-mail", "temat" i "wiadomość".

Otrzymuję alert „Wiadomość nie powiodła się”, jeśli wszystkie cztery pola zawierają treść.

Widząc, że tak jest, przetestowałem zawartość w 3 z 4 pól, co daje mi 4 kombinacje:

combo 1 - "name", "email", "subject"
combo 2 - "name", "email", "message"
combo 3 - "name", "subject", "message"
combo 4 - "email", "subject", "message"

Wyniki były następujące:

combo 1 - "Thank you for your message."
combo 2 - "Thank you for your message."
combo 3 - "Message failed."
combo 4 - "Thank you for your message."

Oto kod HTML, którego używam:

<form action="contact.php" method="post">
  <input type="hidden" name="page" value="contact" />
  <input type="hidden" name="req" value="submit" />
  Your Name: <input type="text" name="name" />
  <br/>
  Your Email: <input type="text" name="email" />
  <br/>
  Subject: <input type="text" name="subject" size="69" />
  <br/>
  Message:
  <br/>
  <textarea cols="63" rows="8" name="message"></textarea>
  </br>
  <input type="submit" value="Send" />
  <input type="reset" value="Clear" />
</form>

A oto contact.php:

<?php
  $field_name = $_POST['name'];
  $field_email = $_POST['email'];
  $field_subject = $_POST['subject'];
  $field_message = $_POST['message'];

  $mail_to = 'email@my_website.com';
  $subject = 'Message from a site visitor '.$field_name;

  $body_message = 'From: '.$field_name."\n";
  $body_message .= 'E-mail: '.$field_email."\n";
  $body_message .= 'Subject: '.$field_subject."\n";
  $body_message .= 'Message: '."\n";
  $body_message .= $field_message;

  $headers = 'From: '.$field_email."\r\n";
  $headers .= 'Reply-To: '.$field_email."\r\n";

  $mail_status = mail($mail_to, $subject, $body_message, $headers);

  if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
  alert('Thank you for your message.');
  window.location = './contact.html';
</script>
<?php
  }
  else { ?>
<script language="javascript" type="text/javascript">
alert('Message failed.');
window.location = './contact.html';
</script>
<?php
  }
?>

Czy coś jest nie tak z kodem? Nie rozumiem, dlaczego to robi.

php
1
Hook Hogan 2 marzec 2012, 03:29

2 odpowiedzi

Najlepsza odpowiedź

Świetna odpowiedź od Antona, ale chciałem zagłębić się w to trochę bardziej i rozszerzyć jego odpowiedź.

Jeśli chcesz się upewnić, że ktoś wysłał e-mail, wymagaj, aby został on zakodowany na sztywno za pomocą php (i html5 też byłby fajny, ale można tego uniknąć, więc nadal potrzebujesz php). Usunąłem również bit javascript, ponieważ wydawał się tam nieistotny. To jest to, co bym spróbował, a ponieważ jest krótki, zrobiłbym to wszystko na tej samej stronie. Istnieje wiele subtelnych zmian:

<?php
$field_name = $_POST['name'];
$field_email = $_POST['email'];
$field_subject = $_POST['subject'];
$field_message = $_POST['message'];


//If all required fields are filled
if (!empty($field_name)&&!empty($field_email)&&!empty($field_message))
  {
  $mail_to = 'email@my_website.com';
  $subject = 'Message from a site visitor: '.$field_name;

  $body_message = 'From: '.$field_name."\n";
  $body_message .= 'E-mail: '.$field_email."\n";
  $body_message .= 'Subject: '.$field_subject."\n";
  $body_message .= 'Message: '."\n";
  $body_message .= $field_message;

  $headers = 'From: '.$field_email."\r\n";
  $headers .= 'Reply-To: '.$field_email."\r\n";

  $mail_status = mail($mail_to, $subject, $body_message, $headers);

  echo "Thank you for your message.";
  }

//If not all required fields are filled display form again.
else
  { ?>
  Please fill all the required fields.<br>

  <form action="" method="post">
  <input type="hidden" name="page" value="contact" />
  <input type="hidden" name="req" value="submit" />

  <?php //The php bits are to retrieve the valid fields ?>
  Your Name*: <input required type="text" value="<?php echo $field_name; ?>" name="name"/>
  <br/>
  Your Email*: <input required type="email" value="<?php echo $field_email; ?>" name="email" />
  <br/>
  Subject: <input type="text" name="subject" value="<?php echo $field_subject; ?>" size="69" />
  <br/>
  Message*:
  <br/>
  <textarea required cols="63" rows="8" name="message"><?php echo $field_message; ?></textarea>
  </br>
  <input type="submit" value="Send" />
  <input type="reset" value="Clear" />
  </form>

  <?php
  }
?>

W przeciwnym razie, jeśli nie zależy Ci na tym, kto go wyśle, możesz po prostu umieścić coś takiego

$field_name = $_POST['name'];
$field_email = $_POST['email'];
if (empty($field_email)) $field_email="anonymous@MYPAGE.com";
$field_subject = $_POST['subject'];
$field_message = $_POST['message'];

Ostatnia rzecz, mam nadzieję, że to tylko pseudokod, ponieważ nie spełnia prawie żadnej reguły HTML. Potrzebujesz tagów < html >, < body > itp...

Właśnie przetestowałem i działało świetnie (;

3
Francisco Presencia 2 marzec 2012, 04:14