1

I am trying to use a php script to only show a link, when a "user" in a MySQL table is "logged in". What is wrong with the php code which I have tried? Mine is here below:

<? 
session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");
}

?>

<html>
<head>
require_once(checklogin.php)
</head>
<body>

<?php
if($myusername == "admin");
echo "<a href="test.html"> Click Me! </a>";
?>

</body>
</html>

The $myusername variable comes from the file below which checks the username from a form (on another page) against the mysql table and opens a session.

<?php
ob_start();
$host="-----";// Mysql username 
$password="-----"; // Mysql password 
$db_name="-------"; // Database name 
$tbl_name="-------"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>

So to repeat my question: What exactly is wrong with this block of code

if($myusername == "admin");
echo "<a href="test.html"> Click Me! </a>";
?>

which should recognize the user and display the link

4
  • which error you are getting with this code ? Commented Mar 2, 2012 at 3:57
  • To Saiyam Patel: What is happening is "Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /home/a5994084/public_html/login_success.php on line 19" Commented Mar 2, 2012 at 4:01
  • which file is login_success.php in above two script? Commented Mar 2, 2012 at 4:09
  • 1
    place test.html in single quotes like this ('test.html') not like this ("test.html") Commented Mar 2, 2012 at 4:11

5 Answers 5

2

The cause of the syntax error is a stray ; after the if statement. It should be removed.

if($myusername == "admin");
//-----------------------^^
// Error here -- remove that semicolon!

There are some other issues here, like the unquoted value in session_register(), which should be surrounded in quotes:

session_start();
if(!session_is_registered(myusername)){
//-----------------------^^^^^^^^^^^^^
header("location:main_login.php");
}

However, the use of session_register() is not recommended. The proper modern way to set session variables is by using the $_SESSION superglobal array. (see the deprecation notices in the PHP docs)

// Set a variable
session_start();
$myusername = "admin";
$_SESSION['myusername'] = $myusername;

// Get a variable
// Always call session_start() at the beginning of the script
echo $_SESSION['myusername'];
// admin
Sign up to request clarification or add additional context in comments.

4 Comments

Michael, thank you for the help. I have the semicolon in my code and it still gives me the syntax error. Any idea why? Thanks
also in the first file, he also has semicolon after if statement
Thanks again for the extra information, instead of setting the variable in this script, shouldn't the require_once allow me to call a variable from that script?
@user1239304 As long as the variable set in the included file via require_once() is at global scope, it will be available to the script which included it. But if you want the value to persist across a page load, you will need to store it in $_SESSION
1

try like this

<?php
    if($myusername == "admin")
    echo "<a href='test.html'> Click Me! </a>";
?>

when you start the string with double inverted coma(") you must have to use single inverted coma(') in that statement if parser found another double inverted coma (") it will consider as a end of string

may be this issue

1 Comment

This fixed it! Thanks! But the only problem is that the link displays for every user... Oh well, back to the drawing board thank you for the answer!
1

Try this

<?php
if($myusername == "admin")  // semicolon removed
{ 
// use single quotes for href or escape double quotes
echo "<a href='test.html'> Click Me! </a>"; 
}
?

Comments

0

place test.html in single quotes like this ('test.html') not like this ("test.html")

Comments

0

There are two problems. if($myusername == "admin"); // remove this semicolon after if. And echo " Click Me! "; // remove the double quotes around test.html

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.