views:

145

answers:

5

Hello. Can anyone explain how to make this code work?

echo '<div id="panel1-under">Welcome <?php echo "$_SESSION['username']"; ?></div>';

I've tried removing the single quotes so it's like this: - "$_SESSION[username]" but it doesn't work. Appreciate any help. Thanks!

+5  A: 

You need to concatenate your strings & variables.

echo '<div id="panel1-under">Welcome ' . $_SESSION['username'] . '</div>';
Ben Rowe
+3  A: 

Variable expansion doesn't work inside of single quotes. You can do either:

echo "<div id=\"panel1-under\">Welcome {$_SESSION['username']}</div>";

or

echo '<div id="panel1-under">Welcome ' . $_SESSION['username'] . '</div>';
jasonbar
Cool! +1. I didn't know you can use assocative arrays like in the first example, I was suspicious if it'd work and I tested it myself and it actually works, although I'll probably never use it that way...
Aldo
The first example will bring up a warning like "undefined constant 'username', assuming 'username'". It's best to use the bracket syntax:`echo "<div id='panel1-under'>Welcome {$_SESSION['username']}</div>";
Alex JL
@Alex JL, oops, fixed!
jasonbar
The {} method is also the only way to interpolate sub dimensions of a multimdimensional array inside a double-quoted string. echo "$a[b][c]" will ouput the equivalent of `$a[b] . "[c]"` (something like 'Array[c]'), as PHP's parser isn't greedy for dimensional references.
Marc B
+3  A: 
echo "<div id=\"panel1-under\">Welcome ".$_SESSION['username']."</div>";

or

echo '<div id="panel1-under">Welcome '.$_SESSION['username'].'</div>';

Quick Explain :

  • You don't have to reopen the tags inside a echo String (" ... ")
  • What I have done here is to pass the string "Welcome " concatenated to *$_SESSION['username']* and "" (what the . operator does)
  • PHP is even smart enough to detect variables inside a PHP string and evaluate them :

    $variablename = "Andrew";

    echo "Hello $variablename, welcome ";

=> Hello Andrew, welcome

More infos : PHP.net - echo

Kami
PHP will replace variables inside a PHP string IF the string is in double quotes or a Heredoc. This is an important distinction.
Alex JL
+1 It's so in the example but I haven't mentionned it explicitly ! thx
Kami
`echo "<div id=\"panel1-under\">Welcome {$_SESSION['username']}</div>";` Should also work?
Svish
+2  A: 

Inside single quotes, variable names aren't parsed like they are inside double-quotes. If you want to use single-quoted strings here, you'll need to use the string concatenation operator, .:

echo '<div id="panel1-under">Welcome <?php echo "'.$_SESSION['username'].'"; ?></div>';

By the way: the answer to the question in the title is that in order to use a literal single-quote inside a single-quoted string, you escape the single-quote using a backslash:

echo 'Here is a single-quote: \'';
Hammerite
+1  A: 

Generally speaking, to use the single quote inside a string that is using the single quote as delimiter, just escape the single quote inside the string

echo 'That\'s all, folks';

It's not clear what the purpose of your code is, though.

echo '<div id="panel1-under">Welcome <?php echo "$_SESSION['username']"; ?></div>';

As you are already using PHP code, <?php echo is not necessary. If you are only trying to output the content of a session variable, then you can use

echo '<div id="panel1-under">Welcome ' . $_SESSION['username'] . '</div>';
kiamlaluno