· 8 years ago · Jun 16, 2018, 08:26 PM
1<?php
2error_reporting(E_ALL);
3ini_set('display_errors', 1);
4ini_set('display_startup_errors',1);
5?>
6
7<!DOCTYPE HTML>
8
9
10<?php
11/*
121. Po kliknięciu wyślij ma leciec mail do mnie.
132. Schemat tematu wiadomości np. Problem/$licznik/$date
14gdzie $licznik to będzie zmienna zwiększana po każdym wysłaniu maila
153. Dodawanie załącznika/pliku graficznego do formularza i wysyłanie go potem.
164. Walidacja żeby głupot nie wpisywali.
175. Zapisywanie do bazy danych wysłanych mailem informacji.
186. Rozmiar pliku nie większy niż 2MB.
19*/
20
21/*
22tabela w bazie
23CREATE TABLE IF NOT EXISTS `mail_counter` (
24 `counter` int(255) NOT NULL
25);
26
27*/
28
29 try{
30 $dbconn = new PDO('mysql:host=localhost;dbname=test', 'root', 'epkzpakf');
31 } catch (PDOException $e){
32 print "Błąd połączenia z bazą: " . $e->getMessage() . "<br/>";
33 die();
34 }
35 $query = "SELECT * FROM mail_counter";
36 $row = $dbconn->query($query);
37 //$mailCount = $row["counter"]; czy to jest potrzebne do czegoÅ›?
38
39
40 $formErrors = array(
41 "name" => array(
42 "error" => "Należy podać imię.",
43 "error2" => "Należy wpisywać litery."
44 ),
45 "surname" => array(
46 "error" => "Należy podać nazwisko.",
47 "error2" => "Należy wpisywać litery."
48 ),
49 "company" => array(
50 "error" => "Należy podać nazwę firmy.",
51 "error2" => "Należy wpisywać litery."
52 ),
53 "email" => array(
54 "error" => "Należy podać email kontaktowy.",
55 "error2" => "Należy podać poprawny email. Będzie użyty do kontaktu zwrotnego."
56 ),
57 "comment" => array(
58 "error" => "Należy opisać problem.",
59 ),
60 "upload_file" => array(
61 "error" => "Dozwolone sÄ… tylko obrazki w formatach JPG, PNG, JPEG.",
62 "error2" => "Plik jest większy niż 2MB.",
63 "error3" => "Wystąpił problem z dołączeniem pliku:"
64 )
65 );
66
67/* #usuwanie niepotrzebnych znaków w razie jakby miały się pojawić
68 function prepare_data($form_data) {
69 $form_data = trim($form_data); #skasowanie białych znaków
70 $form_data = stripslashes($form_data); #kasowanie backslashy
71 return $form_data;
72 }
73
74 //do wyrzucenia niepotrzebne zmienne
75 $nameErr = $surnameErr = $companyErr = $emailErr = $commentErr = $upload_fileErr = "";
76 $name = $surname = $company = $email = $comment = $upload_file = $mailMsg = $headers = $body = $content = "";
77 $counter = 0;
78
79
80 if (isset($_POST["name"])) {
81 $name = prepare_data($_POST["name"]);
82 if (!preg_match("/^[a-zA-Z]$/", $name)){
83 $formErrors["name"]["error2"];
84 }
85 }
86
87 if (isset($_POST["surname"])) {
88 $surname = prepare_data($_POST["surname"]);
89 if (!preg_match("/^[a-zA-Z]$/", $surname)){
90 $formErrors["surname"]["error2"];
91 }
92 }
93
94 if (isset($_POST["company"])) {
95 $company = prepare_data($_POST["company"]);
96 if (!preg_match("/^[a-zA-Z]$/", $company)){
97 $formErrors["company"]["error2"];
98 }
99 }
100
101 if (isset($_POST["email"])) {
102 $email = prepare_data($_POST["email"]);
103 if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
104 $formErrors["email"]["error2"];
105 }
106 }
107
108 if (isset($_POST["comment"])) {
109 $comment = prepare_data($_POST["comment"]);
110 }
111
112http://sandbox.onlinephpfunctions.com/code/4737d56f760c9fb9abb4ef72f4a71f0e316095a5
113*/
114
115 if (isset($_POST) && !empty($_POST)){
116 $counter = 0;
117 $file_name = $temp_name = $file_type = "";
118 if(!empty($_FILES['upload_file']['name'])) {
119 $file_name = $_FILES['upload_file']['name'];
120 $temp_name = $_FILES['upload_file']['tmp_name'];
121 $file_type = $_FILES['upload_file']['type'];
122
123 move_uploaded_file($_FILES['upload_file']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/tmp_dir/'.$_FILES['upload_file']['name']);
124
125 $base = basename($file_name);
126 $extension = strtolower(pathinfo($base, PATHINFO_EXTENSION));
127 $allowed_extensions = array("jpg", "jpeg", "png");
128
129 if(in_array($extension, $allowed_extensions)) {
130 $from = $_POST['email'];
131 $toEmail = "testdev897@gmail.com";
132 $date = date('Y-m-d h:i:sa');
133 $subject = "Problem/$counter/$date";
134 $message = $_POST['email']; //dodać w formularzu text area i zmienic tu na comment
135
136 //move_uploaded_file($_FILES['upload_file']['tmp_name'], '/htdocs/tmp_dir/'.$_FILES['upload_file']['name']);
137 //$file = $temp_name;
138 //dodany dump zmiennej która powinna zawierać plik
139 //var_dump($_FILES['upload_file']['tmp_name']);
140 //die();
141
142 //$content = chunk_split(base64_encode(file_get_contents($file_name)));
143 $content = chunk_split(base64_encode(file_get_contents($_SERVER["DOCUMENT_ROOT"]."/tmp_dir/" .$file_name)));
144 $uid = md5(uniqid(time()));
145
146 $header = "From: ".$from."\r\n";
147 $header .= "Reply-To: ".$toEmail."\r\n";
148 $header .= "MIME-Version: 1.0\r\n";
149 $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n";
150 $header .= "Mime multipart message.\r\n";
151
152 $header .= "--".$uid."\r\n";
153 $header .= "Content-Type:text/plain; charset=iso-8859-1\r\n";
154 $header .= "Content-Transfer-Encoding: 7bit\r\n";
155 $header .= $message."\r\n";
156
157 $header .= "--".$uid."\r\n";
158 $header .= "Content-Type: ".$file_type."; name=\"".$file_name."\"\r\n";
159 $header .= "Content-Transfer-Encoding: base64\r\n";
160 $header .= "Content-Disposition: attachement; filename=\"".$file_name."\"\r\n";
161 $header .= $content."\r\n";
162
163 if (mail($toEmail, $subject, "", $header)) {
164 echo "Mail został wysłany.";
165 $query = "UPDATE mail_counter SET counter = '++$counter'";
166 $dbconn->query($query);
167 } else {
168 echo "Nie udało się wysłać maila.";
169 }
170 exit;
171
172 } else {
173 echo $formErrors["upload_file"]["error"];
174 }
175
176 } else {
177 echo $formErrors["upload_file"]["error3"];
178 }
179 }
180
181?>
182<html>
183 <head>
184 <title>HelpDesk - wyślij problem</title>
185 <style>
186 .error {
187 color: #FF0000;
188 }
189 .mailmsg {
190 color: #00ddff;
191 }
192 </style>
193 </head>
194<body>
195 <p><span class="error">* wymagane pola</span></p>
196
197 <form method="post" action="helpdesk_forum.php" enctype="multipart/form-data">
198 <label for="email">Email:<span class="error">*</span></label>
199 <input type="text" name="email"><br>
200 <label for="upload_file">Wybierz plik do podesłania:</label><br>
201 <input type="file" name="upload_file">
202 <input type="submit" name="submit" value="Wyślij">
203 </form>
204
205</body>
206</html>