Aller au contenu

sleep + header


lemuse

Sujets conseillés

Bonjour, j'ai un soucis avec ce code, j'aimerais un délai d'affichage de 2 secondes comme indiqué de "Cette oeuvre est effacée du panier", mais j'ai aussi une erreur qui s'affiche.

Le code pour effacer le panier :

<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta http-equiv="imagetoolbar" content="no" />
<link rel="stylesheet" type="text/css" href="artotheque.css" />
<style type="text/css">
<!--
body {
background-image: none;
margin: 20px;
}
td {
background-color: #EFDABD;
padding: 2px;
vertical-align: top;
}
-->
</style>
</head>
<body>
<h1>Votre panier</h1>
<?
if(isset($_GET["del_panier"]))
{
$nombre_oeuvres = count($_SESSION["tableau_panier"]);
$oeuvre_a_supprimer = $_GET["del_panier"];
$occurence = 0;
while($occurence < $nombre_oeuvres)
{
if($_SESSION["tableau_panier"][$occurence]==$oeuvre_a_supprimer)
{
$_SESSION["tableau_panier"][$occurence]="effacé";
}
$occurence++;
}
}
?>

<p style="font-weight: bold;">
Cette oeuvre est effacée du panier.
</p>
<?
sleep(2);
header("Location: panier.php");
?>


</body>
</html>

.. et l'erreur :

Warning: Cannot modify header information - headers already sent by output started at home ...

Après recherche il apparait qu'il ne doit pas y avoir d'html avant le header et je pensais avoir trouvé la solution avec ceci :

<?php
ob_start();
?>
<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta http-equiv="imagetoolbar" content="no" />
<link rel="stylesheet" type="text/css" href="artotheque.css" />
<style type="text/css">
<!--
body {
background-image: none;
margin: 20px;
}
td {
background-color: #EFDABD;
padding: 2px;
vertical-align: top;
}
-->
</style>
</head>
<body>
<h1>Votre panier</h1>
<?
if(isset($_GET["del_panier"]))
{
$nombre_oeuvres = count($_SESSION["tableau_panier"]);
$oeuvre_a_supprimer = $_GET["del_panier"];
$occurence = 0;
while($occurence < $nombre_oeuvres)
{
if($_SESSION["tableau_panier"][$occurence]==$oeuvre_a_supprimer)
{
$_SESSION["tableau_panier"][$occurence]="effacé";
}
$occurence++;
}
}
?>
<p style="font-weight: bold;">
Cette oeuvre est effacée du panier.
</p>
<?
sleep(2);
?>

<?php
header("Location: panier.php");
ob_flush();
?>

</body>
</html>

L'erreur est disparue, mais pas de petit message, ce n'est pas super génant, mais je me demande si ce n'est pas ca qui entraine une erreur dans le calcul des uvre(s) restant dans le panier. Il y a peut etre une solution javascript ? j'en ai tenté une mais sans succès, la temporisation de l'affichage n'est pas respectée, quel que soit le temps imposé.

Merci de vos conseils.

Lien vers le commentaire
Partager sur d’autres sites

Un sleep dans un processus côté serveur c'est une mauvaise idée. Et de toutes façons ta méthode ne peut pas fonctionner: un redirect via Location est forcément immédiat, donc ce que tu fais c'est en fait attendre 2 secondes, puis envoyer le header Location, puis le contenu de ta page (qui n'est jamais affiché puisqu'il y a un redirect).

Quelques options à explorer:

- tu affichages la page avec le message, puis un bout de JS avec un setTimeout et une redirection JS (windows.location.href=nouvelle_url).

- tu inclus un header Refresh avec un délai (Refresh: 2:url=nouvelle_url par exemple)

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Hello Jacques, l'explication sur le couple sleep et header est maintenant claire.

Je vais essayer de mettre en œuvre tes deux options, je suppose qu'elle doivent être installée dans ce même formulaire, à la suite de mon message ?

Étant noob en ce domaine et afin de gagner du temps, pourrais tu m'indiquer la syntaxe exacte de ta seconde option ?

Bonne journée.

Jean-Michel.

Je viens d'essayer ceci, mais c'est mal écrit je pense:

<p style="font-weight: bold;">
Cette oeuvre est effacée du panier.
</p>
<script type="text/javascript">
function Refresh: 3:url='http://www.museedupetitformat.be/artotheque/panier.php';
</script>

:blush:

Modifié par lemuse
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...