aide pour ob_start , setcookie et ob_end_flush();

aide pour ob_start , setcookie et ob_end_flush(); - PHP - Programmation

Marsh Posté le 23-04-2005 à 23:52:02    

Bonjour  
Quelqu'un peut il m'aider pour l'utilisation des fonctions ob_start et ob_end_flush()??
 
je les utilise pour pour eviter les problemes de headers liés a la fonction setcookie
 
voici mon code :
 
au debut de ma page PHP j'ai le code suivant
 
<?php
      function cookie1()
      {    
      setcookie('telechargement',$_POST['logincreateur'],null);      
      }    
       
      function cookie2()
      {  
       $req = "SELECT uploader_id FROM uploader WHERE uploader_login ='$pseudo' AND  uploader_pwd='$mdp';";
       $exec = mysql_query($req);
       $result = mysql_fetch_array($exec);
                 
       setcookie('telechargement2',$result[0],null);  
      }
       
?>
 
 
et j'appelle les fonctions (plus loin dans le code HTML) de la façon suivante
 
       ob_start("cookie1" );
       ob_end_flush();
       ob_start("cookie2" );
       ob_end_flush();
 
Probleme, sa ne marche pas
Quelqu'un peut il m'aider ???
 
merci pour l'aide

Reply

Marsh Posté le 23-04-2005 à 23:52:02   

Reply

Marsh Posté le 24-04-2005 à 00:24:58    

Je ne comprends pas ton utilisation d'ob_start.
Tu le mets une fois au tout début du script, tu mets la terminaison tout à la fin du code PHP (si la suite n'est que du HTML, cela n'a pas grande importance qu'il soit avant ou après).
ob_start(); (plusieurs options peuvent être logés entre les parenthèses, je te laisse découvrir ça).
 
---
Ton script.
---
 
ob_end_flush();

Reply

Marsh Posté le 24-04-2005 à 12:08:19    

en fait voici ou j'en suis actuellement :
 
      <?php
          ob_start();
           
          if($_POST['pwdcreateur'] == NULL )
          {
            echo "aucun mot de passe trouvé, vous n'êtes pas identifié sur le site";      
          }    
           
          else if($_POST['logincreateur'] == NULL )
          {
            echo "aucun login trouvé, vous n'êtes pas identifié sur le site";
          }
           
          else  
          {
           
           include("../ressources/fonction.php" );
           connexion();
               
           $pseudo = $_REQUEST['logincreateur'];
           $mdp = $_REQUEST['pwdcreateur'];
           
           $query2 = "SELECT date_banni FROM uploader WHERE uploader_login ='$pseudo' AND uploader_pwd='$mdp';";
           $result2 = mysql_query($query2);
           $row = mysql_fetch_row($result2);
           
           
           if ($row[0] > date('Y-m-d', time()))
           {
            echo 'Vous avez été banni de ce site pour une durée de 15 jours';
            echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../Acceuil.html"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
           }
           
           else if($row[0] == date('Y-m-d', "1970-01-01" ))
           {
            echo 'Vous avez été banni de ce site';
            echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../Acceuil.html"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
           }
           
           else
           {
           
                setcookie('telechargement',$_POST['logincreateur'],null);              
                 
                // creation du cookie avec l'id de la personne venant d'etre crée => Pour savoir qui a mit l'application en Upload
                $req = "SELECT uploader_id FROM uploader WHERE uploader_login ='$pseudo' AND uploader_pwd='$mdp';";
                $exec = mysql_query($req);
                $result = mysql_fetch_array($exec);
                 
                setcookie('telechargement2',$result[0],null);  
                 
               if ($result2)
               {
                echo "Vous êtes identifié, vous pouvez à présent mettre à disposition des applications sur notre site.";
                echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../identifie/Acceuil.php"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
               }
     
               else
               {
                echo "L'identification est incorrecte, vérifiez que vous êtes bien inscrit sur le site ou que vous avez correctement remplit le formulaire d'identification.";
                 echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."Identification.html"."><input type="."submit"." value="."Retour"." /></form>".
                "</div>";
               }
     
              mysql_close();
           }
          }  
          ?>
           
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 
 
  <head>
    <title>
      site de Téléchargement
    </title>    
  </head>
   
   
  <body>
   
    <div id="barre-de-menu">
      <img src="../ressources/ligne.png" alt="ligne"/>
       <?php ob_end_flush();?>
      <p></p>  
    </div>
 
 
mais sa ne marche toujour pas
merci pour ton aide

Reply

Marsh Posté le 24-04-2005 à 13:06:21    

En voyant ton code on constate plusieurs problemes :
-tu n'as pas bien compris comment fonctionne ob_start et ob_flush.
-stocker les mdp en clair dans la base de donnees c'est mal
-avec ton code dans l'etat actuel des choses, dans certains cas tu va avoir du texte avant le debut de ton html. Donc du coup ta page ne sera pas valide.
-tu m'expliques le coup du

Code :
  1. echo "<div id="."bouton-retour".">"

J'ai du rater un episode. Pourquoi tu fais

Code :
  1. id="."bouton-retour"."

cela revient strictement au meme que de faire

Code :
  1. id=bouton-retour

Si tu veux metre des ", tu dois les echaper :

Code :
  1. echo "<div id=\"bouton-retour\" ...";


-

Code :
  1. if($row[0] == date('Y-m-d', "1970-01-01" ))

Personnellement j'eviterais ce genre de choses.
-Pourquoi utilises-tu un formulaire bidon pour rediriger tes visiteurs ?
-as-tu pris en compte les attaques de type "sql-injection" ?
 
Va voir le manuel : http://www.php.net/ob_start


Message édité par cerel le 24-04-2005 à 13:17:22
Reply

Marsh Posté le 24-04-2005 à 15:28:26    

ba en fait c la 1er foi que je fais un site web
mon but n'est pas trop de faire un site hyper securisé.
je developpe pas le site du FBI lol
 
mais il est clair que les histoires de ob_start et ob_flush, je ne comprend pas trop
 
meme avec le manuel
 
merci pour l'aide

Reply

Marsh Posté le 24-04-2005 à 16:30:07    

Y a rien de particulier à comprendre :)
 
Par défaut, le serveur envoit ses infos au navigateur dès qu'elles sont disponibles. Avec les buffers, tu bloques cet envoi en disant "tout ce qu'il y a après le ob_start, tu ne l'envois que quand je te dis ob_flush (ou une de ses variantes)".
 
Donc, tu peux parfaitement executer plusieurs fonctions dans le bloc ob_start/ob_flush, par exemple

Code :
  1. ob_start(); // je bloque l'envoi
  2. cookie1(); // je crée un cookie
  3. cookie2(); // je crée un autre cookie
  4. ob_end_flush(); // j'envoie mon bloc au navigateur


 
Faut juste que tu comprennes bien que dès que tu fais un ob_flush, tu envois quelque chose au navigateur.
 
Les fonctions de callback et les ob_start imbriqués, bon, tu n'en as pas encore l'utilité.

Reply

Marsh Posté le 24-04-2005 à 16:38:36    

j'ai essayé un truc mais sa ne marche toujour pas, toujours la meme erreur, "cannot modify headers ..."
 
Voici mon code actuel :
 
  <body>
   
    <div id="barre-de-menu">
      <img src="../ressources/ligne.png" alt="ligne"/>
      <p></p>  
      <?php
           
          if($_POST['pwdcreateur'] == NULL )
          {
            echo "aucun mot de passe trouvé, vous n'êtes pas identifié sur le site";      
          }    
           
          else if($_POST['logincreateur'] == NULL )
          {
            echo "aucun login trouvé, vous n'êtes pas identifié sur le site";
          }
           
          else  
          {
           
           include("../ressources/fonction.php" );
           connexion();
               
           $pseudo = $_REQUEST['logincreateur'];
           $mdp = $_REQUEST['pwdcreateur'];
           
           $query2 = "SELECT date_banni FROM uploader WHERE uploader_login ='$pseudo' AND uploader_pwd='$mdp';";
           $result2 = mysql_query($query2);
           $row = mysql_fetch_row($result2);
           
           
           if ($row[0] > date('Y-m-d', time()))
           {
            echo 'Vous avez été banni de ce site pour une durée de 15 jours';
            echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../Acceuil.html"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
           }
           
           else if($row[0] == date('Y-m-d', "1970-01-01" ))
           {
            echo 'Vous avez été banni de ce site';
            echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../Acceuil.html"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
           }
           
           else
           {
                ob_start();
                setcookie('telechargement',$_POST['logincreateur'],null);              
                 
                $req = "SELECT uploader_id FROM uploader WHERE uploader_login ='$pseudo' AND uploader_pwd='$mdp';";
                $exec = mysql_query($req);
                $result = mysql_fetch_array($exec);
                 
                setcookie('telechargement2',$result[0],null);  
                ob_end_flush();  
                 
               if ($result2)
               {
                echo "Vous êtes identifié, vous pouvez à présent mettre à disposition des applications sur notre site.";
                echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../identifie/Acceuil.php"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
               }
     
               else
               {
                echo "L'identification est incorrecte, vérifiez que vous êtes bien inscrit sur le site ou que vous avez correctement remplit le formulaire d'identification.";
                 echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."Identification.html"."><input type="."submit"." value="."Retour"." /></form>".
                "</div>";
               }
     
              mysql_close();
           }
          }  
          ?>
     
   </div>
 
merci beaucoup pour ton aide, elle m'est tres utile ;-)

Reply

Marsh Posté le 24-04-2005 à 16:50:30    

Ouais, enfin, elle le serait encore plus si j'étais compris :D
 
En l'occurence, tu ne dois pas envoyer quoique ce soit au navigateur avant ton cookie, rien, nada, et donc sûrement pas une balise HTML :D
 
Ton ob_start doit être la toute première ligne de ton fichier, il doit rien y avoir avant, même pas un espace :)
 
Et corrige les erreurs que t'as signalés Cerel tant que tu y es :)

Reply

Marsh Posté le 24-04-2005 à 16:58:19    

naceroth a écrit :


Ton ob_start doit être la toute première ligne de ton fichier, il doit rien y avoir avant, même pas un espace :)


Si, quand même <?php
 
:D

Reply

Marsh Posté le 24-04-2005 à 16:58:59    

The-Shadow a écrit :

Si, quand même <?php
 
:D


 
Ouais, bon :D

Reply

Marsh Posté le 24-04-2005 à 16:58:59   

Reply

Marsh Posté le 24-04-2005 à 17:02:24    

oui ok
sa marche j'ai plus d'erreur
 
le seul probleme est que les cookie ne sont pas envoyés :-(
 
voici le code actuel :
 
<?php
ob_start();
function cookie1()
{
  setcookie('telechargement',$_POST['logincreateur'],null);      
}
 
function cookie2()
{
  $req = "SELECT uploader_id FROM uploader WHERE uploader_login ='$pseudo' AND uploader_pwd='$mdp';";
  $exec = mysql_query($req);
  $result = mysql_fetch_array($exec);          
  setcookie('telechargement2',$result[0],null);  
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 
 
  <head>
    <title>
      site de Téléchargement
    </title>
  </head>
   
   
  <body>
   
    <div id="barre-de-menu">
      <img src="../ressources/ligne.png" alt="ligne"/>
      <p></p>  
      <?php
           
          if($_POST['pwdcreateur'] == NULL )
          {
            echo "aucun mot de passe trouvé, vous n'êtes pas identifié sur le site";      
          }    
           
          else if($_POST['logincreateur'] == NULL )
          {
            echo "aucun login trouvé, vous n'êtes pas identifié sur le site";
          }
           
          else  
          {
           
           include("../ressources/fonction.php" );
           connexion();
               
           $pseudo = $_REQUEST['logincreateur'];
           $mdp = $_REQUEST['pwdcreateur'];
           
           $query2 = "SELECT date_banni FROM uploader WHERE uploader_login ='$pseudo' AND uploader_pwd='$mdp';";
           $result2 = mysql_query($query2);
           $row = mysql_fetch_row($result2);
           
           
           if ($row[0] > date('Y-m-d', time()))
           {
            echo 'Vous avez été banni de ce site pour une durée de 15 jours';
            echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../Acceuil.html"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
           }
           
           else if($row[0] == date('Y-m-d', "1970-01-01" ))
           {
            echo 'Vous avez été banni de ce site';
            echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../Acceuil.html"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
           }
           
           else
           {
                cookie1();
                cookie2();                
                ob_end_flush();  
                 
                $req = "SELECT uploader_id FROM uploader WHERE uploader_login ='$pseudo' AND uploader_pwd='$mdp';";
                $exec = mysql_query($req);
                $result = mysql_fetch_array($exec);
 
               if ($result2)
               {
                echo "Vous êtes identifié, vous pouvez à présent mettre à disposition des applications sur notre site.";
                echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."../identifie/Acceuil.php"."><input type="."submit"." value="."OK"." /></form>".
                "</div>";
               }
     
               else
               {
                echo "L'identification est incorrecte, vérifiez que vous êtes bien inscrit sur le site ou que vous avez correctement remplit le formulaire d'identification.";
                 echo "<div id="."bouton-retour".">".
                  "<form methode="."post"." action="."Identification.html"."><input type="."submit"." value="."Retour"." /></form>".
                "</div>";
               }
     
              mysql_close();
           }
          }  
          ?>
     
   </div>
 
   

Reply

Marsh Posté le 24-04-2005 à 19:25:25    

le probleme ne vien pas des ob_start et ob_flush
 
quand je fais un $_COOKIE['telechargement'] sur la meme page d'envoi de mes cookie, il affiche bien les resultats
 
mais lorsque je l'utilise sur des autres pages, sa n'affiche rien (comme si le contenu du cookie été vide)

Reply

Marsh Posté le 24-04-2005 à 19:43:29    

Dans setcookie, indiques-tu bien la date de validité du cookies ?  

Reply

Marsh Posté le 24-04-2005 à 21:17:34    

Indiques-tu bien également le répertoire du cookies ?


---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 24-04-2005 à 21:20:18    

pour la date d'expiration du cookie , j'ai mit null (Ai je le droit ??) apparament sa marche
 
Quand au reperoire du cookie, je sais pas quoi ou je dois le ranger
 
peux tu m'eclairer à ce sujet ?
 
merci beaucoup pour votre aide

Reply

Marsh Posté le 24-04-2005 à 21:21:44    

jj59 a écrit :

pour la date d'expiration du cookie , j'ai mit null (Ai je le droit ??) apparament sa marche
 
Quand au reperoire du cookie, je sais pas quoi ou je dois le ranger
 
peux tu m'eclairer à ce sujet ?
 
merci beaucoup pour votre aide


Ne pas mettre de date de validité dans un setcookie correspond à vouloir l'effacer. Le répertoire, tu n'y touches pas, ainsi ton cookies sera stocké pour ton URL.

Reply

Marsh Posté le 24-04-2005 à 21:30:14    

meme quand je fais un :
 
setcookie('telechargement',$_POST['logincreateur'],time()+3600);      
 
sa ne marche pas, le cookie parait toujour vide

Reply

Marsh Posté le 24-04-2005 à 21:32:21    

jj59, fais-tu les tests en local ou sur un site internet accessible ?
 
EDIT : ortograf


Message édité par yoyo354 le 24-04-2005 à 21:33:06

---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 24-04-2005 à 21:33:40    

sur un site internet accessible
 
en local mon site marchais nikel, et depuis qu'il est en ligne, j'ai ces problemes liées aux cookie

Reply

Marsh Posté le 25-04-2005 à 21:13:00    

quelqu'un peut il m'aider pour mon probleme.  
Le $_COOKIE est vide sur une page, il n'affiche rien
Alors que si je le met sur la meme page d'envoi des cookie (sur la page ou il y a les setcookie), il m'affiche bien le resultat
 
merci pour l'aide

Reply

Marsh Posté le 25-04-2005 à 21:20:59    

La page sur lequel tu récupères le $_cookie est bien exactement dans le même répertoire que la page qui l'enregistre ? (Je demande, on sait jamais)

Reply

Marsh Posté le 25-04-2005 à 21:25:03    

euuuuuh c imperatif sa ???
 
parce qu'en fait non  
existe t'il un moyen de contourner le probleme ?

Reply

Marsh Posté le 25-04-2005 à 21:26:28    

jj59 a écrit :

euuuuuh c imperatif sa ???
 
parce qu'en fait non  
existe t'il un moyen de contourner le probleme ?


Déjà, met ta page au même niveau, test, si ça fonctionne, ça viendra donc de là et le problème ne sera plus le même. Ne cherche pas une solution à un problème tant que ton nouveau problème n'est qu'une supposition.

Reply

Marsh Posté le 25-04-2005 à 21:37:40    

euh oui tu as raison, le probleme vien de la
sa fonctionne quand je le met dans le meme repertoire
 
Comment dois je faire pour lever le probleme sans devoir tout mettre dans le meme repertoire ?
 
merci pour ton aide

Reply

Marsh Posté le 25-04-2005 à 22:01:35    

jj59 a écrit :

euh oui tu as raison, le probleme vien de la
sa fonctionne quand je le met dans le meme repertoire
 
Comment dois je faire pour lever le probleme sans devoir tout mettre dans le meme repertoire ?
 
merci pour ton aide


Je te renvoie sur la doc de setcookie http://www.nexen.net/docs/php/anno [...] en=cookies
 
Mais sache que tout n'est pas possible avec des cookies et c'est tant mieux pour le respect de la vie privée.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed