fonction sleep de php et erreur maximum exceed

Par hallowin5, il y a 2 ans


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

popotte, il y a 2 ans

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 :)

hallowin5, il y a 2 ans

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

popotte, il y a 2 ans

De rien ;)

hallowin5, il y a 2 ans

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