?
| Current Path : /home/webyoo/www/backup/allback/docteur-site/cv/sym/a/sarah/site/ |
| Current File : /home/webyoo/www/backup/allback/docteur-site/cv/sym/a/sarah/site/ajax.php |
<?php
// Fichier ajax.php - Traitement du formulaire médical Sarah Hatwell
// Configuration pour éviter les erreurs d'affichage
header('Content-Type: application/json; charset=utf-8');
ini_set('display_errors', 0);
error_reporting(E_ALL);
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'PHPMailer/src/Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Configuration de la base de données
// MODIFIEZ CES PARAMÈTRES SELON VOTRE CONFIGURATION
$db_config = [
'host' => 'webyoobdd.mysql.db',
'dbname' => 'webyoobdd', // Remplacez par le nom de votre base de données
'username' => 'webyoobdd', // Remplacez par votre nom d'utilisateur
'password' => 'BDDaTdh1oF6hGCmZLS7pf26', // Remplacez par votre mot de passe
'charset' => 'utf8mb4'
];
// Fonction de réponse JSON
function sendResponse($success, $message = '', $data = []) {
echo json_encode([
'success' => $success,
'message' => $message,
'data' => $data
], JSON_UNESCAPED_UNICODE);
exit;
}
// Fonction de validation des données
function validateData($data) {
$errors = [];
// Validation des champs obligatoires
$required_fields = [
'firstName' => '×©× ×¤×¨×˜×™',
'lastName' => '×©× ×ž×©×¤×—×”',
'idNumber' => 'מספר תעודת זהות',
'phone' => 'טלפון',
'pregnant' => 'ש×לת הריון/×”× ×§×”',
'blood_thinners' => 'ש×לת מדללי ד×',
'diabetes' => 'ש×לת סכרת',
'hormonal' => 'ש×לת בעיות ×”×•×¨×ž×•× ×œ×™×•×ª',
'autoimmune' => 'ש×לת מחלה ×וטו××™×ž×•× ×™×ª',
'skin_inflammation' => 'ש×לת דלקת עור',
'substances' => 'ש×לת ×לכוהול/סמי×',
'allergies' => 'ש×לת ×לרגיות',
'anesthetic_allergy' => 'ש×לת ×לרגיה לחומרי הרדמה',
'facial_skin' => 'ש×לת מחלת עור ×‘×¤× ×™×',
'roaccutane' => 'ש×לת רו×קוטן',
'sick_antibiotics' => 'ש×לת מחלה/×× ×˜×™×‘×™×•×˜×™×§×”',
'consent' => 'הסכמה',
'update_commitment' => 'התחייבות עדכון'
];
foreach ($required_fields as $field => $label) {
if (empty($data[$field])) {
$errors[] = "השדה '$label' ×”×•× ×—×•×‘×”";
}
}
// Validation du téléphone
if (!empty($data['phone']) && !preg_match('/^[0-9\-\+\s\(\)]{10,15}$/', $data['phone'])) {
$errors[] = "פורמט הטלפון ×œ× ×ª×§×™×Ÿ";
}
// Validation des réponses oui/non
$yes_no_fields = ['pregnant', 'blood_thinners', 'diabetes', 'hormonal', 'autoimmune',
'skin_inflammation', 'substances', 'allergies', 'anesthetic_allergy',
'facial_skin', 'roaccutane', 'sick_antibiotics'];
foreach ($yes_no_fields as $field) {
if (!empty($data[$field]) && !in_array($data[$field], ['yes', 'no'])) {
$errors[] = "ערך ×œ× ×ª×§×™×Ÿ עבור השדה $field";
}
}
// Validation conditionnelle
if ($data['autoimmune'] === 'yes' && empty($data['autoimmune_which'])) {
$errors[] = "×× × ×¤×¨×˜ ×יזו מחלה ×וטו××™×ž×•× ×™×ª";
}
if ($data['allergies'] === 'yes' && empty($data['allergies_details'])) {
$errors[] = "×× × ×¤×¨×˜ ×ת ×”×לרגיות שלך";
}
if ($data['facial_skin'] === 'yes' && empty($data['facial_skin_details'])) {
$errors[] = "×× × ×¤×¨×˜ ×ת מחלת העור ×‘×¤× ×™×";
}
return $errors;
}
// Fonction de nettoyage des données
function sanitizeData($data) {
$clean_data = [];
foreach ($data as $key => $value) {
if (is_string($value)) {
$clean_data[$key] = trim(htmlspecialchars($value, ENT_QUOTES, 'UTF-8'));
} else {
$clean_data[$key] = $value;
}
}
return $clean_data;
}
// Fonction pour envoyer l'email de confirmation
function sendConfirmationEmail($data) {
$mail = new PHPMailer(true);
try {
$mail->CharSet = 'utf-8';
$mail->isSMTP();
$mail->SMTPDebug = 0; // Désactiver le debug pour éviter de corrompre la réponse JSON
$mail->SMTPAuth = true;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Essayer TLS au lieu de SSL
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587; // Port TLS au lieu de 465 (SSL)
$mail->Username = 'hmichael26@gmail.com';
$mail->Password = 'swyvcbzgtigihemt'; // 🔒 mot de passe d'application Gmail
$mail->Timeout = 60; // Timeout de 60 secondes
$mail->SMTPKeepAlive = true; // Garder la connexion ouverte
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->setFrom('hmichael26@gmail.com', 'Sarah Hatwell - Maquillage Permanent');
$mail->addAddress('hsarah26@gmail.com');
// Copie pour debug - vous pouvez retirer cette ligne plus tard
$mail->addAddress('hmichael26@gmail.com');
$mail->isHTML(true);
$mail->Subject = 'סקר רפו××™ חדש - ' . $data['firstName'] . ' ' . $data['lastName'];
// Construction du contenu de l'email en hébreu
$emailBody = generateEmailBody($data);
$mail->Body = $emailBody;
$result = $mail->send();
error_log("Email envoyé avec succès pour: " . $data['firstName'] . ' ' . $data['lastName']);
return true;
} catch (Exception $e) {
error_log("Erreur envoi email: " . $e->getMessage());
error_log("PHPMailer ErrorInfo: " . $mail->ErrorInfo);
return false;
}
}
// Fonction pour générer le contenu de l'email
function generateEmailBody($data) {
$yesNo = function($value) {
return $value === 'yes' ? 'כן' : 'ל×';
};
$logoUrl = 'https://www.sarah-hatwell.com/wp-content/uploads/2022/12/logo-sarah-hatwell-black-on-white-e1681676539810.jpg';
$body = "
<div style='direction: rtl; font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; background: #f8f9fa; padding: 20px;'>
<div style='background: white; border-radius: 15px; padding: 30px; box-shadow: 0 5px 15px rgba(0,0,0,0.1);'>
<!-- Header -->
<div style='text-align: center; margin-bottom: 30px; background: #000; color: white; padding: 20px; border-radius: 10px;'>
<img src='{$logoUrl}' alt='שרה ×”×טוול' style='max-width: 200px; background: white; padding: 10px; border-radius: 10px; margin-bottom: 15px;'>
<h1 style='margin: 0; font-size: 28px;'>סקר רפו××™ חדש התקבל</h1>
<p style='margin: 10px 0 0 0; opacity: 0.9;'>טיפול ×יפור קבוע</p>
</div>
<!-- Informations personnelles -->
<div style='background: #e9ecef; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
<h2 style='color: #000; border-bottom: 2px solid #000; padding-bottom: 10px; margin-bottom: 15px;'>×¤×¨×˜×™× ×ישיי×</h2>
<table style='width: 100%; border-collapse: collapse;'>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×©× ×¤×¨×˜×™:</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$data['firstName']}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×©× ×ž×©×¤×—×”:</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$data['lastName']}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>מספר תעודת זהות:</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$data['idNumber']}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold;'>מספר טלפון:</td>
<td style='padding: 8px;'>{$data['phone']}</td>
</tr>
</table>
</div>
<!-- Questionnaire médical -->
<div style='background: #fff3cd; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
<h2 style='color: #000; border-bottom: 2px solid #000; padding-bottom: 10px; margin-bottom: 15px;'>ש×לות רפו×יות</h2>
<table style='width: 100%; border-collapse: collapse;'>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×ת בהריון/×ž× ×™×§×”?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['pregnant'])}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×ת × ×•×˜×œ×ª מדללי ד×?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['blood_thinners'])}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×™×© לך סכרת?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['diabetes'])}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×™×© לך בעיות ×”×•×¨×ž×•× ×œ×™×•×ª?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['hormonal'])}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×™×© מחלה ×וטו××™×ž×•× ×™×ª?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['autoimmune'])}</td>
</tr>";
if ($data['autoimmune'] === 'yes' && !empty($data['autoimmune_which'])) {
$body .= "
<tr>
<td style='padding: 8px; font-weight: bold; color: #d63384; border-bottom: 1px solid #ddd;'>פרטי מחלה ×וטו××™×ž×•× ×™×ª:</td>
<td style='padding: 8px; color: #d63384; border-bottom: 1px solid #ddd;'>{$data['autoimmune_which']}</td>
</tr>";
}
$body .= "
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×™×© דלקת עור?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['skin_inflammation'])}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×ת × ×•×˜×œ×ª ×לקוהול ×ו סמי×?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['substances'])}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×™×© לך ×לרגיות ידועות?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['allergies'])}</td>
</tr>";
if ($data['allergies'] === 'yes' && !empty($data['allergies_details'])) {
$body .= "
<tr>
<td style='padding: 8px; font-weight: bold; color: #d63384; border-bottom: 1px solid #ddd;'>פרטי ×לרגיות:</td>
<td style='padding: 8px; color: #d63384; border-bottom: 1px solid #ddd;'>{$data['allergies_details']}</td>
</tr>";
}
$body .= "
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×™×© ×לרגיה לחומרי הרדמה?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['anesthetic_allergy'])}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×™×© מחלת עור ×‘×¤× ×™×?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['facial_skin'])}</td>
</tr>";
if ($data['facial_skin'] === 'yes' && !empty($data['facial_skin_details'])) {
$body .= "
<tr>
<td style='padding: 8px; font-weight: bold; color: #d63384; border-bottom: 1px solid #ddd;'>פרטי מחלת עור ×‘×¤× ×™×:</td>
<td style='padding: 8px; color: #d63384; border-bottom: 1px solid #ddd;'>{$data['facial_skin_details']}</td>
</tr>";
}
$body .= "
<tr>
<td style='padding: 8px; font-weight: bold; border-bottom: 1px solid #ddd;'>×”×× ×ת לוקחת רו×קוטן?</td>
<td style='padding: 8px; border-bottom: 1px solid #ddd;'>{$yesNo($data['roaccutane'])}</td>
</tr>
<tr>
<td style='padding: 8px; font-weight: bold;'>×”×× ×ת חולה ×ו לוקחת ×× ×˜×™×‘×™×•×˜×™×§×”?</td>
<td style='padding: 8px;'>{$yesNo($data['sick_antibiotics'])}</td>
</tr>
</table>
</div>";
// Informations supplémentaires
if (!empty($data['additional_info'])) {
$body .= "
<div style='background: #d1ecf1; padding: 20px; border-radius: 10px; margin-bottom: 20px;'>
<h3 style='color: #000; margin-top: 0;'>מידע × ×•×¡×£:</h3>
<p style='margin: 0; line-height: 1.6;'>{$data['additional_info']}</p>
</div>";
}
// Footer
$currentDate = date('d/m/Y H:i');
$body .= "
<!-- Footer -->
<div style='text-align: center; margin-top: 30px; padding: 20px; background: #f8f9fa; border-radius: 10px;'>
<p style='margin: 0; color: #6c757d; font-size: 14px;'>הטופס התקבל בת×ריך: {$currentDate}</p>
<p style='margin: 5px 0 0 0; color: #6c757d; font-size: 14px;'>שרה ×”×טוול - ×יפור קבוע מקצועי</p>
<p style='margin: 5px 0 0 0; color: #6c757d; font-size: 14px;'>טלפון: 054-308-7696</p>
</div>
</div>
</div>";
return $body;
}
// Vérifier que la requête est en POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
sendResponse(false, 'שיטה ×œ× ×ž×•×¨×©×™×ª');
}
try {
// Connexion à la base de données
$dsn = "mysql:host={$db_config['host']};dbname={$db_config['dbname']};charset={$db_config['charset']}";
$pdo = new PDO($dsn, $db_config['username'], $db_config['password'], [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
]);
// Récupération et nettoyage des données
$data = sanitizeData($_POST);
// Validation des données
$validation_errors = validateData($data);
if (!empty($validation_errors)) {
sendResponse(false, implode(', ', $validation_errors));
}
// Préparation des données pour insertion
$insert_data = [
'first_name' => $data['firstName'],
'last_name' => $data['lastName'],
'id_number' => $data['idNumber'],
'phone' => $data['phone'],
'pregnant' => $data['pregnant'],
'blood_thinners' => $data['blood_thinners'],
'diabetes' => $data['diabetes'],
'hormonal' => $data['hormonal'],
'autoimmune' => $data['autoimmune'],
'autoimmune_which' => $data['autoimmune_which'] ?? null,
'skin_inflammation' => $data['skin_inflammation'],
'substances' => $data['substances'],
'allergies' => $data['allergies'],
'allergies_details' => $data['allergies_details'] ?? null,
'anesthetic_allergy' => $data['anesthetic_allergy'],
'facial_skin' => $data['facial_skin'],
'facial_skin_details' => $data['facial_skin_details'] ?? null,
'roaccutane' => $data['roaccutane'],
'sick_antibiotics' => $data['sick_antibiotics'],
'additional_info' => $data['additional_info'] ?? null,
'consent' => isset($data['consent']) ? 1 : 0,
'update_commitment' => isset($data['update_commitment']) ? 1 : 0,
'ip_address' => $_SERVER['REMOTE_ADDR'] ?? null,
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? null
];
// Requête d'insertion
$sql = "INSERT INTO medical_survey (
first_name, last_name, id_number, phone,
pregnant, blood_thinners, diabetes, hormonal,
autoimmune, autoimmune_which, skin_inflammation, substances,
allergies, allergies_details, anesthetic_allergy, facial_skin,
facial_skin_details, roaccutane, sick_antibiotics, additional_info,
consent, update_commitment, ip_address, user_agent
) VALUES (
:first_name, :last_name, :id_number, :phone,
:pregnant, :blood_thinners, :diabetes, :hormonal,
:autoimmune, :autoimmune_which, :skin_inflammation, :substances,
:allergies, :allergies_details, :anesthetic_allergy, :facial_skin,
:facial_skin_details, :roaccutane, :sick_antibiotics, :additional_info,
:consent, :update_commitment, :ip_address, :user_agent
)";
// Exécution de la requête
$stmt = $pdo->prepare($sql);
$result = $stmt->execute($insert_data);
if ($result) {
$insert_id = $pdo->lastInsertId();
// Log de succès (optionnel)
error_log("Nouveau formulaire médical enregistré - ID: $insert_id - Patient: {$data['firstName']} {$data['lastName']}");
// Envoi de l'email de confirmation
$emailSent = sendConfirmationEmail($data);
if (!$emailSent) {
error_log("Erreur lors de l'envoi de l'email pour le patient: {$data['firstName']} {$data['lastName']}");
}
sendResponse(true, 'הטופס × ×©×ž×¨ בהצלחה', ['id' => $insert_id, 'email_sent' => $emailSent]);
} else {
sendResponse(false, 'שגי××” בעת השמירה');
}
} catch (PDOException $e) {
// Log de l'erreur pour le débogage
error_log("Erreur PDO dans ajax.php: " . $e->getMessage());
// Message d'erreur générique pour l'utilisateur
sendResponse(false, 'שגי×ת מסד × ×ª×•× ×™×. ×× × × ×¡×” שוב מ×וחר יותר.');
} catch (Exception $e) {
// Log de l'erreur pour le débogage
error_log("Erreur générale dans ajax.php: " . $e->getMessage());
// Message d'erreur générique pour l'utilisateur
sendResponse(false, '×ירעה שגי××”. ×× × × ×¡×” שוב מ×וחר יותר.');
}
?>