【发布时间】:2015-08-08 11:13:41
【问题描述】:
我正在努力在我的网站上使用 $_GET。我已经设置了一个登录页面,登录后用户被重定向到他/她的个人资料。我想创建一个动态 url 变量。我在登录页面上设置了一个会话,并在被重定向到配置文件“echo $_SESSION['username']”后正确回显。但是,当尝试对 $_GET 执行相同操作时,不会显示任何内容。我已经检查了许多教程,即使我完全按照所示进行操作,我也从来没有让它工作。这是我的代码:
登录.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 功能,它似乎在其他地方工作,但这个个人资料页面。
登录.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>
登录与之前相同(减去 ?user= 部分)。从这里我被重定向到个人资料页面。
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 语句作为
if(!isset($_GET['id']))
我得到的只是 Firefox 中的一个错误:
页面未正确重定向 Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。
Chrome 中的这个:
这个网页有一个重定向循环
自周二以来,我已经束手无策,一直在寻找解决方案。我不能像这样继续我的项目。 我真诚地请求你的帮助。我知道这可能会问很多(相当大的代码,嗯),但我真的不知道该怎么做。
正如我之前提到的,我希望允许用户查看其他用户的个人资料。 我从来没有让 $_GET 正常工作,所以我认为这就是原因。现在我只是不知道。
很抱歉,这篇文章很长,我希望有人能帮助我。非常感谢您的帮助。
问候
大卫
【问题讨论】:
-
网址长什么样?
-
在这里发布 var_dump($_SERVER['REQUEST_URI']);
-
尝试将:
ini_set("display_errors", "On"); error_reporting(E_ALL);放在 testprofile.php 的顶部,只是为了检查它是否是错误的。还要确保您指定了 ?username=...&id=...,因为您同时回显了$_GET['username']和$_GET['password'],这意味着它们都必须设置,否则会出错。 -
好的,我试过了,我得到了通知:未定义的索引:用户名(...)。我在 login.php 中设置会话,为什么会这样?
-
David8 这是我得到的:string(16) "/testprofile.php"