1

PHP の「setcookie」に問題があり、解決できません。

C:\Program Files\VertrigoServ\www\vote. 86行目のphp」

ここにファイルがあります.. 86 行目は setcookie ($cookie_name, 1, time()+86400, '/', '', 0); です。これを行う他の方法はありますか??

<html>
<head>
<title>Ranking</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#EEF0FF">
<div align="center"> 
<br/> 
<div align="center"><div id="header"></div></div>
<br/> 
<table width="800" border="0" align="center" cellpadding="5" cellspacing="0" class="mid-table"> 
    <tr><td height="5">
        <center> 
            </tr> 
            </table> 
        </center> 
    </td></tr> 
    <tr><td height="5"></td></tr> 
</table> 
<br/> 
<?php
    include "conf.php";

    $id = $_GET['id'];
    if (!isset($_POST['submitted']))
    {
        if (isset($_GET['id']) && is_numeric($_GET['id']))
        {

                    </div></td></tr> 
                    <tr><td align="center" valign="top"><img src="images/ads/top_banner.png"></td></tr> 
                </table> 
            </form> 
            <?php
        }
        else
        {
            echo '<font color="red">You must select a valid server to vote for it!</font>';
        }
    }
    else
    {
        $kod=$_POST['kod'];
        if($kod!=$_COOKIE[imgcodepage])
        {
            echo "The code does not match";
        }
        else
        {
            $id = mysql_real_escape_string($_POST['id']);
            $query = "SELECT SQL_CACHE id, votes FROM s_servers WHERE id = $id";
            $result = mysql_query($query) OR die(mysql_error());
            $row = mysql_fetch_array($result, MYSQL_ASSOC);
            $votes = $row['votes'];
            $id = $row['id'];
            $cookie_name = 'vote_'.$id;
            $ip = $_SERVER['REMOTE_ADDR'];
            $ltime = mysql_fetch_assoc(mysql_query("SELECT SQL_CACHE `time` FROM `s_votes` WHERE `sid`='$id' AND `ip`='$ip'"));
            $ltime = $ltime['time'] + 86400;
            $time = time();

            if (isset($_COOKIE['vote_'.$id]) OR $ltime > $time)
            {
                echo 'You have already voted in last 24 hours! Your vote is not recorded.';
            }
            else
            {
                $votes++;
                $query = "UPDATE s_servers SET votes = $votes WHERE id = $id";
                $time = time();
                $query2 = mysql_query("INSERT INTO `s_votes` (`ip`, `time`, `sid`) VALUES ('$ip', '$time', '$id')");
                $result = mysql_query($query) OR die(mysql_error());
                setcookie ($cookie_name, 1, time()+86400, '/', '', 0);
            }
        }
    }
?>
<p><a href="index.php">[Click here if you don't want to vote]</a></p><br/>
<p><a href="index.php">Ranking.net</a> &copy; 2010-2011<br> </p> 
</div> 
</body> 
</html> 

どうもありがとう!

4

5 に答える 5

4

and呼び出しの前に出力を行うことはできませんheader()setcookie()

https://stackoverflow.com/search?q=+headers+already+sent+by
https://stackoverflow.com/tags/php/info

出力には、開始マーカー<html>の前の any 、またはコンテンツの anyまたはing が含まれます。もう 1 つの原因は、UTF-8 BOM http://en.wikipedia.org/wiki/Byte_Order_Markです。これは、ほとんどのテキスト エディターでは目に見えて表示されませんが、ファイルの先頭で PHP を混乱させます。<?phpprintecho

于 2011-03-20T00:05:04.447 に答える
2

Cookie を設定するには、ヘッダーをクライアントに送信する必要があり、出力が既に開始されている場合はヘッダーを送信できません。

出力が送信される前に setcookie を呼び出すことができるように、HTML マークアップのに PHP コードを配置する必要があります。また、PHP コードをプレゼンテーションから分離する必要があります。

于 2011-03-20T00:05:23.543 に答える
1

Cookie コードはページの上部に配置する必要があります。より良いレイアウトは次のようになります。

<?php
//include config

//check posted data (included settings cookies)


//set needed variables
?>
<html>
.....

php コードと html を分離することもできます。これは一般的に私がしていることです。私の使用には、通常、ビュークラスまたは(過去に)smarty が含まれます。簡単な例としては、上記の php コードの末尾に次のコードを追加して、html を削除します。

<?php               

  if(empty($tpl)) {
    $tpl = 'index';
  }

  if(file_exists("template/{$tpl}.tpl.php")) {
    include("template/{$tpl}.tpl.php");
  }
  else {
    header('Location: /');
  }

?>

「templates」というディレクトリを作成し、.tpl.php 拡張子で終わるファイルに html コードを追加する必要があります。実際には単なる php ページですが、.tpl. 一部は、マークアップだけであることを覚えておくのに役立ちます。変数を出力できるように、それらをphpページ(htmlではなく)にします

次に、上記のコードのさまざまな部分で、ロードするテンプレートを $tpl に設定します。

これはコードのほんの一部ですが、このデータを分離する方法についての一般的なアイデアが得られるはずです。主な考え方は、すべての html とテキストは、すべてのプログラミング コードが「実行された後」に出力されるということです。

于 2011-03-20T00:23:56.917 に答える
0

あなたがする必要があるのは、あなたがダウンプロセッシングするまですべてのヘッダーを保持するための素晴らしいバッファを作成することです。ob_startがあなたに代わって仕事をします、そしてここにそれへの参照があります。http://php.net/manual/en/function.ob-start.php

すべての異なるヘッダーのロードが終了したら、次のようにob_get_contentsを使用します $text = ob_get_contents(); echo($text); ob_end_clean();

これがお役に立てば幸いです。

于 2011-03-20T00:15:01.313 に答える
0

You can not use PHP to set a cookie after any thing has been outputted, and the html before the first php tag does count as output. to keep to a purely php method you'd have to move the whole part about determining what to put int he cookie and setting it up to the very top. or what I do in situations where that would require to much extra work to do it that way is to have php echo out the JavaScript code to set a cookie. now if you make or get a nice JS cookie setting function and either embed it or link it into the page. then all you have to do is have php echo the function call with the proper data in it at that point. then when the page loads while php still will not set the cookie, but when the browser when it runs the js code it will. and so you get what you want the cookie is set. and you did not have to move the stuff up to the top.

于 2012-04-19T17:58:02.033 に答える