Witam wszystkich. Mam problem z poniższym skryptem mojego autorstwa. Skrypt z założenia ma wykonywać:
- Po kliknięciu wyślij ma być wysłany do mnie mail.
- Schemat tematu wiadomości np. Problem/$counter/$date gdzie $counter to będzie zmienna zwiększana po każdym wysłaniu maila.
- Dodawanie załącznika/pliku graficznego do formularza i wysyłanie go.
- Walidacja żeby użytkownicy głupot nie wpisywali.
- Zapisywanie do bazy danych wysłanych mailem informacji. //tego jeszcze nie ma, będzie jak się uporam z tym co jest
- Rozmiar załączanego pliku ma być nie większy niż 2MB.
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"]);
if (!preg_match("/^[A-Z]([a-z])$/", $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"]);
$fileType = strtolower(pathinfo($file, PATHINFO_EXTENSION));
#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.";
}
$content = chunk_split(base64_encode(file_get_contents($file)));
} //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
$strSid = md5(uniqid(time()));
$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>