Webmaster Hub: sleep + header - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

sleep + header Noter : -----

#1 L'utilisateur est hors-ligne   lemuse 

  • Groupe : Actif
  • Messages : 20
  • Inscrit(e) : 21-février 10

Posté 06 mars 2010 - 17:17

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

#2 L'utilisateur est hors-ligne   jcaron 

  • Groupe : Membre+
  • Messages : 844
  • Inscrit(e) : 15-janvier 08
  • Genre:Homme
  • Localisation:Londres

Posté 06 mars 2010 - 17:40

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

#3 L'utilisateur est hors-ligne   lemuse 

  • Groupe : Actif
  • Messages : 20
  • Inscrit(e) : 21-février 10

Posté 07 mars 2010 - 10:35

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:

Ce message a été modifié par lemuse - 07 mars 2010 - 11:19.

0

#4 L'utilisateur est hors-ligne   lemuse 

  • Groupe : Actif
  • Messages : 20
  • Inscrit(e) : 21-février 10

Posté 07 mars 2010 - 17:50

Voila, cette solution fonctionne :

<meta http-equiv="refresh" content="3;http://ma page a rafraichir" />



.. et merci pour la piste ;)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)