obrazec popravek še en
Deploy to Development and Production / deploy (push) Successful in 4s Details

This commit is contained in:
Mark Poljanšek 2025-09-09 21:01:57 +02:00
parent a6f27c63fc
commit 4af807f639
1 changed files with 16 additions and 46 deletions

View File

@ -1,11 +1,10 @@
<?php
// === KORAK 0: NASTAVITVE ZA RAZVOJ IN RAZHROŠČEVANJE ===
// === KORAK 0: NASTAVITVE ZA PRODUKCIJO ===
// 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_startup_errors', 1);
// V produkciji izklopimo prikazovanje napak uporabniku.
// Napake se bodo še vedno beležile v strežniškem dnevniku (error log), če je pravilno nastavljen.
ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
error_reporting(E_ALL);
// Uvozimo potrebne PHPMailer razrede v globalni imenski prostor.
@ -14,25 +13,21 @@ use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
// Vključimo datoteke knjižnice PHPMailer.
// Pot je relativna na lokacijo te skripte.
require __DIR__ . '/phpmailer/src/Exception.php';
require __DIR__ . '/phpmailer/src/PHPMailer.php';
require __DIR__ . '/phpmailer/src/SMTP.php';
// Vključimo našo varno konfiguracijsko datoteko.
// 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.
header('Content-Type: application/json');
// Pripravimo privzet odgovor. Če pride do napake pred pošiljanjem, bo to poslano nazaj.
// Pripravimo privzet odgovor.
$response = ['success' => false, 'message' => 'Neznana napaka. Prosimo, kontaktirajte administratorja.'];
// === 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.
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405); // Method Not Allowed
$response['message'] = 'Nedovoljen dostop. Uporabite metodo POST.';
@ -42,11 +37,9 @@ if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
// === KORAK 2: BRANJE IN VALIDACIJA VSEBINE ===
// Preberemo JSON podatke, ki jih je poslal JavaScript (fetch).
$json_data = file_get_contents('php://input');
$data = json_decode($json_data, true);
// Preverimo, če so podatki pravilno dekodirani in če vsebujejo vse potrebne ključe.
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.';
@ -56,12 +49,10 @@ if (!$data || !isset($data['name']) || !isset($data['email']) || !isset($data['m
// === KORAK 3: ČIŠČENJE IN VALIDACIJA PODATKOV ===
// Uporabimo trim za odstranitev odvečnih presledkov.
$name = trim($data['name']);
$email = trim($data['email']);
$message = trim($data['message']);
// Validacija posameznih polj.
if (empty($name)) {
$response['message'] = 'Prosimo, vnesite vaše ime in priimek.';
echo json_encode($response);
@ -82,19 +73,14 @@ if (empty($message)) {
// === 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.
$mail = new PHPMailer(true);
try {
// --- Nastavitve strežnika (uporabimo konstante iz config.php) ---
// --- Nastavitve strežnika ---
// !!! KLJUČNO ZA RAZHROŠČEVANJE !!!
// 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;
// !!! POMEMBNO: Način za razhroščevanje je sedaj IZKLOPLJEN !!!
// S tem zagotovimo, da skripta vrne samo čist JSON odgovor.
$mail->SMTPDebug = SMTP::DEBUG_OFF;
$mail->isSMTP();
$mail->Host = SMTP_HOST;
@ -104,28 +90,17 @@ try {
$mail->SMTPSecure = SMTP_SECURE;
$mail->Port = SMTP_PORT;
// Nastavimo kodiranje znakov na UTF-8 za pravilno podporo šumnikom.
$mail->CharSet = 'UTF-8';
// --- Prejemniki ---
// 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.
$mail->setFrom(SMTP_USERNAME, $name);
// Prejemnik: To ste vi (lastnik spletne strani).
$mail->addAddress(SMTP_USERNAME, 'Hermina Merc - Spletna Stran');
// Naslov za odgovor (Reply-To): KLJUČEN DEL!
// 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.
$mail->addReplyTo($email, $name);
// --- Vsebina e-sporočila ---
$mail->isHTML(false); // Pošljemo kot navadno besedilo, ne HTML.
$mail->isHTML(false);
$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);
@ -143,25 +118,20 @@ try {
// === KORAK 5: POŠILJANJE E-SPOROČILA ===
$mail->send();
// Če je pošiljanje uspelo, pripravimo uspešen odgovor.
$response['success'] = true;
$response['message'] = 'Hvala za vaše sporočilo! Odgovorili vam bomo v najkrajšem možnem času.';
} catch (Exception $e) {
// Č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['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).
// Na strežniku omogočite pisanje v error log.
error_log("PHPMailer napaka: " . $e->getMessage());
// V produkciji ne izpisujemo podrobne napake uporabniku, ampak jo zabeležimo.
$response['message'] = 'Sporočila ni bilo mogoče poslati. Prosimo, poskusite znova kasneje ali kontaktirajte administratorja.';
// Zabeležimo dejansko napako v strežniški log.
error_log("PHPMailer napaka: " . $mail->ErrorInfo);
}
// === KORAK 6: POŠILJANJE ODGOVORA ===
// Pošljemo JSON odgovor nazaj JavaScriptu.
echo json_encode($response);
?>