Page 1 of 1
Comparison operator (newb question)
Posted: Fri Dec 03, 2004 7:51 am
by iandunn
Hi, I'm new to PHP (but not programming) and I can't get this comparison to work. $IDLevel is pulled from a MySQL database, and if I echo it it displays as "Administrator" (without the quotes), but for some reason the if($IDLevel == "Administrator") keeps returning false. I've tried using single quotes and no quotes, and also setting up a second variable for the right-hand operand, but nothing works. What am I doing wrong?
Code: Select all
$result = $dblink->query("select level from accounts where id=$loginID");
$row = $result->fetch_row();
$IDlevel = $rowї0];
$result->close();
Code: Select all
<?php if($IDLevel == "Administrator")
{ ?>
<div class="articles-admin">ї<a href="edit-article.php?id=<?php echo $rowї0] ?>">edit</a>]</div>
<?php
}
?>
Thanks

Posted: Fri Dec 03, 2004 8:04 am
by Archy
I dont use -> in PHP and MySQL, I type it all out, I find it easier.
Code: Select all
<?PHP
...
...
$row = mysql_fetch_assoc($result);
$IDLevel = $row[0];
/* I usually use the column name, as if you change the order, or add a new column in,
then you have to recode everything again. If you do, do this, then remember to add
single quotes around column name, so it would be: $IDLevel = $row['column'];
*/
if($IDLevel == "Administrator"){
?>
<div class="articles-admin">[<a href="edit-article.php?id=<?php echo"$IDLevel"; ?>">edit</a>]</div>
<?PHP
}
?>
Posted: Fri Dec 03, 2004 9:48 am
by pickle
Try:
You might have some whitespace surrounding $IDLevel - this should show you.
Posted: Tue Dec 07, 2004 12:04 pm
by iandunn
There isn't any whitespace in the variable. Here's the entire script and output. I can't figure out why the comparison on line 48 isn't returning true.
Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>CPS310 Project :: View articles</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css" />
<body>
<?php
include 'dblink.inc.php';
$loginID = 1; /* temp until login system in place */
$result = $dblink->query("select level from accounts where id=$loginID");
$row = $result->fetch_array(MYSQLI_ASSOC);
$IDlevel = $row["level"];
echo $IDlevel; // temp
$result->close();
?>
<div class="container">
<div class="articles-header">
<div class="articles-header-title">Title</div>
<div class="articles-header-author">Author</div>
<div class="articles-header-date">Date</div>
<?php if($IDLevel == $IDLevel)
{ ?>
<div class="articles-header-admin">Admin</div>
<?php
}
?>
</div> <!-- end articles-header -->
<div class="articles">
<?php
$result = $dblink->query("select id, title, author, postdate from articles");
while($row = $result->fetch_array(MYSQLI_ASSOC))
{
$temp = $row["author"];
$author = $dblink->query("select username from accounts where id=$temp");
$authorRow = $author->fetch_array(MYSQLI_ASSOC);
$author->close();
?>
<div class="articles-title"><a href="view-article.php?id=<?php printf($row["id"]); ?>"><?php printf($row["title"]); ?></a></div>
<div class="articles-author"><a href="view-account.php?id=<?php printf($row["author"]); ?>"><?php printf($authorRow["username"]); ?></a></div>
<div class="articles-date"><?php printf($row["postdate"]); ?></div>
<?php if($IDLevel == "Administrator") //or author?
{ ?>
<div class="articles-admin">[<a href="edit-article.php?id=<?php printf($row["id"]); ?>">edit</a>]</div>
<?php
}
?>
<div class="articles-separator"></div>
<?php
}
$result->close();
?>
</div> <!-- end articles -->
</div> <!-- end container -->
<?php $dblink->close(); ?>
</body>
</html>

(image is a link to larger version)
Posted: Tue Dec 07, 2004 12:12 pm
by rehfeld
i noticed this
i dont know if thats just temporary for debugiing,
but that will always be true, and as such is pointless. but thats def not your problem here. just wanted to point it out.
what happens when you replace this
Code: Select all
<?php if($IDLevel == "Administrator") //or author?
w/ this
Code: Select all
echo $IDLevel;
<?php if($IDLevel == "Administrator") //or author?
whats the output of the echo?
and to make it match Author too, you can do like this
Code: Select all
<?php if($IDLevel == "Administrator" || $IDLevel == "Author") //or author?
keep in mind those comparisons ARE case sensitive
Posted: Tue Dec 07, 2004 12:24 pm
by iandunn
The $IDLevel == $IDLevel is just for debugging. The output of echo $IDLevel is "Administrator" (without the quotes). The capitalization matches. echo $IDLevel is done earlier in the script (line 16) just to test it, which you can see @ the top of the image.
Posted: Tue Dec 07, 2004 12:33 pm
by rehfeld
litterally cut and paste that echo in the place i said to.
do not retype it, and do not put it somewhere else in the script. put it directly above the if statement.
either the output from the echo will be different, of the if statement will work. theres no other possibility.
Posted: Tue Dec 07, 2004 3:22 pm
by iandunn
Ugh, the problem was just the I declared the variable as $IDlevel and was trying to use it as $IDLevel
Thanks for your help
