0

各ユーザーが独自のプロファイルを持つソーシャル ネットワーク Web サイトを作成していますが、ログイン時に問題が発生し、プロファイル ページが表示されません。Cookie とセッションを使用しましたが、問題について多くの調査を行いましたが、成功しなかったため、問題は Cookie にあると思います。修正方法がわかりません。誰かが私を助けることができれば、私はそれを感謝します。

profile.php

<?php  
ob_start();
require_once('for members/scripts/global.php'); 

if($logged == 1){
 echo("you need to be loged in to view profiles");
 exit();
}
if(isset($_GET['id'])){
 $id=$_GET['id'];
 $id= preg_replace("#[^0-9]#","",$id);

}else{
$id=$_SESSION['id'];
}
//collect member information
$query = mysql_query("SELECT * FROM members WHERE id='$id'LIMIT 1") or die("could not collect user information ");
$count_mem = mysql_num_rows($query);
if($count_mem == 0){
 echo("the user does not exit");
 exit();

}
while($row = mysql_fetch_array($query)){
  $username = $row['username'];
  $fname = $row['firstname'];
  $lname = $row['lastname'];
  $profile_id= $row['id'];

  if($session_id == $profile_id){
  $owner = true;
  }else{
   $owner = false;

  }

}



?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php print("$fname"); ?> <?php print("$lname"); ?>'s profile</title>
<link href="style/stylesheet.css" type="text/css"/>
</head>

<body>
<div class="container center"> 
<h1><?php print("$username"); ?></h1>
<?php
if($owner == true ){
    header("Location: profile.php");
?>
<!--
<a href="#">edit profile</a><br />
<a href="#">account settings</a><br />
-->
<?php
}else{
    header("Location: index.php");
?>
<!--
<a href="#">private message</a><br />
<a href="#">add as friend</a><br />
--> 
<?php
}
?>
</div>
</body>
</html>
<?php flush(); ?>

他の関連コードが必要な場合は、お知らせください。ありがとうございました。

4

1 に答える 1

0

表示されたコードにはかなりの数の問題があります。まず、関数を使用しないでくださいmysql_PHP のマニュアルより

この拡張機能は PHP 5.5.0 で非推奨になりました。将来的に削除されるため、新しいコードを書くことはお勧めしません。代わりに、mysqliまたはPDO_MySQL拡張機能を使用する必要があります。

第二に、headerリダイレクトは HTML に埋め込まれています。これは悪い習慣であり、ob_start(). ただし、「profile.php」または「index.php」にリダイレクトする条件があります。幸運にも「index.php」にリダイレクトされます。そうでない場合は、永久に自己リダイレクトするページになります。

変数を設定したかどうか/どこで設定したかはわかりませんが、$session_id見ることができるものから、それnullは決して== $profile_idではなく、$owner常に ですfalse

これにより、while1行をフェッチしているときにループが発生します...削除します。必要はありません。

次に、コード内のいくつかのロジックについて説明します。プロフィールの所有者でなければ表示できない場合は、クエリの直後に確認してください。所有者でない場合は、その後ろheader("Location: index.php"); die;else.

session_start();また、セッション変数を使用する予定がある場合は、ページの上部にあることを確認する必要があります。あなたはob_start();そこまで持っていますが、最後に を呼び出しますflush()ob_start()を読んで、開始したバッファの適切なフラッシュ関数を呼び出します。

于 2013-02-24T01:57:11.317 に答える