obrazec popravek
Deploy to Development and Production / deploy (push) Successful in 4s
Details
Deploy to Development and Production / deploy (push) Successful in 4s
Details
This commit is contained in:
parent
b9c87390d5
commit
a6f27c63fc
|
|
@ -1,6 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
// Omogočimo prikazovanje napak za lažje razhroščevanje med razvojem.
|
// === KORAK 0: NASTAVITVE ZA RAZVOJ IN RAZHROŠČEVANJE ===
|
||||||
// V produkciji to zakomentirajte ali nastavite na 0.
|
|
||||||
|
// Omogočimo prikazovanje vseh PHP napak. To je ključno, da vidimo, če se skripta
|
||||||
|
// sesuje zaradi sintaktične ali druge kritične napake.
|
||||||
|
// V produkciji to nastavite na 0 ali odstranite.
|
||||||
ini_set('display_errors', 1);
|
ini_set('display_errors', 1);
|
||||||
ini_set('display_startup_errors', 1);
|
ini_set('display_startup_errors', 1);
|
||||||
error_reporting(E_ALL);
|
error_reporting(E_ALL);
|
||||||
|
|
@ -11,13 +14,14 @@ use PHPMailer\PHPMailer\SMTP;
|
||||||
use PHPMailer\PHPMailer\Exception;
|
use PHPMailer\PHPMailer\Exception;
|
||||||
|
|
||||||
// Vključimo datoteke knjižnice PHPMailer.
|
// Vključimo datoteke knjižnice PHPMailer.
|
||||||
// Pot je relativna na lokacijo te skripte (api/send_mail.php).
|
// Pot je relativna na lokacijo te skripte.
|
||||||
require 'phpmailer/Exception.php';
|
require __DIR__ . '/phpmailer/src/Exception.php';
|
||||||
require 'phpmailer/PHPMailer.php';
|
require __DIR__ . '/phpmailer/src/PHPMailer.php';
|
||||||
require 'phpmailer/SMTP.php';
|
require __DIR__ . '/phpmailer/src/SMTP.php';
|
||||||
|
|
||||||
// Vključimo našo varno konfiguracijsko datoteko z gesli.
|
// Vključimo našo varno konfiguracijsko datoteko.
|
||||||
require 'config.php';
|
// Uporaba __DIR__ zagotavlja, da je pot vedno pravilna, ne glede na to, od kod se skripta kliče.
|
||||||
|
require __DIR__ . '/config.php';
|
||||||
|
|
||||||
// Nastavimo glavo (header) odgovora, da bo brskalnik vedel, da pričakuje JSON.
|
// Nastavimo glavo (header) odgovora, da bo brskalnik vedel, da pričakuje JSON.
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
|
|
@ -25,31 +29,39 @@ header('Content-Type: application/json');
|
||||||
// Pripravimo privzet odgovor. Če pride do napake pred pošiljanjem, bo to poslano nazaj.
|
// Pripravimo privzet odgovor. Če pride do napake pred pošiljanjem, bo to poslano nazaj.
|
||||||
$response = ['success' => false, 'message' => 'Neznana napaka. Prosimo, kontaktirajte administratorja.'];
|
$response = ['success' => false, 'message' => 'Neznana napaka. Prosimo, kontaktirajte administratorja.'];
|
||||||
|
|
||||||
// 1. KORAK: Preverimo, ali je bila zahteva poslana z metodo POST.
|
// === KORAK 1: PREVERJANJE METODE ZAHTEVE ===
|
||||||
|
|
||||||
|
// Preverimo, ali je bila zahteva poslana z metodo POST.
|
||||||
// S tem preprečimo, da bi kdo do skripte dostopal neposredno preko URL-ja.
|
// S tem preprečimo, da bi kdo do skripte dostopal neposredno preko URL-ja.
|
||||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||||
$response['message'] = 'Nedovoljen dostop.';
|
http_response_code(405); // Method Not Allowed
|
||||||
|
$response['message'] = 'Nedovoljen dostop. Uporabite metodo POST.';
|
||||||
echo json_encode($response);
|
echo json_encode($response);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. KORAK: Preberemo JSON podatke, ki jih je poslal JavaScript (fetch).
|
// === KORAK 2: BRANJE IN VALIDACIJA VSEBINE ===
|
||||||
// Standardna PHP spremenljivka $_POST ne deluje za JSON vsebino.
|
|
||||||
|
// Preberemo JSON podatke, ki jih je poslal JavaScript (fetch).
|
||||||
$json_data = file_get_contents('php://input');
|
$json_data = file_get_contents('php://input');
|
||||||
$data = json_decode($json_data, true);
|
$data = json_decode($json_data, true);
|
||||||
|
|
||||||
// Preverimo, če so podatki pravilno dekodirani in če vsebujejo vse potrebne ključe.
|
// Preverimo, če so podatki pravilno dekodirani in če vsebujejo vse potrebne ključe.
|
||||||
if (!$data || !isset($data['name']) || !isset($data['email']) || !isset($data['message'])) {
|
if (!$data || !isset($data['name']) || !isset($data['email']) || !isset($data['message'])) {
|
||||||
|
http_response_code(400); // Bad Request
|
||||||
$response['message'] = 'Manjkajoči podatki. Prosimo, izpolnite vsa polja.';
|
$response['message'] = 'Manjkajoči podatki. Prosimo, izpolnite vsa polja.';
|
||||||
echo json_encode($response);
|
echo json_encode($response);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. KORAK: Očistimo in validiramo prejete podatke.
|
// === KORAK 3: ČIŠČENJE IN VALIDACIJA PODATKOV ===
|
||||||
|
|
||||||
|
// Uporabimo trim za odstranitev odvečnih presledkov.
|
||||||
$name = trim($data['name']);
|
$name = trim($data['name']);
|
||||||
$email = trim($data['email']);
|
$email = trim($data['email']);
|
||||||
$message = trim($data['message']);
|
$message = trim($data['message']);
|
||||||
|
|
||||||
|
// Validacija posameznih polj.
|
||||||
if (empty($name)) {
|
if (empty($name)) {
|
||||||
$response['message'] = 'Prosimo, vnesite vaše ime in priimek.';
|
$response['message'] = 'Prosimo, vnesite vaše ime in priimek.';
|
||||||
echo json_encode($response);
|
echo json_encode($response);
|
||||||
|
|
@ -68,15 +80,21 @@ if (empty($message)) {
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. KORAK: Ustvarimo novo instanco PHPMailer.
|
// === KORAK 4: INICIALIZACIJA IN KONFIGURACIJA PHPMAILER ===
|
||||||
|
|
||||||
|
// Ustvarimo novo instanco PHPMailer.
|
||||||
// `true` v konstruktorju omogoči izjeme (exceptions), kar je boljši način za obravnavo napak.
|
// `true` v konstruktorju omogoči izjeme (exceptions), kar je boljši način za obravnavo napak.
|
||||||
$mail = new PHPMailer(true);
|
$mail = new PHPMailer(true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// === Nastavitve strežnika (uporabimo konstante iz config.php) ===
|
// --- Nastavitve strežnika (uporabimo konstante iz config.php) ---
|
||||||
|
|
||||||
// Za razhroščevanje - prikaže podroben izpis dogajanja. V produkciji nastavite na SMTP::DEBUG_OFF.
|
// !!! KLJUČNO ZA RAZHROŠČEVANJE !!!
|
||||||
// $mail->SMTPDebug = SMTP::DEBUG_SERVER;
|
// Ta nastavitev bo v odgovoru (Response) v brskalnikovem zavihku "Network"
|
||||||
|
// izpisala celotno komunikacijo med vašim strežnikom in SMTP strežnikom.
|
||||||
|
// Tako boste natančno videli, kje in zakaj pride do napake.
|
||||||
|
// V produkciji to nastavite nazaj na: SMTP::DEBUG_OFF
|
||||||
|
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
|
||||||
|
|
||||||
$mail->isSMTP();
|
$mail->isSMTP();
|
||||||
$mail->Host = SMTP_HOST;
|
$mail->Host = SMTP_HOST;
|
||||||
|
|
@ -89,36 +107,40 @@ try {
|
||||||
// Nastavimo kodiranje znakov na UTF-8 za pravilno podporo šumnikom.
|
// Nastavimo kodiranje znakov na UTF-8 za pravilno podporo šumnikom.
|
||||||
$mail->CharSet = 'UTF-8';
|
$mail->CharSet = 'UTF-8';
|
||||||
|
|
||||||
// === Prejemniki ===
|
// --- Prejemniki ---
|
||||||
|
|
||||||
// Pošiljatelj - to mora biti naslov, s katerim se prijavljate (info@herminamerc.si).
|
// Pošiljatelj: To mora biti naslov, s katerim se prijavljate (info@herminamerc.si).
|
||||||
// Ime pošiljatelja pa je ime, ki ga je vpisala oseba v obrazec.
|
// Ime pošiljatelja pa je ime, ki ga je vpisala oseba v obrazec.
|
||||||
$mail->setFrom(SMTP_USERNAME, $name);
|
$mail->setFrom(SMTP_USERNAME, $name);
|
||||||
|
|
||||||
// Prejemnik - to ste vi (lastnik spletne strani).
|
// Prejemnik: To ste vi (lastnik spletne strani).
|
||||||
$mail->addAddress(SMTP_USERNAME, 'Hermina Merc - Spletna Stran');
|
$mail->addAddress(SMTP_USERNAME, 'Hermina Merc - Spletna Stran');
|
||||||
|
|
||||||
// Naslov za odgovor (Reply-To) - KLJUČEN DEL!
|
// Naslov za odgovor (Reply-To): KLJUČEN DEL!
|
||||||
// To nastavimo na e-mail osebe, ki je izpolnila obrazec.
|
// To nastavimo na e-mail osebe, ki je izpolnila obrazec.
|
||||||
// Ko boste v vašem e-mail klientu kliknili "Odgovori", boste odgovorili neposredno tej osebi.
|
// Ko boste v vašem e-mail klientu kliknili "Odgovori", boste odgovorili neposredno tej osebi.
|
||||||
$mail->addReplyTo($email, $name);
|
$mail->addReplyTo($email, $name);
|
||||||
|
|
||||||
// === Vsebina e-sporočila ===
|
// --- Vsebina e-sporočila ---
|
||||||
$mail->isHTML(false); // Pošljemo kot navadno besedilo, ne HTML.
|
$mail->isHTML(false); // Pošljemo kot navadno besedilo, ne HTML.
|
||||||
$mail->Subject = 'Novo sporočilo s spletne strani herminamerc.si';
|
$mail->Subject = 'Novo sporočilo s spletne strani herminamerc.si od: ' . $name;
|
||||||
|
|
||||||
|
// Sestavimo telo sporočila. Uporabimo htmlspecialchars za preprečitev morebitnih težav.
|
||||||
|
$bodyName = htmlspecialchars($name);
|
||||||
|
$bodyEmail = htmlspecialchars($email);
|
||||||
|
$bodyMessage = htmlspecialchars($message);
|
||||||
|
|
||||||
// Sestavimo telo sporočila.
|
|
||||||
$mail->Body = "Prejeli ste novo sporočilo preko kontaktnega obrazca.\n\n" .
|
$mail->Body = "Prejeli ste novo sporočilo preko kontaktnega obrazca.\n\n" .
|
||||||
"==================================================\n" .
|
"==================================================\n" .
|
||||||
"Ime in priimek: " . $name . "\n" .
|
"Ime in priimek: " . $bodyName . "\n" .
|
||||||
"E-mail naslov: " . $email . "\n" .
|
"E-mail naslov: " . $bodyEmail . "\n" .
|
||||||
"==================================================\n\n" .
|
"==================================================\n\n" .
|
||||||
"Sporočilo:\n" .
|
"Sporočilo:\n" .
|
||||||
"--------------------------------------------------\n" .
|
"--------------------------------------------------\n" .
|
||||||
$message . "\n" .
|
$bodyMessage . "\n" .
|
||||||
"--------------------------------------------------\n";
|
"--------------------------------------------------\n";
|
||||||
|
|
||||||
// 5. KORAK: Pošljemo e-sporočilo.
|
// === KORAK 5: POŠILJANJE E-SPOROČILA ===
|
||||||
$mail->send();
|
$mail->send();
|
||||||
|
|
||||||
// Če je pošiljanje uspelo, pripravimo uspešen odgovor.
|
// Če je pošiljanje uspelo, pripravimo uspešen odgovor.
|
||||||
|
|
@ -127,15 +149,19 @@ try {
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
// Če je prišlo do napake med pošiljanjem, jo ujamemo.
|
// Če je prišlo do napake med pošiljanjem, jo ujamemo.
|
||||||
|
// V odgovor vključimo podrobno sporočilo o napaki iz PHPMailerja.
|
||||||
|
http_response_code(500); // Internal Server Error
|
||||||
$response['success'] = false;
|
$response['success'] = false;
|
||||||
$response['message'] = 'Sporočila ni bilo mogoče poslati. Prosimo, poskusite znova kasneje.';
|
$response['message'] = 'Sporočila ni bilo mogoče poslati. Napaka strežnika: ' . $mail->ErrorInfo;
|
||||||
|
|
||||||
// Za razhroščevanje: zabeležimo dejansko napako v strežniški log (ne prikažemo je uporabniku).
|
// Za razhroščevanje: zabeležimo dejansko napako v strežniški log (ne prikažemo je uporabniku).
|
||||||
// Na strežniku omogočite pisanje v error log.
|
// Na strežniku omogočite pisanje v error log.
|
||||||
error_log("PHPMailer napaka: " . $mail->ErrorInfo);
|
error_log("PHPMailer napaka: " . $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. KORAK: Pošljemo JSON odgovor nazaj JavaScriptu.
|
// === KORAK 6: POŠILJANJE ODGOVORA ===
|
||||||
|
|
||||||
|
// Pošljemo JSON odgovor nazaj JavaScriptu.
|
||||||
echo json_encode($response);
|
echo json_encode($response);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
3506
code_export.txt
3506
code_export.txt
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue