[PHP + HTML] Formularz i wielu odbiorców na adres mail

0

Witam.
Mam następujący problem: posiadam formularz, który ma kilka pól oraz do wyboru za pomocą checkboxów odbiorców wypełnionego formularza (adresatów e-mail). Niestety nie działa komunikacja pomiędzy wartością value w checkboxie, a funkcją, która wysyła maila, czyli mail(). mail() przyjmuje parametr $odbiorca.

<?php
if (empty($_POST['submit'])) 
{
  echo "<table border=\"0\"><form method=\"post\"><td><b>Twoje dane:</b></td><td>"; 
  echo "<span style=COLOR:red>* pola obowizkowe</span>"; 
  echo '</td>
  <tr>
  <td width="25%"><input type=checkbox name="mails[]" value="[email protected]"></td>
  <td width="25%"> DziaB handlowy</td>
  <td width="25%"><input type=checkbox name="mails[]" value="[email protected]"></td>
  <td width="25%"> Serwis</td>
  </tr>';
  
  echo "
  <tr>
  <td>imi i nazwisko</td>
  <td><input type=\"text\" name=\"imie_nazwisko\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  echo "</td></tr><tr>
  <td>nazwa firmy</td>
  <td><input type=\"text\" name=\"nazwa_firmy\" style=\"width: 150px\"></td>
  </tr>
  <tr>
  <td>miejscowo[</td>
  <td><input type=\"text\" name=\"miejscowosc\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  echo "</td>
  </tr>
  <tr>
  <td>e-mail</td>
  <td><input type=\"text\" name=\"email\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  echo "</td>
  </tr>
  <tr>
  <td>nr telefonu</td>
  <td><input type=\"text\" name=\"nr_telefonu\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  echo "</td>
  </tr>
  <tr>
  <td>fax</td>
  <td><input type=\"text\" name=\"fax\" style=\"width: 150px\"></td>
  </tr>
  <tr>
  <td> </td>
  <td><input type=\"submit\" name=\"submit\" value=\"Wy[lij\"> 
  <input type=\"reset\" value=\"Wyczy[\"></td></form>
  </tr>
  </table>";
}

elseif (!empty($_POST['imie_nazwisko']) && !empty($_POST['nazwa_firmy']) && !empty($_POST['miejscowosc']) && !empty($_POST['email']) && !empty($_POST['nr_telefonu'])) 
{
  $mails = $_POST['mails'];
  $message = 'NadesBaB: '.$_POST['imie_nazwisko']."\nFirma: ".$_POST['nazwa_firmy']."\nMiejscowo[: ".$_POST['miejscowosc']."\nE-mail: ".$_POST['email']."\nNumer telefonu: ".$_POST['numer_telefonu']."\nFax: ".$_POST['fax'];
  $header = "From: $_POST[nazwa_firmy] <$_POST[email]>" . "\r\n" . 'Content-Type: text/plain; charset="UTF-8"';
  foreach($mails as $mail)
  {
    @mail("$mail","Formularz serwisowy","$message","$header")
    or die('Nie udaBo si wysBa wiadomo[ci');
    echo "Wiadomo[ zostaBa wysBana poprawnie! Dzikujemy.";
  }
}
else echo "WypeBnij wszystkie pola formularza!";
 
?>

Tu jest drugi sposób, który nie działa, problem jest raczej ten sam.


<?php
if (empty($_POST['submit'])) 
{
  echo "<table border=\"0\"><form method=\"post\"><td><b>Twoje dane:</b></td><td>"; 
  echo "<span style=COLOR:red>* pola obowizkowe</span>"; 
  echo '</td>
  <tr>
  <td width="25%"><input type=checkbox name="mail[]" value="[email protected]"></td>
  <td width="25%"> DziaB handlowy</td>
  <td width="25%"><input type=checkbox name="mail[]" value="[email protected]"></td>
  <td width="25%"> Serwis</td>
  </tr>';
  
  echo "
  <tr>
  <td>imi i nazwisko</td>
  <td><input type=\"text\" name=\"imie_nazwisko\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  echo "</td></tr><tr>
  <td>nazwa firmy</td>
  <td><input type=\"text\" name=\"nazwa_firmy\" style=\"width: 150px\"></td>
  </tr>
  <tr>
  <td>miejscowo[</td>
  <td><input type=\"text\" name=\"miejscowosc\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  echo "</td>
  </tr>
  <tr>
  <td>e-mail</td>
  <td><input type=\"text\" name=\"email\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  echo "</td>
  </tr>
  <tr>
  <td>nr telefonu</td>
  <td><input type=\"text\" name=\"nr_telefonu\" style=\"width: 150px\">"; ?><?php echo "<span style=COLOR:red>*</span>"; ?><?php
  echo "</td>
  </tr>
  <tr>
  <td>fax</td>
  <td><input type=\"text\" name=\"fax\" style=\"width: 150px\"></td>
  </tr>
  <tr>
  <td> </td>
  <td><input type=\"submit\" name=\"submit\" value=\"Wy[lij\"> 
  <input type=\"reset\" value=\"Wyczy[\"></td></form>
  </tr>
  </table>";
}

elseif (!empty($_POST['imie_nazwisko']) && !empty($_POST['nazwa_firmy']) && !empty($_POST['miejscowosc']) && !empty($_POST['email']) && !empty($_POST['nr_telefonu'])) 
{
  $mails = $_POST['mails'];
  $message = 'NadesBaB: '.$_POST['imie_nazwisko']."\nFirma: ".$_POST['nazwa_firmy']."\nMiejscowo[: ".$_POST['miejscowosc']."\nE-mail: ".$_POST['email']."\nNumer telefonu: ".$_POST['numer_telefonu']."\nFax: ".$_POST['fax'];
  $header = "From: $_POST[nazwa_firmy] <$_POST[email]>" . "\r\n" . 'Content-Type: text/plain; charset="UTF-8"';



$to= $mails[0] . ', ';
$to .= $mails[1]; 



  
    @mail("$to","Formularz serwisowy","$message","$header")
    or die('Nie udaBo si wysBa wiadomo[ci');
    echo "Wiadomo[ zostaBa wysBana poprawnie! Dzikujemy.";

  
}
else echo "WypeBnij wszystkie pola formularza!";

?>

Może ktoś zna rozwiązanie problemu, lub jeszcze jakieś inne zaproponuje.

0

Po pierwsze, to mamy coś takiego jak apostrof.

echo('<input type="text" name="nazwa_firmy" style="width: 150px">');

Wygląda czytelniej i nie trzeba tyle backslashy walić.

Co do tematu: Samo wysłanie $_POST['mails'] byłoby za proste. Jeśli masz coś takiego:

<input type=checkbox name="mails[]" value="[email protected]">
<input type=checkbox name="mails[]" value="[email protected]">

To żeby wyświetlić dla użytkownika wybrane przez niego maile dajesz:

foreach($_POST['mails'] as $value) {
   if ($value != '') echo($value . '<br/>');
}

W twoim przypadku trzeba podać je do funkcji mail. Funkcja ta zgodnie z tym co w manualu napisali przyjmuje w $to takie wartości:

    *  [email protected]
    * [email protected], [email protected]
    * User <[email protected]>
    * User <[email protected]>, Another User <[email protected]>

Wystarczy więc połączyć maile podane w tablicy. Tutaj nawet nie trzeba żadnych pętli, styknie implode()

Finalnie więc do swojego kodu powinieneś wstawić:

$mails = implode(', ', $_POST['mails']);

Pamiętaj jednak żeby sprawdzać, czy maile zaznaczone w polach są na pewno z twojej domeny (żeby uniknąć durnych robotów które znajdą lukę i zaczną spamować). Najprościej można to zrobić tak:

foreach($_POST['mails'] as $value) {
   if (strpos($value, '@domena.pl') === FALSE) {
      exit('Hacking attempt!');
   }
}

Ewentualnie jeszcze bezpieczniej spisać sobie wszystkie maile w skrypcie:

$dozwolone_maile[] = '[email protected]';
$dozwolone_maile[] = '[email protected]';

A potem foreachem sprawdzić po kolei:

foreach($_POST['mails'] as $value) {
   if (!in_array($value, $dozwolone_maile)) exit('Omfg N00B Attempt!');
}

I jeszcze słówko:
Po co robisz takie kombinacje?

?><?php

Zamykasz i za chwilę otwierasz. Napisanie czegoś takiego jest równoznaczne z nie napisaniem niczego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1