· 8 years ago · Jun 21, 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', '');
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
114update xampp
115https://premium.wpmudev.org/blog/upgrading-xampp/
116
117smtp
118https://devcorner.pl/wysylac-maile-serwera-lokalnego-xampp/
119*/
120
121
122 if (isset($_POST) && !empty($_POST)){
123 //
124 $counter = "";
125 $sql = "SELECT counter FROM mail_counter";
126 $data = $dbconn->query($sql);
127
128 foreach($data as $element) {
129 $counter = $element['counter'];
130 }
131
132 //echo "dupa";
133 //echo $counter;
134 //die;
135 //
136 //$counter = 0;
137 $file_name = $temp_name = $file_type = "";
138 if(!empty($_FILES['upload_file']['name'])) {
139 $file_name = $_FILES['upload_file']['name'];
140 $temp_name = $_FILES['upload_file']['tmp_name'];
141 $file_type = $_FILES['upload_file']['type'];
142 $path = $_SERVER['DOCUMENT_ROOT'].'/tmp_dir/';
143
144 move_uploaded_file($temp_name, $path.$file_name);
145
146 $base = basename($file_name);
147 $extension = strtolower(pathinfo($base, PATHINFO_EXTENSION));
148 $allowed_extensions = array("jpg", "jpeg", "png");
149
150 if(in_array($extension, $allowed_extensions)) {
151 $from = $_POST['email'];
152 $toEmail = "testdev897@gmail.com";
153 $date = date('Y-m-d h:i:sa');
154 $subject = "Problem/$counter/$date";
155 $message = $_POST['email']; //dodać w formularzu text area i zmienic tu na comment
156
157 //move_uploaded_file($_FILES['upload_file']['tmp_name'], '/htdocs/tmp_dir/'.$_FILES['upload_file']['name']);
158 //$file = $temp_name;
159 //dodany dump zmiennej która powinna zawierać plik
160 //var_dump($_FILES['upload_file']['tmp_name']);
161 //die();
162
163 //$content = chunk_split(base64_encode(file_get_contents($file_name)));
164 $content = chunk_split(base64_encode(file_get_contents($path.$file_name)));
165 $uid = md5(uniqid(time()));
166
167 $header = "From: ".$from."\r\n";
168 $header .= "Reply-To: ".$toEmail."\r\n";
169 $header .= "MIME-Version: 1.0\r\n";
170 $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n";
171 $header .= "Mime multipart message.\r\n";
172
173 $header .= "--".$uid."\r\n";
174 $header .= "Content-Type:text/plain; charset=iso-8859-1\r\n";
175 $header .= "Content-Transfer-Encoding: 7bit\r\n";
176 $header .= $message."\r\n";
177
178 $header .= "--".$uid."\r\n";
179 $header .= "Content-Type: ".$file_type."; name=\"".$file_name."\"\r\n";
180 $header .= "Content-Transfer-Encoding: base64\r\n";
181 $header .= "Content-Disposition: attachement; filename=\"".$file_name."\"\r\n";
182 $header .= $content."\r\n";
183
184 if (mail($toEmail, $subject, "", $header)) {
185 echo "Mail został wysłany.";
186 $query = "UPDATE mail_counter SET counter = $counter+1";
187 $dbconn->query($query);
188 unlink($path.$file_name); //skasuj plik z serwera po wysłaniu maila
189 } else {
190 echo "Nie udało się wysłać maila.";
191 }
192 exit;
193
194 } else {
195 unlink($path.$file_name);
196 echo $formErrors["upload_file"]["error"];
197 }
198
199 } else {
200 echo $formErrors["upload_file"]["error3"];
201 }
202 }
203
204?>
205<html>
206 <head>
207 <title>HelpDesk - wyślij problem</title>
208 <style>
209 .error {
210 color: #FF0000;
211 }
212 .mailmsg {
213 color: #00ddff;
214 }
215 </style>
216 </head>
217<body>
218 <p><span class="error">* wymagane pola</span></p>
219
220 <form method="post" action="helpdesk_forum.php" enctype="multipart/form-data">
221 <label for="email">Email:<span class="error">*</span></label>
222 <input type="text" name="email"><br>
223 <label for="upload_file">Wybierz plik do podesłania:</label><br>
224 <input type="file" name="upload_file">
225 <input type="submit" name="submit" value="Wyślij">
226 </form>
227
228</body>
229</html>