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