8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Sur ma WebApplication, j'ai une page contrat-fiche.php qui permet d'afficher un contrat et ses prestations.
Sur cette page, j'ai ajouté un bouton <div> qui ouvre un modal (css+javascript trouvé sur W3school)...
Ce modal permet à l'utilisateur de saisir un acompte +date de l'acompte via un mini formulaire.
La validation du formulaire fonctionne parfaitement et pointe vers une autre page PHP 'acompte-ajout.php pour enregistrer dans ma bdd les infos saisies.... Tout fonctionne nickel !

La question est : Quand je suis sur cette page acompte-ajout.php et que le traitement de l'insertion en bdd est terminé, comment revenir à ma page contrat-fiche.php car je dois recharger les infos du contrat qui contiennent maintenant un ou des acomptes. (Pour infos les affichages d'acomptes fonctionnent aussi très bien)...
header('Refresh: 3; URL= contrat-fiche.php'); ne semble pas une bonne méthode d'autant qu'il faut que je passe une variable dans le lien contrat-fiche.php?id_contrat=25 par exemple...

J'ai l'impression que ce dont j'ai besoin c'est d'AJAX pour ne pas avoir à recharger la page ?

contrat-fiche.php

<a href="#" id="myBtn">
    <div class ="btn btn-vert">
        ACOMPTE
    </div>
</a>

<div class="modal-body">
                <form method="post" action="acompte-ajout.php">
                    <label for="acompte">Entrez l'acompte reçu :</label>
                    <input class="input-formulaire prix-formulaire" maxlength="7" name="acompte_recu" id="acompte_recu" type="text" required value="" onblur="formatage(this);" onkeypress="return chiffres(event);" autocomplete="off" />
                    <input class="input-formulaire contrat-date" type="date" id="acompte_date" name="acompte_date"" required value="<?php echo date('d/m/Y'); ?>">
                    <input type="hidden" name="id_contrat" value="<?php echo $data_contrat['id_contrat'];?>">
                       
            </div>


acompte-ajout.php

// On vérifie si l'acompte existe :
if (isset($_POST["acompte_recu"])&& $_POST["acompte_recu"]>0){	

	// Connexion à la base de données :
	require ("connexion.php");

	// Récupération des données formulaire :
	$id_contrat= $_POST['id_contrat'];
	$acompte_recu=$_POST['acompte_recu'];
	$acompte_date= $_POST['acompte_date'];
	
	// Enregistrement de l'acompte : 
	$requete = $bdd->prepare('INSERT INTO acomptes(id_contrat, acompte_recu, acompte_date) VALUES(:id_contrat, :acompte_recu, :acompte_date)');

	$requete->execute(array(
		'id_contrat' => $id_contrat,
		'acompte_recu' => $acompte_recu,
	    'acompte_date' => $acompte_date
	));

	// Clôture des requêtes :
        $requete->closeCursor();
}




//########################### M O D A L ###########################
            // Get the modal
            var modal = document.getElementById("myModal");

            // Get the button that opens the modal
            var btn = document.getElementById("myBtn");

            // Get the <span> element that closes the modal
            var span = document.getElementsByClassName("close")[0];

            // When the user clicks the button, open the modal 
            btn.onclick = function() {
              modal.style.display = "block";
            }

            // When the user clicks on <span> (x), close the modal
            span.onclick = function() {
              modal.style.display = "none";
            }

            // When the user clicks anywhere outside of the modal, close it
            window.onclick = function(event) {
              if (event.target == modal) {
                modal.style.display = "none";
              }
            }

Merci d'avance pour votre aide !!!
Modifié par etienne69 (17 Mar 2022 - 15:46)
Merci niuxe pour ton aide...

J'ai fait ce que tu m'as proposé et ça fonctionne effectivement, même plusieurs fois de suite puisque l'on peut saisir plusieurs acomptes ! (malgré le if (!isset($_GET['id_contrat'])){ sur la page de retour !)


<?php
ob_start();
//header("Cache-Control:no-cache");
$referer = ($_SERVER['HTTP_REFERER']); 

. . .  /  . . . 

// Clôture des requettes :
        $requete->closeCursor();
        header("Location: $referer"); 


Ma question est : est-ce que c'est 'pro' -pre de coder comme ça ?
ou serait-il préférable de faire un appel à la page d'enregistrement
avec un truc du genre (non testé) :

$(function() {
    $("#acpte").change(function() {
        var choix = $(this).val();
        $.post("acompte-ajout.php", {
            "acpteSaisi": acompte
        })
        .done(function(data) {
            document.getElementById("acomptes").value = data;                           
        })
        .fail(function() {
            alert('Echec de l'enregistrement de l'acompte !');
        });
    });
});

Modifié par etienne69 (17 Mar 2022 - 08:56)
Modérateur
etienne69 a écrit :
est-ce que c'est 'pro' -pre de coder comme ça ?


À mon tour de te poser les questions suivantes sans que tu aies besoin de me répondre.
Ce que je viens de faire (interrogation personnelle) :
- Est ce que ça fonctionne ?
- Est ce simple à comprendre ? (Demain une personne vient travailler sur le projet. Comprendra-t-il ce que je viens de faire ?)
- Est ce que je me répète ?
- Est ce facilement évolutif ?
- Est ce facilement maintenable ?
Modifié par niuxe (17 Mar 2022 - 14:49)