我正在尝试将$user_id
变量从文件返回到if(isset(...))
语句。我将执行不同的if语句,但只是尝试echo
$user_id
变量来测试我正在设置页面。
<?php
include 'core/init.php';
include 'init.image.php';
protect_page();
include 'includes/overall/overall_header.php';
if(isset($_GET['username']) === true && empty($_GET['username']) === false){
$username = $_GET['username'];
if(user_exists($username) === true){
$user_id = user_id_from_username($username);
$profile_data = user_data($user_id, 'first_name','last_name','email', 'username');
?>
<h1><?php echo $profile_data['first_name']; ?>'s Yor Page</h1>
<div id="navWrapper">
<ul>
<li>
<a href="#"><img src="uploads/profile/blank_profile.gif" width="150" height="150" id="blank_profile"></a>
</li>
<nav>
<ul>
<li>
<a href="<?php echo $profile_data['username'];?>?action=albums">Albums</a>
</li>
<li>
<a href="<?php echo $profile_data['username'];?>?action=music">Music</a>
</li>
</ul>
</nav>
</ul>
</div>
<?php
if(isset($_GET['action']) && $_GET['action']=='albums'){
$albums = get_profile_albums($user_id);
if(empty($albums)){
echo 'No Albums';
}else{
foreach($albums as $album){
if (empty($album['image'])) {
$album['image'] = 'uploads/profile/blank_profile.gif';
}
?>
<p><?php echo $album['name'],' (', $album['count'], ')'?> <br />
<a href="<?php echo $profile_data['username'];?>?action=album_id=<?php echo $album['id'];?>">
<img src="uploads/thumbs/<?php echo $album['id'];?>/<?php echo $album['image'];?>" />
</a><br />
<?php echo $album['description'];?>...<br />
</p>
<?php
}
}
}
if(isset($_GET['action']) && $_GET['action']=='album_id=$album['id']'){
echo $user_id;
}
if(isset($_GET['action']) && $_GET['action']=='music'){
echo'<h1>Music</h1>';
}
}else{
echo 'Sorry, that user doesn\'t exist';
}
}else{
header('Location: index.php');
exit();
}
include 'includes/overall/overall_footer.php';
?>
答案 0 :(得分:3)
单引号不解析字符串,而是双引号。例如:
$album_id = 1;
echo 'album_id=$album_id ';
echo "album_id=$album_id";
将导致album_id=$album_id album_id=1
因此,$_GET['action']=='album_id=$album_id'
正在检查$_GET['action']
是否等于'album_id=$album_id'
而不是$album_id
的评估结果。
您的检查应该更加符合以下几点:
if (/* ... */ && $_GET['action']=="album_id=$album_id") {
修改:建议。
您应该检查$_GET['action']
一次并存储$action
。从那里创建一个if/else if/else
语句,检查每种可能的操作类型(音乐,专辑,专辑等)。如果某种操作需要额外的用户提供的数据,请在相应的if块中包含该数据。例如:
$action = $_GET['action'];
// URL: /script.php?action=albums
if ($action == 'albums') {
// ...
}
// URL: /script.php?action=album&album_id=12
else if ($action == 'album') {
if (!empty($_GET['album_id'])) {
$album_id = $_GET['album_id'];
echo "User with id $user_id is trying to access album with id $album_id";
}
// ...
}
// ...
不再有$_GET['action']=="album_id=$album_id"
答案 1 :(得分:0)
您正在正确传递变量。
我在以下几行中更关注的是:
if(isset($_GET['action']) && $_GET['action']=='album_id=$album_id'){
'album_id=$album_id'
看起来并不正确,这可能就是为什么你的if没有解雇...看起来你正试图使用包含在单引号中的变量$album_id
而不会替换该值而是保持$album_id
。我不确定这是不是你想要的,但如果不是它可能是你问题的根源。