2015-08-08 129 views
2

我在使用$ _GET在我的網站上掙扎。我已經設置了登錄頁面,登錄後用戶被重定向到他/她的個人資料。我想創建一個動態url變量。我在登錄頁面設置了一個會話,並在重定向到配置文件「echo $ _SESSION ['username']」後正確回聲。但是,當試圖用$ _GET做同樣的事情時,什麼都不顯示。我已經檢查了大量的教程,甚至當我完全按照所顯示的做時,我從來沒有得到這個工作。這裏是我的代碼:

的login.php

<?php 
include ("./Various/header.php"); 
require './Various/connections.php'; 

if(isset($_POST['login'])) { 
     session_start(); 

//Set Variables 
$loginusername = $_POST['userlogin']; 
$loginpassword = $_POST['passwordlogin']; 

if(!empty($loginusername)&& !empty($loginpassword)){ 
    $sql = mysql_query("SELECT * FROM users WHERE username='$loginusername'"); 
    $checkuser=mysql_num_rows($sql); 

    if($checkuser == 1) { 

     $passrow = mysql_fetch_assoc($sql); 
     $checkpass = $passrow['password']; 

     $userdb = $passrow['username']; 
     $iddb = $passrow['id']; 

    if ($checkpass == $loginpassword) 
    { 
     $_SESSION['username'] = $loginusername; 
     $_SESSION['id'] = $iddb; 
     header("Location: testprofile.php?username = $loginusername"); 
     exit(); 

    } 
    else { 
     echo "Password is incorrect"; 
    } 

    } 
    else { 
     echo "$loginusername doesn't exist"; 
    } 
} 
else { 
    echo "Please fill out the fields"; 
} 

} 

?> 


<div style=" width: 400px; margin: 0px auto 0px auto" class="LoginForm"> 
     <table class= "logintable"> 
      <tr><td width="60%" valign="top"> 
        <h3>MySite</h3> 
      <h2>Login</h2> 
       <form action="login.php" method="post"> 
        <input type="text" name="userlogin" size="12" placeholder="Username"/><br/> <br/> 
       <input type="password" name="passwordlogin" size="12" placeholder="Password"/><br/> <br/> 
        <input type="submit" name="login" value="Login!"/> 
        </form> 
       <div id="forgotpassword"> 
    <a href="#">I forgot my password</a> 
    </div> 
      </td> 
      </tr> 
     </table> 

      </div> 

在這個例子中,我創建了一個名爲幾乎空白的個人資料頁面的簡單testprofile.php

testprofile.php

<?php 
session_start(); 
echo $_GET['username']; 
echo $_GET['id']; 

?> 

這沒有給我什麼。但是,如果您這樣做:

<?php 
session_start(); 
echo $_SESSION['username']; 
echo $_SESSION['id']; 

?> 

您可以看到登錄用戶的用戶名和ID。我試着將login_php中的session_start()移到頂部(這就是它的開頭),但它根本沒有幫助。 我可以設置整個用戶個人資料頁面,但用戶無法查看其他用戶的個人資料。這就是爲什麼我現在正在爲此苦苦掙扎。 我希望任何人都可以告訴我,這是一個非常微不足道的錯誤,我無緣無故地摘了我的頭髮。

問候

大衛


好吧,我會貼在我的代碼,因爲這是越來越荒謬。我沒有得到這個$ _GET函數,它似乎在其他地方工作,但這個配置文件頁面。

的login.php

 <?php 
include ("./Various/header.php"); 
require './Various/connections.php'; 

if(isset($_POST['login'])) { 
     session_start(); 

//Set Variables 
$loginusername = $_POST['userlogin']; 
$loginpassword = $_POST['passwordlogin']; 

if(!empty($loginusername)&& !empty($loginpassword)){ 
    $sql = mysql_query("SELECT * FROM users WHERE username='$loginusername'"); 
    $checkuser=mysql_num_rows($sql); 

    if($checkuser == 1) { 

     $passrow = mysql_fetch_assoc($sql); 
     $checkpass = $passrow['password']; 

     $userdb = $passrow['username']; 
     $iddb = $passrow['id']; 

    if ($checkpass == $loginpassword) 
    { 
     $_SESSION['username'] = $loginusername; 
     $_SESSION['id'] = $iddb; 
     header("Location: profile.php"); 
     exit(); 

    } 
    else { 
     echo "Password is incorrect"; 
    } 

    } 
    else { 
     echo "$loginusername doesn't exist"; 
    } 
} 
else { 
    echo "Please fill out the fields"; 
} 

} 

?> 


<div style=" width: 400px; margin: 0px auto 0px auto" class="LoginForm"> 
     <table class= "logintable"> 
      <tr><td width="60%" valign="top"> 
        <h3>MySite</h3> 
      <h2>Login</h2> 
       <form action="login.php" method="post"> 
        <input type="text" name="userlogin" size="12" placeholder="Username"/><br/> <br/> 
       <input type="password" name="passwordlogin" size="12" placeholder="Password"/><br/> <br/> 
        <input type="submit" name="login" value="Login!"/> 
        </form> 
       <div id="forgotpassword"> 
    <a href="#">I forgot my password</a> 
    </div> 
      </td> 
      </tr> 
     </table> 

      </div> 

登錄相同較早(減去?用戶=部分)。從這我重定向到個人資料頁面。

profile.php

<?php 
session_start(); 

include './Various/header.php'; 
require './Various/connections.php'; 

    $username = $_SESSION['username']; 
    $sql = mysql_query("SELECT * FROM users WHERE username='$username'"); 
    $getdata = mysql_fetch_array($sql); 
    $firstname = $getdata['firstname']; 
    $lastname = $getdata['lastname']; 
    $blogname = $getdata['blogname']; 
    $shoutout = $getdata['aboutuser']; 
    $country = $getdata['country']; 
    $profilepic = $getdata['profilephoto']; 
    $year = $getdata['yearofbirth']; 
    $current = date('Y'); 
    $age = $current - $year; 

?> 

<div class="profilepage"> 
<div class="userdetails"> 
<table> 
<tr> 
<td> 
<img src="<?php echo $profilepic ?>"/> 
</td> 

<td> 
    <div id="userinfo"> 
    <h3><?php echo $username?>'s Blog!</h3> 
    </div> 
<a>Name: <?php echo $firstname?> <?php echo $lastname?> </a> 
<a>Age: <?php echo $age ?> </a> 
<a>Country: <?php echo $country ?> </a> 
<a id="shoutout"><?php echo $shoutout ?></a> 

</td> 

</tr> 

</table> 
<div id="blogname"> 
<a><?php echo $blogname ?></a> 
</div> 
</div> 

    <div class="userposts"> 
    <?php 
    //Displaying user's posts 
//connect to DB 
$sql = "SELECT postid, postedby, title, category, LEFT(content, 100) AS content FROM posts WHERE postedby = '$username' 
ORDER BY postid DESC"; 
$result = mysql_query($sql); 

while($row = mysql_fetch_array($result)) { 
    $postid = $row['postid']; 
    $postedby = $row['postedby']; 
    $title = $row['title']; 
    $content = $row['content']; 
    $category = $row['category']; 
    ?> 
    <div id="posts"> 
    <a><?php echo $postedby?></a> 
    <h2><?php echo $title?></h2> 
     <a><?php echo $category?></a><br> 
     <a><?php echo $content . "<a href='post.php?id=$postid'>Read more...</a>"?></a> 
     <br> 
     <hr /> 
     <br> 

     <?php 
} 
?> 
</div> 
</div> 
</div> 

在這裏我得到我想要的數據和它漂亮的一面展示。我似乎無法做的是讓其他用戶查看此用戶的個人資料。我知道我需要製作一個動態的url變量。一個教程,我跟着的指示我做到以下幾點:

if(!isset($_GET['id'])) { 
    header("Location: ?user=".getID($_SESSION['id'])); 
} 

的getID函數如下所示:

function getID($id) { 
    $dataquery = mysql_query("SELECT id FROM users WHERE id='$id'"); 
    while ($row=mysql_fetch_assoc($dataquery)){ 
     return $row['id']; 
    } 
} 

當我這樣做,如果語句

if(!isset($_GET['id'])) 

所有我得到的是Firefox中的錯誤:

頁面沒有正確重定向 Firefox檢測到服務器以永不完整的方式重定向該地址的請求。

而這一次在Chrome:

此網頁有重定向循環

我在我無計可施,並一直在尋找,因爲週二的解決方案。我不能像這樣繼續我的項目。 我真誠地要求你的幫助。我知道可能有很多要求(相當大一部分代碼,呃),但我真的不知道該怎麼做。

正如我前面提到的,我想允許用戶查看其他用戶的配置文件。 我從來沒有得到$ _GET正常工作,所以我認爲這是原因。現在我只是不知道。

很抱歉發了一篇很長的文章,希望有人能幫助我。我非常感謝你的幫助。

問候

大衛

+0

URL的外觀如何? – david8

+0

在這裏發表var_dump($ _ SERVER ['REQUEST_URI']); – david8

+0

嘗試放入:'ini_set(「display_errors」,「On」); error_reporting(E_ALL);'在testprofile.php的頂部,只是爲了檢查它是否是錯誤。還要確保你指定了?username = ...&id = ...,因爲你同時回顯'$ _GET ['username']'和'$ _GET ['password']',這意味着它們都必須被設置,否則會出錯。 – SysVoid

回答

2

的問題是在URL中的間距。

$_GET數組鏈接testprofile.php?username = $loginusername是:

array('username ' => ' $loginusername') 

這樣的關鍵將是'username '和不'username'。要解決這個問題,請確保您的url參數名稱和值中沒有不必要的空格。還請注意,$_GET['id']是空的,因爲在url中沒有傳遞這樣的參數。

+0

作爲@David8建議併發布'var_dump($ _ SERVER ['REQUEST_URI']);' – topher

+0

的結果嘗試過,得到很多錯誤(404)。 – davidb