Witam wszystkich. Mam problem z poniższym skryptem mojego autorstwa. Skrypt z założenia ma wykonywać:
1. Po kliknięciu wyślij ma być wysłany do mnie mail.
2. Schemat tematu wiadomości np. Problem/$counter/$date gdzie $counter to będzie zmienna zwiększana po każdym wysłaniu maila.
3. Dodawanie załącznika/pliku graficznego do formularza i wysyłanie go.
4. Walidacja żeby użytkownicy głupot nie wpisywali.
5. Zapisywanie do bazy danych wysłanych mailem informacji. //tego jeszcze nie ma, będzie jak się uporam z tym co jest
6. Rozmiar załączanego pliku ma być nie większy niż 2MB.
7. W celach ćwiczeniowych wszystko w php.
Na obecną chwilę po kliknięciu "Wyślij" żaden mail się nie wysyła. Od razu zaznaczę, że $headers ustawione na bazie przykładów znalezionych w sieci, więc mogą tam być błędy. Niestety $headers są wymagane do wysyłki maila z załącznikiem.
Bardzo proszę o wskazówki/pomoc.
<!DOCTYPE html>
<html>
<head>
<title>HelpDesk - wyślij problem</title>
<style>
.error {
color: #FF0000;
}
.mailmsg {
color: #00ddff;
}
</style>
</head>
<body>
<?php
//serwer
//$server = "localhost";
//admin
//$admin = "root";
//hasło
//$pass = "ZAQ!2wsx";
//nazwa bazy
//$base = "test";
//$dbconnection = mysqli_connect($server, $admin, $pass, $base) or die ("Brak połączenia z serwerem");
$nameErr = $surnameErr = $companyErr = $emailErr = $commentErr = $upload_fileErr = "";
$name = $surname = $company = $email = $comment = $upload_file = $mailMsg = $headers = $body = $content = "";
$counter = 0;
if ($_SERVER["REQUEST_METHOD"] == "POST"){
/* można by było sprawdzać w jednym ifie czy pola są ustawione i jeśli nie
* to zwracać jedno info, że nie są ustawione i wtedy dodać walidację w js
* i by było lepiej bo nie po stronie serwera, czyli bez odświeżania strony
*/
if (empty($_POST["name"])) { $nameErr = "Należy podać imię.";
} else {
$name = prepare_data($_POST["name"]);
#sprawdzanie czy imię zawiera tylko litery i ma od 3 - 20 znaków
if (!preg_match("/^[A-Z]([a-z]{3,20})$/", $name)){ $nameErr = "Należy wpisywać litery. Imię o długości 3 - 20 znaków.";
}
}
if (empty($_POST["surname"])) { $surnameErr = "Należy podać nazwisko.";
} else {
$surname = prepare_data($_POST["surname"]);
if (!preg_match("/^[A-Z]([a-z]{3,20})$/", $surname)){ $surnameErr = "Należy wpisywać litery. Nazwisko o długości 3 - 20 znaków.";
}
}
if (empty($_POST["company"])) { $companyErr = "Należy podać nazwę firmy.";
} else {
$company = prepare_data($_POST["company"]);
$companyErr = "Należy wpisywać litery.";
}
}
if (empty($_POST["email"])) { $emailErr = "Należy podać email kontaktowy.";
} else {
$email = prepare_data($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErr = "Należy podać poprawny email. Będzie użyty do kontaktu zwrotnego.";
}
}
if (empty($_POST["comment"])) { $commentErr = "Należy opisać problem.";
} else {
$comment = prepare_data($_POST["comment"]);
}
#$upload_file = $_POST["upload_file"];
$file = ($_FILES["upload_file"]["name"]);
#plik został wysłany i do tego bez błędów
if ($file && (!$_FILES["upload_file"]["error"])){
#pozwalamy na konkretne formaty
if ($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg"){
$upload_fileErr = "Dozwolone są tylko obrazki w formatach JPG, PNG, JPEG.";
}
#plik nie może być większy niż 2MB
if ($file > (2048000)) {
$upload_fileErr = "Plik jest większy niż 2MB.";
}
} //else {
//$upload_fileErr = "Wystąpił problem z dołączeniem pliku: kod ".$_FILES["upload_file"]["error"];
//}
$counter += 1;
$toEmail = "some@email.com"; #mail gdzie ma lecieć wiadomość
$subject = "Problem/$counter/date('Y/m/d h:i:sa')"; #format tematu -> Problem/kolejny_numer_inkrementowany_po_każdym_wysłaniu_formularza/data Y/M/D H:M:S
#oddziela kolejne części maila
$eol = "\r\n";
#main header
$headers .= "From: $email" . $eol;
$headers .= "MIME-version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $strSid . "\"" . $eol;
$headers .= "Content-Transfer-Encoding: 7bit" . $eol;
$headers .= "This is a MIME encoded message." . $eol;
#treść
$body .= "--" . $strSid . $eol;
$body .= "Content-Type: text/plain; charset=utf-8" . $eol;
$body .= "Content-Transfer-Encoding: 8bit" . $eol;
$body .= $comment . $eol;
#załącznik
$body .= "--" . $strSid . $eol;
$body .= "Content-Type: application/octet-stream; name=\"" . $file . "\"" . $eol;
$body .= "Content-Transfer-Encoding: base64" . $eol;
$body .= "Content-Disposition: attachement" .$eol;
$body .= $content . $eol;
$body .= "--" . $strSid . "--";
#wysyłka maila
if (mail($toEmail, $subject, $body, $headers)) {#za $comment moze być np. $body .= $comment $mailMsg = "Mail został wysłany.";
echo '<span class="mailmsg"><?php echo $mailMsg; ?></span>"'; } else {
$mailMsg = "Nie udało się wysłać maila.";
echo '<span class="mailmsg"><?php echo $mailMsg; ?></span>"'; }
}
#usuwanie niepotrzebnych znaków w razie jakby miały się pojawić
function prepare_data($form_data) {
$form_data = trim($form_data); #skasowanie białych znaków $form_data = stripslashes($form_data); #kasowanie backslashy #return $form_data; #ciekawe czy zwróci automatycznie dane czy trzeba je ręcznie zwracać
}
?>
<p><span class="error">* wymagane pola</span></p>
<form action="helpdesk.php" method="post" enctype="multipart/form-data">
<label for="name">Imię:</label>
<input type="text" name="name"><span class="error">*
<?php echo $nameErr; ?></span><br>
<label for="surname">Nazwisko:</label>
<input type="text" name="surname"><span class="error">*
<?php echo $surnameErr; ?></span><br>
<label for="company">Firma:</label>
<input type="text" name="company"><span class="error">*
<?php echo $companyErr; ?></span><br>
<label for="email">Email:</label>
<input type="text" name="email"><span class="error">*
<?php echo $emailErr; ?></span><br>
<label for="comment">Problem:</label>
<textarea name="comment" rows="5" cols="40"></textarea><span class="error">*
<?php echo $commentErr; ?></span><br>
<label for="upload_file">Wybierz plik do podesłania:</label><br>
<input type="file" name="upload_file"><span class="error">
<?php echo $upload_fileErr; ?></span>
<input type="submit" name="submit" value="Wyślij">
</form>
</body>
</html>