<!DOCTYPE html> <html lang="ar" dir="rtl"> <head>

ChatGPT Alger

عضو نشيط
المشاركات
72
مستوى التفاعل
3
النقاط
6
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta charset="UTF-8">
<title>نموذج تصريح الطريق</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no" />
<link rel="stylesheet" href="{{url_for('static',filename='assets/css/bootstrap.min.css')}}">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?fa...,400,400i,600,600i,700,700i,800,800i,900,900i">
<link rel="stylesheet" href="{{url_for('static',filename='assets/css/ready.css')}}">

<style>
body {
direction: rtl;
text-align: right;
}
.card {
margin-bottom: 20px;
}
input[type="number"]::-webkit-inner-spin-button {
opacity: 1;
display: block;
}

.dropdown-menu-checkbox {
max-height: 400px;
overflow-y: auto;
background-color: #ffffff;
border-radius: 8px;


padding: 10px 15px;
}


.dropdown-menu-checkbox li {
margin-bottom: 10px;
}

.dropdown-menu-checkbox input[type="checkbox"] {
margin-right: 10px;
}


.dropdown-menu-checkbox label {
font-size: 16px;
color: #333;
cursor: pointer;
}


.dropdown-toggle {
background-color: #f7f7f8;
color: rgb(14, 0, 0);
border: none; /* Remove border */
padding: 8px 20px; /* Padding for the button */
border-radius: 4px; /* Rounded corners */
font-size: 16px; /* Font size */
}

/* Hover effect on dropdown toggle button */
.dropdown-toggle:hover {
background-color: #0056b3; /* Darker background on hover */
}

/* Optional: Change color when dropdown is open */
.dropdown-menu.show {
background-color: #f1f1f1; /* Light background when open */
}
/* Hide the default file input */
.input-file {
display: none;
}

/* Style the label as the clickable file button */
.file-label {
display: inline-block;
padding: 10px 20px;
background-color: #007bff;
color: #fff;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
text-align: center;
margin-top: 10px;
}

/* Hover effect for the file button */
.file-label:hover {
background-color: #0056b3;
}

/* Style for the input field to show the selected file name */
.file-path {
margin-top: 15px;
font-size: 14px;
color: #333;
border: 1px solid #ccc;
padding: 8px;
border-radius: 5px;
width: 100%;
box-sizing: border-box;
}


</style>
</head>
<body>
<div class="wrapper">

<div class="main-header">
<div class="logo-header">
<a href="" class="logo">
رخصة شبكة الطرق
</a>

</div>
</div>
<div class="sidebar">
<div class="scrollbar-inner sidebar-wrapper">
<ul class="nav">
<li class="nav-item active">
<a>لوحة القيادة</a>
<span class="badge badge-count"></span>
</li>
<li class="nav-item">
<a>النموذج</a>
</li>
<li class="nav-item">
<a>السند القانوني</a>
</li>
</ul>
</div>
</div>
<div class="main-panel">
<div class="content">
<div class="container-fluid">
<a><p>يرجى ملء الإستمارة بتمعن </p>
<form id="road-permit-form" method="POST" action="{{ url_for('submit') }}">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h5 class="card-title">المعلومات الشخصية للمستفيد</h5>
</div>
<div class="card-body">
<div class="row">
<div class="form-group col-md-4">
<label for="optionsRadios">هل أنت:</label>
<select class="form-control" id="optionsRadios" name="optionsRadios">
<option value="فرد" selected>فرد</option>
<option value="مقاول">مقاول</option>
<option value="شركة">شركة</option>
<option value="الخدمة العامة">الخدمة العامة</option>
</select>
</div>

<div class="form-group col-md-4">
<label for="nom" style="font-weight:600;">الاسم</label>
<input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك">
</div>

<div class="form-group col-md-4">
<label for="prenom" style="font-weight:600;">اللقب</label>
<input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك">
</div>
</div>

<div class="row">
<div class="form-group col-md-4">
<label for="dateNaissance" style="font-weight:600;">تاريخ الميلاد</label>
<input type="date" class="form-control" id="dateNaissance" name="dateNaissance">
</div>

<div class="form-group col-md-4">
<label for="lieuNaissance" style="font-weight:600;">مكان الميلاد</label>
<input type="text" class="form-control" id="lieuNaissance" name="lieuNaissance" placeholder="أدخل مكان الميلاد">
</div>

<div class="form-group col-md-4">
<label for="adresse" style="font-weight:600;">العنوان</label>
<input type="text" class="form-control" id="adresse" name="adresse" placeholder="أدخل العنوان">
</div>
</div>

<div class="row">
<div class="form-group col-md-4">
<label for="tel" style="font-weight:600;">رقم هاتف المحمول</label>
<input type="tel" class="form-control" id="tel_mobile" name="tel_mobile" placeholder="أدخل رقم الهاتف المحمول">
</div>

<div class="form-group col-md-4">
<label for="tel_office" style="font-weight:600;">رقم هاتف المكتب</label>
<input type="tel" class="form-control" id="tel_office" name="tel_office" placeholder="أدخل رقم هاتف المكتب">
</div>

<div class="form-group col-md-4">
<label for="email" style="font-weight:600;">البريد الإلكتروني</label>
<input type="email" class="form-control" id="email" name="email" placeholder="أدخل البريد الإلكتروني">
</div>
</div>

<div class="row">
<div class="form-check col-md-4">
<label>الجنس</label><br/>
<label class="form-radio-label">
<input class="form-radio-input" type="radio" name="gender" value="ذكر" checked>
<span class="form-radio-sign">ذكر</span>
</label>
<label class="form-radio-label ml-3">
<input class="form-radio-input" type="radio" name="gender" value="أنثى">
<span class="form-radio-sign">أنثى</span>
</label>
</div>

<div class="form-check col-md-4">
<label>إذا كان المستفيد مختلفًا عن مقدم الطلب</label><br/>
<label class="form-radio-label ml-3">
<input type="radio" class="form-radio-input" name="beneficiary_type" value="yes" id="yes">
<span class="form-radio-sign">نعم</span>
</label>
<label class="form-radio-label ml-3">
<input type="radio" class="form-radio-input" name="beneficiary_type" value="no" id="no">
<span class="form-radio-sign">لا</span>
</label>
</div>
</div>
</div>
</div>
</div>





<div class="col-md-12">
<div class="card">
<div class="card-header">
<div class="card-title"> مخطط الأشغال (Taille MAX 1 MO) </div>
</div>
<div class="card-body">
<div class="row" style="display: flex; align-items: center; gap: 10px;">
<label for="file-upload" class="btn btn-primary" style="flex-shrink: 0; margin-right: 10px;">
حمل الملف
</label>

<input
type="file"
id="file-upload"
class="input-file"
name="file-upload"
accept=".pdf, .docx, .jpg"
style="flex-shrink: 0; margin-right: 10px;"
onchange="updateFileName()">

<input
type="text"
id="file-name"
class="form-control"
placeholder="اسم الملف سيظهر هنا"
style="flex-shrink: 0; margin-right: 10px; width: 400px; background-color: #f7f7f8;"
readonly>



</div>
</div>
</div>
</div>


<div class="col-md-12">
<div class="card">
<div class="card-header">
<div class="card-title"> تاكيد معلومات الطلب </div>
</div>

<div class="card-body">

<button type="button" id="confirmButton" class="btn btn-primary">تأكيد</button>
<button type="button" id="editButton" class="btn btn-primary">تعديل</button>
<button type="submit" id="submit" class="btn btn-primary">ارسال الطلب</button>
</div>





</div>
</div>




</div>
</form>
</div>
</div>

<footer class="footer">
<div class="container-fluid">
<div class="copyright ml-auto">
2025, من صنع بواسطة <a href="#">cas</a>
</div>
</div>
</footer>
</div>
</div>

<div class="modal fade" id="modalUpdate" tabindex="-1" role="dialog" aria-labelledby="modalUpdatePro" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header bg-primary">
<h6 class="modal-title"><i class="la la-frown-o"></i> تحت التطوير</h6>
<button type="button" class="close" data-dismiss="modal" aria-label="إغلاق">
<span aria-hidden="true">&times;</span>
</button>
</div>
</div>
</div>
</div>

<script>

function disableFormFields() {
const formFields = document.querySelectorAll('input, select, textarea, button');
formFields.forEach(field => {
if (field.id !== 'editButton') {
field.setAttribute('readonly', true);
field.setAttribute('disabled', true);
}
});
}

function enableFormFields() {
const formFields = document.querySelectorAll('input, select, textarea, button');
formFields.forEach(field => {
field.removeAttribute('readonly');
field.removeAttribute('disabled');
});
}

document.getElementById('road-permit-form').addEventListener('submit', function (event) {
// Désactiver les champs du formulaire
disableFormFields();

// Optionnel : Afficher un indicateur de chargement
document.getElementById('submit').innerText = 'جاري الإرسال...';
document.getElementById('submit').disabled = true;

// Soumettre le formulaire
this.submit();
});
document.getElementById('confirmButton').addEventListener('click', disableFormFields);
document.getElementById('editButton').addEventListener('click', enableFormFields);



function updateFileName() {
var fileInput = document.getElementById('file-upload');
var fileNameField = document.getElementById('file-name');
fileNameField.value = fileInput.files[0] ? fileInput.files[0].name : ''; // Display the uploaded file name
}

document.querySelectorAll("input[name='type_travaux']").forEach(function(radio) {
radio.addEventListener('change', function() {
var beneficiarySection = document.getElementById('beneficiary-section');


if (document.getElementById('yes').checked) {
beneficiarySection.style.display = 'block';
} else {
beneficiarySection.style.display = 'none';
}
});
});

function toggleProjectOwner() {
var yesRadio = document.getElementById('yes');
var noRadio = document.getElementById('no');
var projectOwnerSection = document.getElementById('projectOwnerSection');

// Show the section if 'yes' is selected, hide if 'no' is selected
if (yesRadio.checked) {
projectOwnerSection.style.display = 'block';
} else {
projectOwnerSection.style.display = 'none';
}
}
document.addEventListener('DOMContentLoaded', function () {

document.getElementById('confirmSubmit').addEventListener('click', function () {
document.getElementById('road-permit-form').submit();
const successModal = new bootstrap.Modal(document.getElementById('successModal'));
successModal.show();
const confirmationModal = bootstrap.Modal.getInstance(document.getElementById('confirmationModal'));
confirmationModal.hide();
});
});
</script>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>

<script src="{{url_for('static',filename='assets/js/core/jquery.3.2.1.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/jquery-ui-1.12.1.custom/jquery-ui.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/core/popper.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/core/bootstrap.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/chartist/chartist.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/chartist/plugin/chartist-plugin-tooltip.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/bootstrap-notify/bootstrap-notify.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/bootstrap-toggle/bootstrap-toggle.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/jquery-mapael/jquery.mapael.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/jquery-mapael/maps/world_countries.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/chart-circle/circles.min.js')}}"></script>
<script src="{{url_for('static',filename='assets/js/plugin/jquery-scrollbar/jquery.scrollbar.min.js')}}"></script>

</body>
</html> ;;;;
@app.route('/submit', methods=['POST'])
def submit():
try:
# Récupération des données du demandeur
nom = request.form.get('demandeur_nom')
print(f"Nom du demandeur: {nom}")
prenom = request.form.get('demandeur_prenom')
print(f"Prénom du demandeur: {prenom}")
date_Naissance_str = request.form.get('demandeur_date_naissance')
print(f"Date de naissance (chaîne): {date_Naissance_str}")
lieuNaissance = request.form.get('demandeur_lieu_naissance')
print(f"Lieu de naissance: {lieuNaissance}")
sexe = request.form.get('demandeur_sexe')
print(f"Sexe: {sexe}")
adresse = request.form.get('demandeur_adresse')
print(f"Adresse: {adresse}")
telephone = request.form.get('demandeur_telephone')
print(f"Téléphone: {telephone}")
fax = request.form.get('demandeur_fax')
print(f"Fax: {fax}")
email = request.form.get('demandeur_email')
print(f"Email: {email}")
type_demandeur = request.form.get('demandeur_type')
print(f"Type de demandeur: {type_demandeur}")

# Validation des champs obligatoires
if not nom or not prenom or not type_demandeur:
print("Erreur: Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires")
return "Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires", 400

if type_demandeur not in TypeDemandeur.__members__:
print(f"Erreur: Type de demandeur invalide: {type_demandeur}")
return "Type de demandeur invalide", 400

# Conversion de la date de naissance
date_Naissance = datetime.datetime.strptime(date_Naissance_str, "%Y-%m-%d").date() if date_Naissance_str else None
print(f"Date de naissance (convertie): {date_Naissance}")

# Vérification si le demandeur existe déjà
existing_demandeur = Demandeur.query.filter_by(nom=nom, prenom=prenom).first()
if existing_demandeur:
print(f"Erreur: Demandeur déjà existant: {existing_demandeur}")
return "Demandeur déjà existant", 400

# Création du nouveau demandeur
new_demandeur = Demandeur(
nom=nom, prenom=prenom, date_Naissance=date_Naissance, lieuNaissance=lieuNaissance,
sexe=sexe, adresse=adresse, telephone=telephone, fax=fax,
email=email, type_demandeur=TypeDemandeur[type_demandeur]
)
print(f"Nouveau demandeur créé: {new_demandeur}")
db.session.add(new_demandeur)
db.session.commit()
print("Demandeur enregistré dans la base de données")


# Redirection après succès
print("Redirection vers la page d'accueil")
return redirect(url_for('index')) ::Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires
قال ChatGPT:
It looks like you've provided an HTML template for a road permit form in Arabic. How can I assist you with this? Are you looking to enhance this template, fix any issues, or add specific functionality?







أنت قلت:
Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires prq
قال ChatGPT:
Pour rendre les champs 'nom', 'prenom' et 'type_demandeur' obligatoires dans le formulaire HTML, il suffit d'ajouter l'attribut required à ces champs dans le code. Voici comment procéder :

Champ "nom" :

html
نسخ
تحرير
<input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك" required>
Champ "prenom" :

html
نسخ
تحرير
<input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك" required>
Champ "type_demandeur" (le sélecteur "هل أنت") :

html
نسخ
تحرير
<select class="form-control" id="optionsRadios" name="optionsRadios" required>
<option value="فرد" selected>فرد</option>
<option value="مقاول">مقاول</option>
<option value="شركة">شركة</option>
<option value="الخدمة العامة">الخدمة العامة</option>
</select>
Cela garantit que l'utilisateur devra remplir ces champs avant de soumettre le formulaire. Si l'un de ces champs est vide, le formulaire ne pourra pas être soumis.

N'oubliez pas de tester la validation dans un navigateur pour vous assurer que tout fonctionne comme prévu.







أنت قلت:
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h5 class="card-title">المعلومات الشخصية للمستفيد</h5>
</div>
<div class="card-body">
<div class="row">
<div class="form-group col-md-4">
<label for="optionsRadios">هل أنت:</label>
<select class="form-control" id="optionsRadios" name="optionsRadios">
<option value="فرد" selected>فرد</option>
<option value="مقاول">مقاول</option>
<option value="شركة">شركة</option>
<option value="الخدمة العامة">الخدمة العامة</option>
</select>
</div>

<div class="form-group col-md-4">
<label for="nom" style="font-weight:600;">الاسم</label>
<input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك">
</div>

<div class="form-group col-md-4">
<label for="prenom" style="font-weight:600;">اللقب</label>
<input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك">
</div>
</div>

<div class="row">
<div class="form-group col-md-4">
<label for="dateNaissance" style="font-weight:600;">تاريخ الميلاد</label>
<input type="date" class="form-control" id="dateNaissance" name="dateNaissance">
</div>

<div class="form-group col-md-4">
<label for="lieuNaissance" style="font-weight:600;">مكان الميلاد</label>
<input type="text" class="form-control" id="lieuNaissance" name="lieuNaissance" placeholder="أدخل مكان الميلاد">
</div>

<div class="form-group col-md-4">
<label for="adresse" style="font-weight:600;">العنوان</label>
<input type="text" class="form-control" id="adresse" name="adresse" placeholder="أدخل العنوان">
</div>
</div>

<div class="row">
<div class="form-group col-md-4">
<label for="tel" style="font-weight:600;">رقم هاتف المحمول</label>
<input type="tel" class="form-control" id="tel_mobile" name="tel_mobile" placeholder="أدخل رقم الهاتف المحمول">
</div>

<div class="form-group col-md-4">
<label for="tel_office" style="font-weight:600;">رقم هاتف المكتب</label>
<input type="tel" class="form-control" id="tel_office" name="tel_office" placeholder="أدخل رقم هاتف المكتب">
</div>

<div class="form-group col-md-4">
<label for="email" style="font-weight:600;">البريد الإلكتروني</label>
<input type="email" class="form-control" id="email" name="email" placeholder="أدخل البريد الإلكتروني">
</div>
</div>

<div class="row">
<div class="form-check col-md-4">
<label>الجنس</label><br/>
<label class="form-radio-label">
<input class="form-radio-input" type="radio" name="gender" value="ذكر" checked>
<span class="form-radio-sign">ذكر</span>
</label>
<label class="form-radio-label ml-3">
<input class="form-radio-input" type="radio" name="gender" value="أنثى">
<span class="form-radio-sign">أنثى</span>
</label>
</div>

<div class="form-check col-md-4">
<label>إذا كان المستفيد مختلفًا عن مقدم الطلب</label><br/>
<label class="form-radio-label ml-3">
<input type="radio" class="form-radio-input" name="beneficiary_type" value="yes" id="yes">
<span class="form-radio-sign">نعم</span>
</label>
<label class="form-radio-label ml-3">
<input type="radio" class="form-radio-input" name="beneficiary_type" value="no" id="no">
<span class="form-radio-sign">لا</span>
</label>
</div>
</div>
</div>
</div>
</div>jai ca mais tjr :Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires
قال ChatGPT:
Si les champs 'nom', 'prenom' et 'type_demandeur' sont toujours signalés comme obligatoires malgré l'ajout de l'attribut required, il y a probablement un autre problème de validation. Voici quelques vérifications et ajustements à effectuer :

1. Vérifiez l'attribut required pour les champs
Assurez-vous que l'attribut required est bien présent pour les champs nécessaires. Par exemple :

html
نسخ
تحرير
<input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك" required>
<input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك" required>
<select class="form-control" id="optionsRadios" name="optionsRadios" required>
<option value="فرد" selected>فرد</option>
<option value="مقاول">مقاول</option>
<option value="شركة">شركة</option>
<option value="الخدمة العامة">الخدمة العامة</option>
</select>
2. Vérifiez l'intégrité du formulaire
Parfois, un problème de validation peut provenir du fait que le formulaire n'est pas correctement soumis, même si le client respecte les règles de validation. Vérifiez que le formulaire est bien envoyé et que le côté serveur prend en compte la validation.

3. Validation JavaScript personnalisée
Si vous utilisez une validation côté client (JavaScript), assurez-vous que le script est correctement configuré et que les champs sont validés avant l'envoi. Voici un exemple simple de validation JavaScript qui vérifie si les champs obligatoires sont remplis avant l'envoi du formulaire :

html
نسخ
تحرير
<script>
document.getElementById("road-permit-form").onsubmit = function(event) {
var nom = document.getElementById("nom").value;
var prenom = document.getElementById("prenom").value;
var optionsRadios = document.getElementById("optionsRadios").value;

if (!nom || !prenom || !optionsRadios) {
alert("الرجاء تعبئة جميع الحقول الإلزامية");
event.preventDefault(); // Empêche l'envoi du formulaire
}
};
</script>
4. Inspectez la console pour d'éventuelles erreurs JavaScript
Ouvrez les outils de développement de votre navigateur (souvent accessibles avec F12), puis allez dans l'onglet "Console" pour voir si des erreurs JavaScript sont signalées lors de la tentative de soumission du formulaire. Cela peut vous donner un indice sur ce qui empêche la validation de fonctionner.

5. Nettoyer le cache et tester dans différents navigateurs
Le problème pourrait aussi être dû à un problème de cache ou d'incompatibilité du navigateur. Essayez de vider le cache de votre navigateur ou de tester dans un autre navigateur pour vérifier si le problème persiste.

6. Serveur et Validation Backend
Assurez-vous également que la validation est prise en compte côté serveur. Par exemple, si vous utilisez Flask avec Jinja2, vous pouvez valider les champs côté serveur et renvoyer une erreur si un champ est manquant.

Si tout semble correct côté front-end et côté serveur, vous pouvez aussi tester avec un formulaire plus simple pour isoler le problème.







أنت قلت:
Nom du demandeur: None
Prénom du demandeur: None
Date de naissance (chaîne): None
Lieu de naissance: None
Sexe: None
Adresse: None
Téléphone: None
Fax: None
Email: None
Type de demandeur: None
Erreur: Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires
127.0.0.1 - - [03/Mar/2025 10:15:10] "POST /submit HTTP/1.1" 400 -
قال ChatGPT:
L'erreur "Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires" survient parce que les valeurs de ces champs sont envoyées comme None, ce qui signifie qu'elles ne sont pas correctement transmises au serveur. Voici quelques pistes pour résoudre ce problème :

1. Vérifiez le nom des champs dans le formulaire
Assurez-vous que les noms des champs dans votre formulaire correspondent exactement aux noms utilisés dans votre code de validation backend.

Par exemple, dans le formulaire HTML, vous avez les éléments suivants :
html
نسخ
تحرير
<input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك" required>
<input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك" required>
<select class="form-control" id="optionsRadios" name="optionsRadios" required>
Mais dans le serveur, vous devez vous assurer que vous récupérez ces valeurs de la manière suivante :

python
نسخ
تحرير
nom = request.form.get('nom')
prenom = request.form.get('prenom')
type_demandeur = request.form.get('optionsRadios')
Vérifiez également que le formulaire envoie bien les données via la méthode POST.

2. Vérifiez si les champs sont bien remplis avant l'envoi
Avant d'envoyer les données du formulaire, vous pouvez ajouter une vérification côté client pour voir si les champs sont vides :

html
نسخ
تحرير
<script>
document.getElementById("road-permit-form").onsubmit = function(event) {
var nom = document.getElementById("nom").value;
var prenom = document.getElementById("prenom").value;
var type_demandeur = document.getElementById("optionsRadios").value;

if (!nom || !prenom || !type_demandeur) {
alert("الرجاء تعبئة جميع الحقول الإلزامية");
event.preventDefault(); // Empêche l'envoi du formulaire
}
};
</script>
3. Vérifiez les logs côté serveur
Dans votre log, vous obtenez :

mathematica
نسخ
تحرير
Nom du demandeur: None
Prénom du demandeur: None
Date de naissance (chaîne): None
Lieu de naissance: None
Sexe: None
Adresse: None
Téléphone: None
Fax: None
Email: None
Type de demandeur: None
Cela signifie que le formulaire n'a pas transmis ces valeurs au serveur. Une bonne pratique serait de vérifier dans les logs si les données sont présentes dans le request.form avant de les utiliser. Par exemple :

python
نسخ
تحرير
@app.route('/submit', methods=['POST'])
def submit():
nom = request.form.get('nom')
prenom = request.form.get('prenom')
type_demandeur = request.form.get('optionsRadios')

# Vérifiez si les valeurs sont vides
if not nom or not prenom or not type_demandeur:
return 'Les champs "nom", "prenom" et "type_demandeur" sont obligatoires', 400

# Traitez les données si elles sont présentes
# ...
4. Confirmez que le formulaire est bien soumis en POST
Assurez-vous que le formulaire est bien soumis en méthode POST. Parfois, un bouton "submit" peut être accidentellement configuré pour soumettre en GET, ce qui pourrait entraîner l'absence des données dans le request.form.

Voici un exemple de bouton de soumission correctement configuré :

html
نسخ
تحرير
<button type="submit" class="btn btn-primary">Envoyer</button>
5. Vérifiez le champ name dans le formulaire
Les valeurs des champs sont envoyées par leur attribut name. Assurez-vous que le name des champs est correct, comme suit :

html
نسخ
تحرير
<input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك" required>
<input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك" required>
<select class="form-control" id="optionsRadios" name="optionsRadios" required>
6. Utilisation de Flask-WTForms pour la validation
Si vous utilisez Flask et que vous souhaitez simplifier la gestion des formulaires et des erreurs de validation, vous pouvez envisager d'utiliser WTForms pour gérer la validation côté serveur. Cela vous permettra d'avoir des erreurs de validation automatiques et des messages plus clairs.

Conclusion
Les valeurs de vos champs sont None, ce qui signifie qu'il y a probablement un problème avec la soumission du formulaire ou la récupération des données côté serveur. Assurez-vous que le formulaire est correctement soumis en POST, que les champs ont les bons noms et que les données sont récupérées correctement côté serveur.







أنت قلت:
Nom du demandeur: None
Prénom du demandeur: None
Date de naissance (chaîne): None
Lieu de naissance: None
Sexe: None
Adresse: None
Téléphone: None
Fax: None
Email: None
Type de demandeur: None
Erreur: Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires
127.0.0.1 - - [03/Mar/2025 10:17:12] "POST /submit HTTP/1.1" 400 -
(venv) PS D:\autorisation _voiré\backend> malgre que il sont remplire
قال ChatGPT:
Si les champs sont correctement remplis mais que les valeurs sont toujours envoyées comme None, voici plusieurs pistes supplémentaires à explorer pour résoudre le problème :

1. Vérification du nom des champs dans le formulaire et la récupération dans le backend
Assurez-vous que les noms des champs dans le formulaire HTML sont correctement définis et que vous les récupérez avec les bons noms dans le backend.

Dans votre formulaire HTML, vous avez :

html
نسخ
تحرير
<input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك">
<input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك">
<select class="form-control" id="optionsRadios" name="optionsRadios">
Cela doit correspondre exactement à ce que vous récupérez dans le backend avec :

python
نسخ
تحرير
nom = request.form.get('nom')
prenom = request.form.get('prenom')
type_demandeur = request.form.get('optionsRadios')
2. Assurez-vous que le formulaire est soumis en méthode POST
Dans le HTML, vérifiez que votre balise <form> utilise la méthode POST :

html
نسخ
تحرير
<form method="POST" action="/submit">
Cela garantit que les données sont envoyées au serveur via une requête POST.

3. Vérification côté serveur avant la récupération des données
Avant de récupérer les valeurs du formulaire dans votre serveur, vérifiez que le formulaire est bien soumis et que les données sont présentes dans request.form. Vous pouvez également ajouter un petit script de débogage pour imprimer les données du formulaire juste avant la récupération :

python
نسخ
تحرير
@app.route('/submit', methods=['POST'])
def submit():
# Affichez toutes les données du formulaire pour vérifier leur présence
print(request.form)

nom = request.form.get('nom')
prenom = request.form.get('prenom')
type_demandeur = request.form.get('optionsRadios')

print(f"Nom du demandeur: {nom}")
print(f"Prénom du demandeur: {prenom}")
print(f"Type de demandeur: {type_demandeur}")

# Vérifiez si les valeurs sont vides
if not nom or not prenom or not type_demandeur:
return 'Les champs "nom", "prenom" et "type_demandeur" sont obligatoires', 400

# Traitez les données si elles sont présentes
return 'Données reçues avec succès'
Cela vous permettra de voir les valeurs envoyées avec le formulaire dans la console de votre serveur.

4. Ajouter un required aux champs obligatoires dans le formulaire HTML
Vous avez mentionné que les champs sont remplis, mais pour forcer une validation côté client, vous pouvez ajouter l'attribut required à ces champs dans le HTML. Cela garantit que les champs ne peuvent pas être envoyés si vide, ce qui peut vous aider à détecter une erreur côté client avant d'envoyer les données au serveur.

html
نسخ
تحرير
<input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك" required>
<input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك" required>
<select class="form-control" id="optionsRadios" name="optionsRadios" required>
5. Assurez-vous que le formulaire utilise bien des input et select avec les bons noms
Vérifiez que vous n'utilisez pas des éléments input ou select avec des noms différents. Parfois, des erreurs se produisent si l'attribut name dans le HTML n'est pas exactement le même que celui que vous essayez de récupérer côté serveur. Pour être sûr, vous pouvez tester en utilisant les IDs pour récupérer les valeurs (cela peut être une bonne approche si vous avez des doutes).

6. Vérifier si les champs ne sont pas écrasés par des valeurs par défaut
Si des valeurs par défaut sont présentes dans le code JavaScript ou si des valeurs par défaut sont définies côté serveur, assurez-vous qu'elles ne sont pas envoyées en même temps que les données réelles. Par exemple, si le champ nom a une valeur par défaut vide (""), cela pourrait entraîner un envoi d'une chaîne vide au lieu de la valeur attendue.

7. Vérifier l'encodage des données
Vérifiez que le formulaire est envoyé avec l'encodage approprié (UTF-8). Si les données sont mal encodées, cela peut empêcher la transmission correcte des valeurs des champs.

Ajoutez un attribut charset dans la balise <meta> de votre HTML :

html
نسخ
تحرير
<meta charset="UTF-8">
8. Inspecter la requête avec les outils de développement du navigateur
Utilisez les outils de développement de votre navigateur (généralement accessible via F12) pour inspecter la requête POST envoyée lorsque vous soumettez le formulaire. Allez dans l'onglet "Network" et cherchez la requête POST. Vous pouvez voir les données envoyées dans la requête pour vous assurer que les valeurs sont bien présentes.

Conclusion :
Si les champs sont correctement remplis mais que les valeurs sont toujours envoyées comme None, il est fort probable qu'il y ait un problème avec l'envoi ou la récupération des données. L'inspection des valeurs envoyées via les outils de développement du navigateur et l'ajout de quelques vérifications dans votre code backend devraient vous aider à isoler le problème.







أنت قلت:
def submit():
try:
# Récupération des données du demandeur
nom = request.form.get('demandeur_nom')
print(f"Nom du demandeur: {nom}")
prenom = request.form.get('demandeur_prenom')
print(f"Prénom du demandeur: {prenom}")
date_Naissance_str = request.form.get('demandeur_date_naissance')
print(f"Date de naissance (chaîne): {date_Naissance_str}")
lieuNaissance = request.form.get('demandeur_lieu_naissance')
print(f"Lieu de naissance: {lieuNaissance}")
sexe = request.form.get('demandeur_sexe')
print(f"Sexe: {sexe}")
adresse = request.form.get('demandeur_adresse')
print(f"Adresse: {adresse}")
telephone = request.form.get('demandeur_telephone')
print(f"Téléphone: {telephone}")
fax = request.form.get('demandeur_fax')
print(f"Fax: {fax}")
email = request.form.get('demandeur_email')
print(f"Email: {email}")
type_demandeur = request.form.get('demandeur_type')
print(f"Type de demandeur: {type_demandeur}")

# Validation des champs obligatoires
if not nom or not prenom or not type_demandeur:
print("Erreur: Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires")
return "Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires", 400

if type_demandeur not in TypeDemandeur.__members__:
print(f"Erreur: Type de demandeur invalide: {type_demandeur}")
return "Type de demandeur invalide", 400

# Conversion de la date de naissance
date_Naissance = datetime.datetime.strptime(date_Naissance_str, "%Y-%m-%d").date() if date_Naissance_str else None
print(f"Date de naissance (convertie): {date_Naissance}")

# Vérification si le demandeur existe déjà
existing_demandeur = Demandeur.query.filter_by(nom=nom, prenom=prenom).first()
if existing_demandeur:
print(f"Erreur: Demandeur déjà existant: {existing_demandeur}")
return "Demandeur déjà existant", 400

# Création du nouveau demandeur
new_demandeur = Demandeur(
nom=nom, prenom=prenom, date_Naissance=date_Naissance, lieuNaissance=lieuNaissance,
sexe=sexe, adresse=adresse, telephone=telephone, fax=fax,
email=email, type_demandeur=TypeDemandeur[type_demandeur]
)
print(f"Nouveau demandeur créé: {new_demandeur}")
db.session.add(new_demandeur)
db.session.commit()
print("Demandeur enregistré dans la base de données")


# Redirection après succès
print("Redirection vers la page d'accueil")
return redirect(url_for('index'))

except Exception as e:
db.session.rollback()
print(f"Erreur lors de l'enregistrement : {str(e)}")
return f"Erreur lors de l'enregistrement : {str(e)}", 500

;;;;;;Nom du demandeur: None
Prénom du demandeur: None
Date de naissance (chaîne): None
Lieu de naissance: None
Sexe: None
Adresse: None
Téléphone: None
Fax: None
Email: None
Type de demandeur: None
Erreur: Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires
127.0.0.1 - - [03/Mar/2025 10:17:12] "POST /submit HTTP/1.1" 400 -
(venv) PS D:\autorisation _voiré\backend> malgre que il sont remplire
قال ChatGPT:
Le problème ici semble lié à la récupération des données du formulaire via request.form.get(). Si les valeurs sont affichées comme None malgré le fait que vous remplissiez les champs, il peut y avoir plusieurs raisons à cela. Voici les principales pistes pour résoudre ce problème :

1. Vérification des noms des champs HTML
Les noms des champs dans votre formulaire HTML doivent correspondre exactement à ceux que vous récupérez dans votre backend. Par exemple, si vous avez dans le formulaire HTML :

html
نسخ
تحرير
<input type="text" class="form-control" id="demandeur_nom" name="demandeur_nom" placeholder="أدخل اسمك">
Assurez-vous que le nom est bien demandeur_nom, et que vous utilisez exactement ce nom pour le récupérer dans le backend :

python
نسخ
تحرير
nom = request.form.get('demandeur_nom')
Assurez-vous également que tous les autres champs utilisent des noms cohérents avec ceux récupérés côté serveur.

2. Vérification de la méthode d'envoi du formulaire
Assurez-vous que le formulaire utilise bien la méthode POST pour envoyer les données :

html
نسخ
تحرير
<form method="POST" action="/submit">
Cela garantit que les données sont envoyées au serveur via une requête POST et non par la méthode GET.

3. Vérification de la présence des données dans request.form
Avant d’accéder aux valeurs dans request.form, assurez-vous que ces données sont effectivement envoyées par le formulaire. Vous pouvez ajouter une vérification dans votre code pour afficher le contenu complet de request.form et voir ce qui est réellement envoyé :

python
نسخ
تحرير
@app.route('/submit', methods=['POST'])
def submit():
# Affichez toutes les données envoyées dans le formulaire
print(request.form)

# Récupération des données
nom = request.form.get('demandeur_nom')
prenom = request.form.get('demandeur_prenom')
...
Cela vous permettra de vérifier si les données sont envoyées sous forme de key-value dans la requête.

4. Assurez-vous que le formulaire est envoyé correctement
Vous pouvez inspecter la requête envoyée à votre serveur via les outils de développement de votre navigateur (généralement accessible par F12). Allez dans l'onglet "Network", trouvez la requête POST et vérifiez les données envoyées. Cela vous permettra de confirmer que les données sont bien présentes dans la requête.

5. Vérifier les problèmes côté client (JavaScript)
Si vous avez un code JavaScript qui intervient sur le formulaire avant son envoi (par exemple, pour valider les données ou effectuer des modifications), il pourrait interférer avec l'envoi des données. Assurez-vous qu'aucune donnée n'est modifiée ou supprimée avant l'envoi.

6. Test de base sans validation supplémentaire
Pour éliminer toute cause potentielle d'erreur liée à la validation ou à des problèmes avec le modèle Demandeur, vous pouvez essayer de simplifier votre code en ne vérifiant que les valeurs de base sans validation complexe. Cela vous aidera à vous concentrer sur le problème de récupération des données :

python
نسخ
تحرير
@app.route('/submit', methods=['POST'])
def submit():
# Vérification de la requête envoyée
print(request.form)

nom = request.form.get('demandeur_nom')
prenom = request.form.get('demandeur_prenom')
type_demandeur = request.form.get('demandeur_type')

print(f"Nom: {nom}, Prénom: {prenom}, Type demandeur: {type_demandeur}")

if not nom or not prenom or not type_demandeur:
return "Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires", 400

return "Formulaire soumis avec succès"
Cela vous aidera à diagnostiquer si le problème provient des données envoyées ou d'une autre partie du code.

7. Problèmes avec l’encodage du formulaire
Si les données envoyées contiennent des caractères spéciaux, assurez-vous que l'encodage du formulaire est bien configuré pour UTF-8. Ajoutez ceci dans l'en-tête de votre HTML si ce n'est pas déjà fait :

html
نسخ
تحرير
<meta charset="UTF-8">
Cela garantit que tous les caractères sont correctement encodés, en particulier pour les caractères arabes ou autres caractères spéciaux.

Conclusion
En résumé, vérifiez d'abord la correspondance exacte entre les noms des champs dans le formulaire HTML et ceux utilisés dans le backend, puis inspectez la requête POST envoyée pour vérifier que les données sont bien envoyées. Si cela ne fonctionne toujours pas, testez un code simplifié pour vérifier que le problème se trouve bien dans la récupération des données.
 

ChatGPT Alger

عضو نشيط
المشاركات
72
مستوى التفاعل
3
النقاط
6
4o

أنت قلت:​

@app.route('/submit', methods=['POST']) def submit(): try: # Récupération des données du demandeur nom = request.form.get('demandeur_nom') print(f"Nom du demandeur: {nom}") prenom = request.form.get('demandeur_prenom') print(f"Prénom du demandeur: {prenom}") date_Naissance_str = request.form.get('demandeur_date_naissance') print(f"Date de naissance (chaîne): {date_Naissance_str}") lieuNaissance = request.form.get('demandeur_lieu_naissance') print(f"Lieu de naissance: {lieuNaissance}") sexe = request.form.get('demandeur_sexe') print(f"Sexe: {sexe}") adresse = request.form.get('demandeur_adresse') print(f"Adresse: {adresse}") telephone = request.form.get('demandeur_telephone') print(f"Téléphone: {telephone}") fax = request.form.get('demandeur_fax') print(f"Fax: {fax}") email = request.form.get('demandeur_email') print(f"Email: {email}") type_demandeur = request.form.get('demandeur_type') print(f"Type de demandeur: {type_demandeur}") # Validation des champs obligatoires if not nom or not prenom or not type_demandeur: print("Erreur: Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires") return "Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires", 400 if type_demandeur not in TypeDemandeur.__members__: print(f"Erreur: Type de demandeur invalide: {type_demandeur}") return "Type de demandeur invalide", 400 # Conversion de la date de naissance date_Naissance = datetime.datetime.strptime(date_Naissance_str, "%Y-%m-%d").date() if date_Naissance_str else None print(f"Date de naissance (convertie): {date_Naissance}") # Vérification si le demandeur existe déjà existing_demandeur = Demandeur.query.filter_by(nom=nom, prenom=prenom).first() if existing_demandeur: print(f"Erreur: Demandeur déjà existant: {existing_demandeur}") return "Demandeur déjà existant", 400 # Création du nouveau demandeur new_demandeur = Demandeur( nom=nom, prenom=prenom, date_Naissance=date_Naissance, lieuNaissance=lieuNaissance, sexe=sexe, adresse=adresse, telephone=telephone, fax=fax, email=email, type_demandeur=TypeDemandeur[type_demandeur] ) print(f"Nouveau demandeur créé: {new_demandeur}") db.session.add(new_demandeur) db.session.commit() print("Demandeur enregistré dans la base de données") # Redirection après succès print("Redirection vers la page d'accueil") return redirect(url_for('index')) except Exception as e: db.session.rollback() print(f"Erreur lors de l'enregistrement : {str(e)}") return f"Erreur lors de l'enregistrement : {str(e)}", 500 ;;; <div class="col-md-12"> <div class="card"> <div class="card-header"> <h5 class="card-title">المعلومات الشخصية للمستفيد</h5> </div> <div class="card-body"> <div class="row"> <div class="form-group col-md-4"> <label for="optionsRadios">هل أنت:</label> <select class="form-control" id="optionsRadios" name="optionsRadios"> <option value="فرد" selected>فرد</option> <option value="مقاول">مقاول</option> <option value="شركة">شركة</option> <option value="الخدمة العامة">الخدمة العامة</option> </select> </div> <div class="form-group col-md-4"> <label for="nom" style="font-weight:600;">الاسم</label> <input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك"> </div> <div class="form-group col-md-4"> <label for="prenom" style="font-weight:600;">اللقب</label> <input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك"> </div> </div> <div class="row"> <div class="form-group col-md-4"> <label for="dateNaissance" style="font-weight:600;">تاريخ الميلاد</label> <input type="date" class="form-control" id="dateNaissance" name="dateNaissance"> </div> <div class="form-group col-md-4"> <label for="lieuNaissance" style="font-weight:600;">مكان الميلاد</label> <input type="text" class="form-control" id="lieuNaissance" name="lieuNaissance" placeholder="أدخل مكان الميلاد"> </div> <div class="form-group col-md-4"> <label for="adresse" style="font-weight:600;">العنوان</label> <input type="text" class="form-control" id="adresse" name="adresse" placeholder="أدخل العنوان"> </div> </div> <div class="row"> <div class="form-group col-md-4"> <label for="tel" style="font-weight:600;">رقم هاتف المحمول</label> <input type="tel" class="form-control" id="tel_mobile" name="tel_mobile" placeholder="أدخل رقم الهاتف المحمول"> </div> <div class="form-group col-md-4"> <label for="tel_office" style="font-weight:600;">رقم هاتف المكتب</label> <input type="tel" class="form-control" id="tel_office" name="tel_office" placeholder="أدخل رقم هاتف المكتب"> </div> <div class="form-group col-md-4"> <label for="email" style="font-weight:600;">البريد الإلكتروني</label> <input type="email" class="form-control" id="email" name="email" placeholder="أدخل البريد الإلكتروني"> </div> </div> <div class="row"> <div class="form-check col-md-4"> <label>الجنس</label><br/> <label class="form-radio-label"> <input class="form-radio-input" type="radio" name="gender" value="ذكر" checked> <span class="form-radio-sign">ذكر</span> </label> <label class="form-radio-label ml-3"> <input class="form-radio-input" type="radio" name="gender" value="أنثى"> <span class="form-radio-sign">أنثى</span> </label> </div> <div class="form-check col-md-4"> <label>إذا كان المستفيد مختلفًا عن مقدم الطلب</label><br/> <label class="form-radio-label ml-3"> <input type="radio" class="form-radio-input" name="beneficiary_type" value="yes" id="yes"> <span class="form-radio-sign">نعم</span> </label> <label class="form-radio-label ml-3"> <input type="radio" class="form-radio-input" name="beneficiary_type" value="no" id="no"> <span class="form-radio-sign">لا</span> </label> </div> </div> </div> </div> </div> <div class="col-md-12"> <div class="card"> <div class="card-header"> <h5 class="card-title">المعلومات الشخصية للمستفيد</h5> </div> <div class="card-body"> <div class="row"> <div class="form-group col-md-4"> <label for="optionsRadios">هل أنت:</label> <select class="form-control" id="optionsRadios" name="optionsRadios"> <option value="فرد" selected>فرد</option> <option value="مقاول">مقاول</option> <option value="شركة">شركة</option> <option value="الخدمة العامة">الخدمة العامة</option> </select> </div> <div class="form-group col-md-4"> <label for="nom" style="font-weight:600;">الاسم</label> <input type="text" class="form-control" id="nom" name="nom" placeholder="أدخل اسمك"> </div> <div class="form-group col-md-4"> <label for="prenom" style="font-weight:600;">اللقب</label> <input type="text" class="form-control" id="prenom" name="prenom" placeholder="أدخل لقبك"> </div> </div> <div class="row"> <div class="form-group col-md-4"> <label for="dateNaissance" style="font-weight:600;">تاريخ الميلاد</label> <input type="date" class="form-control" id="dateNaissance" name="dateNaissance"> </div> <div class="form-group col-md-4"> <label for="lieuNaissance" style="font-weight:600;">مكان الميلاد</label> <input type="text" class="form-control" id="lieuNaissance" name="lieuNaissance" placeholder="أدخل مكان الميلاد"> </div> <div class="form-group col-md-4"> <label for="adresse" style="font-weight:600;">العنوان</label> <input type="text" class="form-control" id="adresse" name="adresse" placeholder="أدخل العنوان"> </div> </div> <div class="row"> <div class="form-group col-md-4"> <label for="tel" style="font-weight:600;">رقم هاتف المحمول</label> <input type="tel" class="form-control" id="tel_mobile" name="tel_mobile" placeholder="أدخل رقم الهاتف المحمول"> </div> <div class="form-group col-md-4"> <label for="tel_office" style="font-weight:600;">رقم هاتف المكتب</label> <input type="tel" class="form-control" id="tel_office" name="tel_office" placeholder="أدخل رقم هاتف المكتب"> </div> <div class="form-group col-md-4"> <label for="email" style="font-weight:600;">البريد الإلكتروني</label> <input type="email" class="form-control" id="email" name="email" placeholder="أدخل البريد الإلكتروني"> </div> </div> <div class="row"> <div class="form-check col-md-4"> <label>الجنس</label><br/> <label class="form-radio-label"> <input class="form-radio-input" type="radio" name="gender" value="ذكر" checked> <span class="form-radio-sign">ذكر</span> </label> <label class="form-radio-label ml-3"> <input class="form-radio-input" type="radio" name="gender" value="أنثى"> <span class="form-radio-sign">أنثى</span> </label> </div> <div class="form-check col-md-4"> <label>إذا كان المستفيد مختلفًا عن مقدم الطلب</label><br/> <label class="form-radio-label ml-3"> <input type="radio" class="form-radio-input" name="beneficiary_type" value="yes" id="yes"> <span class="form-radio-sign">نعم</span> </label> <label class="form-radio-label ml-3"> <input type="radio" class="form-radio-input" name="beneficiary_type" value="no" id="no"> <span class="form-radio-sign">لا</span> </label> </div> </div> </div> </div> </div> make Les noms des champs dans votre formulaire HTML doivent correspondre exactement à ceux que vous récupérez dans votre backend

قال ChatGPT:​

Il semble que le problème principal vient du fait que vous utilisez des noms de champs dans votre formulaire HTML qui ne correspondent pas à ceux utilisés dans votre code Python.

Résolution du problème​

Les noms dans les balises <input> et <select> de votre HTML doivent correspondre exactement aux clés que vous utilisez dans request.form.get().
Voici quelques points clés à corriger dans votre code :
  1. Mise à jour des name dans le formulaire HTML :
    Par exemple, dans votre code HTML, le champ nom a le name="nom", mais dans votre code Python, vous utilisez request.form.get('demandeur_nom'). Il faut donc que les noms dans le formulaire HTML correspondent exactement à ceux que vous utilisez dans request.form.get().
    Modifiez votre HTML comme suit (en changeant le nom des champs pour qu'ils correspondent à ce que vous attendez dans le backend) :
    html
    نسختحرير
    <input type="text" class="form-control" id="demandeur_nom" name="demandeur_nom" placeholder="أدخل اسمك">
    <input type="text" class="form-control" id="demandeur_prenom" name="demandeur_prenom" placeholder="أدخل لقبك">
    <input type="date" class="form-control" id="demandeur_date_naissance" name="demandeur_date_naissance">
    <input type="text" class="form-control" id="demandeur_lieu_naissance" name="demandeur_lieu_naissance" placeholder="أدخل مكان الميلاد">
    <input type="text" class="form-control" id="demandeur_adresse" name="demandeur_adresse" placeholder="أدخل العنوان">
    <input type="tel" class="form-control" id="demandeur_telephone" name="demandeur_telephone" placeholder="أدخل رقم الهاتف المحمول">
    <input type="tel" class="form-control" id="demandeur_fax" name="demandeur_fax" placeholder="أدخل رقم هاتف المكتب">
    <input type="email" class="form-control" id="demandeur_email" name="demandeur_email" placeholder="أدخل البريد الإلكتروني">
  2. Changement de gender et beneficiary_type :
    Vous devez également vous assurer que les boutons radio pour gender et beneficiary_type sont bien récupérés avec les bons noms. Vous pouvez les modifier de la manière suivante :
    html
    نسختحرير
    <input class="form-radio-input" type="radio" name="demandeur_sexe" value="ذكر" checked>
    <input class="form-radio-input" type="radio" name="demandeur_sexe" value="أنثى">

    <input type="radio" class="form-radio-input" name="demandeur_type" value="فرد" checked>
    <input type="radio" class="form-radio-input" name="demandeur_type" value="مقاول">
    <input type="radio" class="form-radio-input" name="demandeur_type" value="شركة">
    <input type="radio" class="form-radio-input" name="demandeur_type" value="الخدمة العامة">
    Vous récupérez ensuite ces valeurs dans votre code Python avec request.form.get('demandeur_sexe') et request.form.get('demandeur_type').
  3. Ajouter des vérifications dans le formulaire HTML :
    Vous pourriez également vouloir ajouter des validations côté client (JavaScript) ou utiliser des attributs HTML comme required pour forcer la saisie des champs obligatoires.

Code Python révisé​

Votre code Python pour récupérer ces données devient donc :
python
نسختحرير
@app.route('/submit', methods=['POST'])
def submit():
try:
# Récupération des données du demandeur
nom = request.form.get('demandeur_nom')
print(f"Nom du demandeur: {nom}")
prenom = request.form.get('demandeur_prenom')
print(f"Prénom du demandeur: {prenom}")
date_Naissance_str = request.form.get('demandeur_date_naissance')
print(f"Date de naissance (chaîne): {date_Naissance_str}")
lieuNaissance = request.form.get('demandeur_lieu_naissance')
print(f"Lieu de naissance: {lieuNaissance}")
sexe = request.form.get('demandeur_sexe')
print(f"Sexe: {sexe}")
adresse = request.form.get('demandeur_adresse')
print(f"Adresse: {adresse}")
telephone = request.form.get('demandeur_telephone')
print(f"Téléphone: {telephone}")
fax = request.form.get('demandeur_fax')
print(f"Fax: {fax}")
email = request.form.get('demandeur_email')
print(f"Email: {email}")
type_demandeur = request.form.get('demandeur_type')
print(f"Type de demandeur: {type_demandeur}")

# Validation des champs obligatoires
if not nom or not prenom or not type_demandeur:
print("Erreur: Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires")
return "Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires", 400

if type_demandeur not in TypeDemandeur.__members__:
print(f"Erreur: Type de demandeur invalide: {type_demandeur}")
return "Type de demandeur invalide", 400

# Conversion de la date de naissance
date_Naissance = datetime.datetime.strptime(date_Naissance_str, "%Y-%m-%d").date() if date_Naissance_str else None
print(f"Date de naissance (convertie): {date_Naissance}")

# Vérification si le demandeur existe déjà
existing_demandeur = Demandeur.query.filter_by(nom=nom, prenom=prenom).first()
if existing_demandeur:
print(f"Erreur: Demandeur déjà existant: {existing_demandeur}")
return "Demandeur déjà existant", 400

# Création du nouveau demandeur
new_demandeur = Demandeur(
nom=nom, prenom=prenom, date_Naissance=date_Naissance, lieuNaissance=lieuNaissance,
sexe=sexe, adresse=adresse, telephone=telephone, fax=fax,
email=email, type_demandeur=TypeDemandeur[type_demandeur]
)
print(f"Nouveau demandeur créé: {new_demandeur}")
db.session.add(new_demandeur)
db.session.commit()
print("Demandeur enregistré dans la base de données")

# Redirection après succès
print("Redirection vers la page d'accueil")
return redirect(url_for('index'))

except Exception as e:
db.session.rollback()
print(f"Erreur lors de l'enregistrement : {str(e)}")
return f"Erreur lors de l'enregistrement : {str(e)}", 500

Conclusion​

Le problème réside dans l'incohérence entre les noms des champs dans le formulaire HTML et ceux que vous utilisez dans le backend. Une fois que vous vous assurez que tous les noms des champs dans HTML correspondent à ceux que vous récupérez dans request.form.get() en Python, le problème devrait être résolu.

4o

أنت قلت:​

127.0.0.1 - - [03/Mar/2025 10:22:47] "GET /static/assets/js/core/bootstrap.min.js HTTP/1.1" 304 - Nom du demandeur: None Prénom du demandeur: None Date de naissance (chaîne): None Lieu de naissance: None Sexe: None Adresse: None Téléphone: None Fax: None Email: None Type de demandeur: None Erreur: Les champs 'nom', 'prenom' et 'type_demandeur' sont obligatoires 127.0.0.1 - - [03/Mar/2025 10:23:07] "POST /submit HTTP/1.1" 400 - (venv) PS D:\autorisation _voiré\backend> le meme probleme

قال ChatGPT:​

L'erreur indiquée montre que les valeurs de tous les champs du formulaire sont None lorsque vous les récupérez dans votre code Python. Cela signifie probablement qu'il y a un problème avec les noms de champ dans le formulaire HTML ou un problème avec la méthode de soumission du formulaire. Voici quelques pistes pour résoudre ce problème :

1. Vérification des noms des champs dans le formulaire HTML

Il semble que les name dans vos champs HTML ne correspondent pas à ceux utilisés dans request.form.get().
Assurez-vous que le nom des champs dans votre formulaire HTML correspond exactement à ceux dans votre backend. Voici les points à vérifier :

Exemples de noms de champs dans le HTML :​

html
نسختحرير
<input type="text" class="form-control" id="demandeur_nom" name="demandeur_nom" placeholder="أدخل اسمك">
<input type="text" class="form-control" id="demandeur_prenom" name="demandeur_prenom" placeholder="أدخل لقبك">
<input type="date" class="form-control" id="demandeur_date_naissance" name="demandeur_date_naissance">
<input type="text" class="form-control" id="demandeur_lieu_naissance" name="demandeur_lieu_naissance" placeholder="أدخل مكان الميلاد">
<input type="text" class="form-control" id="demandeur_adresse" name="demandeur_adresse" placeholder="أدخل العنوان">
<input type="tel" class="form-control" id="demandeur_telephone" name="demandeur_telephone" placeholder="أدخل رقم الهاتف المحمول">
<input type="tel" class="form-control" id="demandeur_fax" name="demandeur_fax" placeholder="أدخل رقم هاتف المكتب">
<input type="email" class="form-control" id="demandeur_email" name="demandeur_email" placeholder="أدخل البريد الإلكتروني">

Assurez-vous que dans votre code Python, vous récupérez les bons noms :​

python
نسختحرير
nom = request.form.get('demandeur_nom')
prenom = request.form.get('demandeur_prenom')
date_Naissance_str = request.form.get('demandeur_date_naissance')
lieuNaissance = request.form.get('demandeur_lieu_naissance')
sexe = request.form.get('demandeur_sexe')
adresse = request.form.get('demandeur_adresse')
telephone = request.form.get('demandeur_telephone')
fax = request.form.get('demandeur_fax')
email = request.form.get('demandeur_email')
type_demandeur = request.form.get('demandeur_type')

2. Vérification de la méthode de soumission du formulaire

Assurez-vous que votre formulaire HTML utilise la méthode POST et qu'il est bien configuré pour envoyer les données.
Exemple de balise <form> :
html
نسختحرير
<form method="POST" action="/submit">
Cela garantit que les données sont envoyées en utilisant la méthode POST au serveur.

3. Vérification dans l'inspecteur du navigateur

Vérifiez que les champs sont effectivement envoyés en inspectant les requêtes HTTP dans l'outil de développement de votre navigateur.
  1. Ouvrez l'outil de développement (F12 ou clic droit → "Inspecter").
  2. Allez dans l'onglet Network.
  3. Soumettez votre formulaire et vérifiez la requête POST envoyée. Vérifiez que toutes les données de votre formulaire (nom, prénom, etc.) sont bien présentes dans la requête.

4. Utilisation de request.form pour la récupération des données

Si tout est correctement configuré, mais que vous avez toujours le problème, ajoutez un débogage pour inspecter les données envoyées via le formulaire.
Ajoutez cette ligne dans votre route de soumission pour inspecter les données :
python
نسختحرير
print(request.form)
Cela vous permettra de voir toutes les clés et valeurs qui sont envoyées dans le formulaire, ce qui peut aider à identifier où le problème se situe.

5. Problème avec la gestion des champs vides ou mal remplis

Si un champ est laissé vide ou mal configuré dans le formulaire HTML, request.form.get() peut renvoyer None. Pour éviter cela, vous pouvez ajouter un peu de code pour vérifier si les champs sont bien envoyés. Par exemple :
python
نسختحرير
nom = request.form.get('demandeur_nom', '').strip()
prenom = request.form.get('demandeur_prenom', '').strip()
# Faites de même pour les autres champs...
Cela garantit que même si un champ est vide, il sera traité correctement et vous pourrez valider sa présence.

6. Vérification du serveur

Parfois, les erreurs peuvent aussi provenir du serveur Flask lui-même. Redémarrez votre serveur Flask (Ctrl+C pour arrêter, puis flask run pour redémarrer).
 
أعلى