Bonjour a tous, en fait j'ai une fonction" a" dont l'execution dépend du résultat d'une requete sql, si ce résultat est égal à 1,il est impossible d'executer le codealors je je souhaite faire une nouvelle tentative dans 3 secondes pour savoir pour savoir si la valeur de la requete est passée a 0 ce qui me permettra d'exécuter la suite du code.
pour cela j'utilise la fonction sleep de php dans une fonction "b".

mon problème est que plutot que de m'afficher chaque 3 secondes "traitement impossible" suivi de "nouvelle tentative dans 3 secondes", mon navigateur mouline quelques secondes et m'affiche tout d'un coup 6 fois mes messages"traitement impossible nouvelle tentative dans 3 secondes" puis le message d'erreur suivant :

Fatal error: Maximum execution time of 30 seconds exceeded in C:\Apache24\htdocs\page_de_jeu.php on line 17

pouvez vous svp m'aider a solutionner ce problème.cordialement

function a() {require 'bdd.php';
    $sel = $pdo->prepare("SELECT status_cr FROM status_traitement");
        $sel->execute();
        $sel->setFetchMode(PDO::FETCH_ASSOC);
        $tab=$sel->FETCH();
        echo "<pre>";
  print_r($tab);
echo "</pre>";
if ($tab['status_cr']==1){echo 'traitement impossible pour linstant';b();}

    else{echo 'traitement en cours';}
    ;}

    function b (){echo 'nouvelle tentative dans 3 secondes'; sleep(3); a(); }
a();

Ce que je veux

que chaque 3 secondes s'affiche mes messages d'erreur'' traitement impossible , nouvelle tenative dans 3 secondes" tant que la valeur de ma requete sql ne passe pas a 0.

Ce que j'obtiens

4 réponses


Hello :)

Alors la tu ne bloques pas l'utilisateur pendant 3 secondes, tu bloques le serveur pendant 3secondes

En gros tu doit avoir un bouton submit dans un formulaire, faut le bloquer en js

Ca implique aussi de passer par le mode API pour le formulaire et d'extraire ton code PHP dans un autre fichier qui sera bah un endpooint API

En gros:

/** form.php */

<form id="my_form">
    <button id="submit_button">ok</button>
    <p id="error_message" style="color: red;"></p>
</form>

<script>
    document.getElementById("my_form").addEventListener("click", event => {
        event.preventDefault() // Tu bloques le formulaire

        const disable_submit_button = (disabled) => document.getElementById("submit_button").disabled = disabled

        fetch("./api/submit_form.php") // Tu appelles ton PHP externe
            .then(response => {
                disable_submit_button(true) // Tu bloques le boutton
                setTimeout(disable_submit_button(false), 3000)// Tu débloques dans 3secondes
                return response.json() // Tu retournes la reponse en json pour le prochain then
            })
            .then(response => {
                if(response.succes === true) {
                    window.location.href = "./confirmation.php"
                } else {
                    document.getElementById("error_message").innerHTML = response.message
                }
            })
    })
</script>

/**  /api/submit_form.php */

<?php

function a() {require 'bdd.php';
    $sel = $pdo->prepare("SELECT status_cr FROM status_traitement");
    $sel->execute();
    $sel->setFetchMode(PDO::FETCH_ASSOC);
    $tab=$sel->FETCH();
    echo "<pre>";
    print_r($tab);
    echo "</pre>";
    if ($tab['status_cr']==1) {
        return json_encode([
            "message" => 'traitement impossible pour linstant',
            "success" => false,
        ]);
    }

    return json_encode([
        "message" => 'traitement en cours',
        "success" => false,
    ]);
}

return a();

... Grossomerdo :)

alors là j'étais vraiment a des années lumières du compte en fait sacré merci pour ton aide

De rien ;)

rebonjour popotte et merci encore pour ta réponse, mais j'aurais besoin d'éclaircissements, j'ai essayé d'utiliser javascript dans le but de soltionner le problème mais je fais fasse a deux petits problème actuellement j'ai créé un nouveau sujet , si jamais tu as un peu de temps.... merci d'avance