?

áEÓê¤ÎïLwebshll2019

Current Path : /home/webyoo/www/sarah/site/
Upload File :
Current File : /home/webyoo/www/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, '×ירעה שגי××”. ×× × × ×¡×” שוב מ×וחר יותר.');
}
?>



web shell, Coded By 2019