اذهب إلى المحتوى

السؤال

نشر

السلام عليكم
أنا استخدم مكتبة php email form وعندما أحاول عمل submit يعطيني هذا الخطأ 
           POST https://localhost/myProject/forms/contact.php 409 (Conflict)

                  <form action="forms/contact.php" method="post" class="php-email-form" data-aos="fade-up" data-aos-delay="200">
                    <div class="row gy-4">
                        <div class="col-md-6">
                            <input type="text" name="name" class="form-control" placeholder="اسمك" required="">
                        </div>
                        <div class="col-md-6 ">
                            <input type="email" class="form-control" name="email" placeholder="بريدك الالكتروني " required="">
                        </div>
                        <div class="col-md-6 ">
                            <input type="tel" class="form-control" name="phone" placeholder="رقم الهاتف " required="">
                        </div>
                        <div class="col-md-6">
                            <select name="subject" required>
                                <option value="" disabled selected>الخدمة</option>
                                <option value="جلسات استشارية">جلسات استشارية</option>
                                <option value="تدريب المؤسسات">تدريب المؤسسات</option>
                                <option value="برنامج NLP">برنامج NLP</option>
                                <option value="برنامج الحب والانعكاس">برنامج الحب والانعكاس</option>
                                <option value="برنامج النوايا وتحقيق الأهداف">برنامج النوايا وتحقيق الأهداف</option>
                                <option value="برنامج الوعي الأنثوي">برنامج الوعي الأنثوي</option>
                                <option value="برنامج الترانسيرفينغ">برنامج الترانسيرفينغ</option>
                                <option value="برنامج شفاء الطفلة الداخلية">برنامج شفاء الطفلة الداخلية</option>
                            </select>
                        </div>
                        <div class="col-12">
                            <textarea class="form-control" name="message" rows="6" placeholder="رسالتك" required=""></textarea>
                        </div>
                        <div class="col-12 text-center">
                            <div class="loading">Loading</div>
                            <div class="error-message"></div>
                            <div class="sent-message">Your message has been sent. Thank you!</div>
                            <button type="submit">إرسال</button>
                        </div>
                    </div>
                </form>

هذا كود الفورم
 

/**
* PHP Email Form Validation - v3.9
* URL: https://bootstrapmade.com/php-email-form/
* Author: BootstrapMade.com
*/
(function () {
  "use strict";

  let forms = document.querySelectorAll('.php-email-form');

  forms.forEach( function(e) {
    e.addEventListener('submit', function(event) {
      event.preventDefault();

      let thisForm = this;

      let action = thisForm.getAttribute('action');
      let recaptcha = thisForm.getAttribute('data-recaptcha-site-key');
      
      if( ! action ) {
        displayError(thisForm, 'The form action property is not set!');
        return;
      }
      thisForm.querySelector('.loading').classList.add('d-block');
      thisForm.querySelector('.error-message').classList.remove('d-block');
      thisForm.querySelector('.sent-message').classList.remove('d-block');

      const formData = new FormData(thisForm);

      
      

      if ( recaptcha ) {
        if(typeof grecaptcha !== "undefined" ) {
          grecaptcha.ready(function() {
            try {
              grecaptcha.execute(recaptcha, {action: 'php_email_form_submit'})
              .then(token => {
                formData.set('recaptcha-response', token);
                php_email_form_submit(thisForm, action, formData);
              })
            } catch(error) {
              displayError(thisForm, error);
            }
          });
        } else {
          displayError(thisForm, 'The reCaptcha javascript API url is not loaded!')
        }
      } else {
        php_email_form_submit(thisForm, action, formData);
      }
    });
  });

  function php_email_form_submit(thisForm, action, formData) {
    console.log("thisForm:",thisForm)
    console.log("action:",action)
    console.log("formData:",formData)
    fetch(action, {
      method: 'POST',
      body: formData,
      headers: {'X-Requested-With': 'XMLHttpRequest'}
    })
    .then(response => {
      console.log(response)
      if( response.ok ) {
        return response;
      } else {
        console.log(response)
        throw new Error(`${response.status} ${response.statusText} ${response.url}`); 
      }
    })
    .then(data => {
      console.log(data)
      thisForm.querySelector('.loading').classList.remove('d-block');
      if (data.ok) {
        thisForm.querySelector('.sent-message').classList.add('d-block');
        thisForm.reset(); 
      } else {
        console.log(data)
        throw new Error(data ? data : 'Form submission failed and no error message returned from: ' + action); 
      }
    })
    .catch((error) => {
      displayError(thisForm, error);
    });
  }

  function displayError(thisForm, error) {
    thisForm.querySelector('.loading').classList.remove('d-block');
    thisForm.querySelector('.error-message').innerHTML = "there is an error here";
    thisForm.querySelector('.error-message').classList.add('d-block');
  }

})();

وهذا كود ملف validate.js
 

<?php
  /**
  * Requires the "PHP Email Form" library
  * The "PHP Email Form" library is available only in the pro version of the template
  * The library should be uploaded to: vendor/php-email-form/php-email-form.php
  * For more info and help: https://bootstrapmade.com/php-email-form/
  */

  // Replace contact@example.com with your real receiving email address
  $receiving_email_address = 'adham111mahfoud@gmail.com';

  if (file_exists($php_email_form = '../assets/vendor/php-email-form/php-email-form.php')) {
    include($php_email_form);
  } else {
    die('Unable to load the "PHP Email Form" Library!');
  }

  $contact = new PHP_Email_Form;
  $contact->ajax = true;
  
  $contact->to = $receiving_email_address;
  $contact->from_name = $_POST['name'];
  $contact->from_email = $_POST['email'];
  $contact->subject = $_POST['subject']; // استخدام حقل subject الجديد

  // Uncomment below code if you want to use SMTP to send emails. You need to enter your correct SMTP credentials
  /*
  $contact->smtp = array(
    'host' => 'example.com',
    'username' => 'example',
    'password' => 'pass',
    'port' => '587'
  );
  */

  $contact->add_message($_POST['name'], 'From');
  $contact->add_message($_POST['email'], 'Email');
  $contact->add_message($_POST['phone'], 'Phone', 10); // إضافة حقل الهاتف
  $contact->add_message($_POST['subject'], 'Service', 10); // إضافة حقل الخدمة
  $contact->add_message($_POST['message'], 'Message', 10); // إضافة حقل الرسالة

  // إرسال البريد الإلكتروني
  $response = $contact->send();

  // إعادة التوجيه إلى الصفحة السابقة
  if (isset($_SERVER['HTTP_REFERER'])) {
      header('Location: ' . $_SERVER['HTTP_REFERER']);
  } else {
      // إعادة توجيه إلى صفحة افتراضية أو رسالة خطأ
      header('Location: default-page.php');
  }
  exit();
?>

وهذا كود ملف contac.php
ما هو الخطأ؟

Recommended Posts

  • 1
نشر
بتاريخ 16 دقائق مضت قال Adham Mahfoud:

هذه الصورة التي طلبتها وأنا استخدم النسخة المجانية من مكتبة php-email-form

يرجى الضغط على الطلب الذي باللون الأحمر والذهاب إلى نافذة response وإرسال الصورة لما يظهر لك .

هل في النسخة المجانية موجود لديك الملف php-email-form.php ؟ إذا لم يكن موجودا فغالبا هذه هي المشكلة.

  • 0
نشر

هل لديك النسخة المدفوعة من PHP Email Form ؟ 

حيث لاحظ في ملف contac.php يجب أولا أن يتم تحميل ملف php-email-form.php وهذا الملف موجود في النسخة المدفوعة فقط من المكتبة . إذا كانت لديك النسخة المدفوعة فغالبا المشكلة في هذا الملف . 

يرجى فتح نافذة ال network  في خيارات المطور في المتصفح وإرسال صورة للبيانات أو الرسالة التي تظهر لك عند إرسال النموذج form هكذا وإرسال الرسالة التي تظهر لك هنا :

image.png.445ae23d972758b0b8f3dba72b05f249.png

  • 0
نشر

image.png.8e9310c2076ff40b803fdfc7fa37221c.png

هذه نافذة response 
بالنسبة للملف الذي سألتني عنه لم يكن موجوداً أنا قمت بإنشائه واستخدمت الذكاء الصنعي لكتابة كود الملف 
هذا ه كود الملف
 

<?php

class PHP_Email_Form {
    public $to;
    public $from_name;
    public $from_email;
    public $subject; // الاحتفاظ بحقل subject
    public $ajax = false;
    private $messages = [];

    public function add_message($content, $name = '', $priority = 0) {
        $this->messages[] = [
            'content' => $content,
            'name' => $name,
            'priority' => $priority
        ];
    }

    public function send() {
        $headers = "From: {$this->from_name} <{$this->from_email}>\r\n";
        $headers .= "Reply-To: {$this->from_email}\r\n";
        $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";

        $message = "You have received a new message:\n\n";

        foreach ($this->messages as $msg) {
            $message .= "{$msg['name']}: {$msg['content']}\n";
        }

        if (mail($this->to, $this->subject, $message, $headers)) {
            return json_encode(['status' => 'success', 'message' => 'Your message has been sent. Thank you!']);
        } else {
            return json_encode(['status' => 'error', 'message' => 'There was a problem sending your message.']);
        }
    }
}
?>

 

  • 0
نشر
بتاريخ 20 دقائق مضت قال Adham Mahfoud:

هذه الصورة التي طلبتها وأنا استخدم النسخة المجانية من مكتبة php-email-form

حاول تعطيل وضع mod_security الخاص بالحماية وتفقد هل سيحل ذلك المشكلة أم لا، وذلك بإضافة التالي لملف .htaccess ثم أعد تشغيل سيرفر apache

<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>

 

  • 0
نشر
بتاريخ 2 دقائق مضت قال Adham Mahfoud:

لا أستطيع الوصول لهذه الملفات المشروع مرفوع على سيرفر وليس سيرفر محلي

 

حاول تجربة الأمر محليًا لتفقد هل المشكلة من الاستضافة أم لا، وعلى الاستضافة أيضًا تفقد الـ logs هل يوجد خطأ ظاهر؟ 

أحيانًا ستحتاج إلى مراسلة الدعم الفني لحل تلك المشكلة لك وتعديل الإعدادات أو عمل whitelisting للنموذج أو الكود بسبب إعدادات الأمان لديهم.

  • 0
نشر

المشكلة أن الفورم تعمل بشكل صحيح تماماً ويتم إرسال الإيميل بشكل صحيح فقط إذا قمت بفتح صفحة contact.php في علامة تبويب جديدة
جربت حذف ملف validate.js المسؤول عن عملية إرسال البيانات إلى صفحة contact.php لتصبح وجهة الفورم إلى صفحة contact.php 
فنجحت العملية بشكل صحيح لكنني لا أريد المستخدم أن يذهب إلى صفحة contact.php أريد عمل preventDefault على الفورم والتكفل بعملية إرسال البيانات من ملف الجافاسكريبت

  • 0
نشر
بتاريخ 6 دقائق مضت قال Adham Mahfoud:

المشكلة أن الفورم تعمل بشكل صحيح تماماً ويتم إرسال الإيميل بشكل صحيح فقط إذا قمت بفتح صفحة contact.php في علامة تبويب جديدة
جربت حذف ملف validate.js المسؤول عن عملية إرسال البيانات إلى صفحة contact.php لتصبح وجهة الفورم إلى صفحة contact.php 
فنجحت العملية بشكل صحيح لكنني لا أريد المستخدم أن يذهب إلى صفحة contact.php أريد عمل preventDefault على الفورم والتكفل بعملية إرسال البيانات من ملف الجافاسكريبت

حاول إرجاع استجابة JSON بدلاً من إعادة التوجيه وتحديث الملف للتعامل مع الاستجابة

  • 0
نشر
بتاريخ 1 ساعة قال Adham Mahfoud:

image.png.8e9310c2076ff40b803fdfc7fa37221c.png

هذه نافذة response 

 

لاحظ المشكلة هنا أنه يتم إعادة كود جافاسكريبت بدلا من تنفيذ الطلب لديك . ويبدوا أن الخادم الذي تعمل عليه يوجد به أكواد تمنع ال Bots أو Scraping ولهذا يتوجب التحقق من أن الطلب من مستخدم وليس bot .

لذلك أعتقد إما أن المشكلة لديك في ال recaptcha حيث لا يتم إرسالها مع الطلب من جافاسكريبت بالشكل المتوقع للخادم.

لذلك تأكد من إرسال الرمز الصحيح من بيانات الطلب ليعمل معك .

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...