Confused with comma's in PHP [duplicate] - php

This question already has answers here:
PHP parse/syntax errors; and how to solve them
(20 answers)
Closed 6 years ago.
I know is a stupid question but well i am trying so hard but i can't figure out on where i am missing the comma i am totally confused ,The below code is giving me an error.
it would be great if someone can help me out with a referencing on comma and tips / Tricks on them :)
i tried replacing the commas in different places but still it didn't worked out.
<td><?php echo <a href="test1.php?id=<?php echo $row['ID'];?>"/>Download! ?></a></td>
Thanks :)

It has to be:
<td>
<?php
echo 'Download!';
?>
</td>
Alternatively:
<td>
Download!
</td>

<td><a href="test1.php?id=<?php echo $row['ID'];?>"/>Download!</a></td>
Try this one

One important thing to remember is that you do not have to use echo to output static HTML content, only for the dynamic part, the variable in you case. The correct version looks like:
<td><a href="test1.php?id=<?php echo $row['ID'];?>"/>Download!</a></td>

The immediate approach typically would be that:
<td>Download!</td>
Often it can be shortened, depending on your php configuration:
<td>Download!</td>
To me the second form is more readable, thus my personal preference.

There is one redundant echo with opening/closing php tags, also you wrongly self-close the a tag.
In your html template it is sufficient to write:
<td>
Download!
</td>
Code between <?php and ?> is php code which is "injected" in html.
$row is array and with $row['ID'] you get value of specific key from array which is ID. You can access the value on this key also with double quotes like $row["ID"] there is no difference, because you want to access the key which is referenced by string with value ID. You can embrace string with single or double quotes.
More on strings in php manual: http://php.net/manual/en/language.types.string.php
When you want to use same quotes in string you have to escape it like
<?php
echo "This is double quote: \"."; //result: This is double quote: ".
?>
same with single quote:
<?php
echo 'This is single quote: \'.'; //result: This is single quote: '.
?>
You can echo some other string with value from array for example:
<?php echo "this row has id: " . $row["ID"]; ?>
so you concatenate string and value with the period/dot.
Or you can access value of variable in string like:
<?php
$rowId = 1;
echo "this row has id: $rowId"; //result: this row has id: 1
?>
But it is hard to spot it and many IDE's will not highlight it. Better can be to concatenate it with period (echo "this row has id: " . $rowId;).
You can also specify value from array, but you have to enclose it with {} so the php engine know that it is array variable no the literal
<?php echo "this row has id: {$row["ID"]}"; ?>
or object property:
<?php echo "this row has id: {$row->id}"; ?>
But it can also be hard to spot it when you write it like this.
When you want to literally write all this code you can enclose it by single quotes:
<?php
echo '<?php echo "this row has id: {$row["ID"]}"; ?>'; //result: <?php echo "this row has id: {$row["ID"]}"; ?>
?>
or escape all double quotes and dollar sign $ and the result will be same:
<?php
echo "<?php echo \"this row has id: {\$row[\"ID\"]}\"; ?>";
?>

Related

select option showing 10 blank values after mysql [duplicate]

This question already has answers here:
php - insert a variable in an echo string
(10 answers)
Closed 3 years ago.
All I want to do is echo out a PHP variable inside a <li> tag. Refer to the code below. What's the proper format? Mine is not working.
$row['cat_title'];
echo "<li> {$cat_title} </li>";
If you need to output a value of a particular array key (e.g. $row['cat_title']) in HTML, you have quite a few options.
You can use the concatenation operator (.):
echo '<li>' . $row['cat_title'] . '</li>';
You can use variable interpolation with simple string parsing (note that in this syntax, quotes around the array key must be omitted):
echo "<li>$row[cat_title]</li>";
You can use variable interpolation with complex string parsing (using {}) which is actually not necessary here, but useful for more interpolating more complex expressions. With this syntax, quotes around the array key should be included.:
echo "<li>{$row['cat_title']}</li>";
You can output plain HTML and use the echo shortcut syntax <?= to output the value (only do this if you are already outputting HTML, not if you are currently in a <?php tag; that would be a syntax error.):
<li><?= $row['cat_title'] ?></li>
You can use printf (thanks to Elias Van Ootegem's comment for reminding me of this; I should have included it to begin with). sprintf can be used if you want to save the result to a variable instead; printf will output it immediately:
printf('<li>%s</li>', $row['cat_title']);
The first argument of printf is a format string, where %s is a string conversion specification that will take the value of $row['cat_title'] when printf is executed.
There are other ways, but these are the most common.
You need to reference the right variable. You're on the right track, though.
echo "<li> {$row['cat_title']} </li>";
echo '<li>'.$var.'</li>';
OR
echo "<li>$var</li>";
OR
<li><?=$var?></li>
If the file is mostly PHP in the file then:
<?php echo "<li>" . $row['cat_title'] . "</li>"; ?>
Or conversely if it's mostly HTML in the file then:
<li><?php echo $row['cat_title']; ?></li>
It sounds to me that it's most likely the second option you are looking for.
Another alternative:
<li><?php echo $row['cat_title']; ?></li>
Either of these methods will work...
// Use single quotes and periods like this...
echo '<li>'. $row['cat_title'] .'</li>';
OR
// Use double quotes like this...
echo "<li> $row['cat_title'] </li>";

What's wrong with this line ? i'm trying to figure out since hours (php)

The following line of code is supposed to echo the current season and a data in a php echo:
<?php echo "<h5>" $_SESSION['username'] '<span class="chat_date">'Dec 25"</span></h5>" ?>
Is the session call true? And how can I fix this code?
if you want echo a string you should use concatenation operator ('.')
<?php echo '<h5>' .$_SESSION['username']. '<span class="chat_date">Dec 25</span></h5>' ?>
or use double-quotes (") to passing data
$usename=$_SESSION['username'];
<?php echo '<h5>"$usename"<span class="chat_date">Dec 25</span></h5>' ?>
There is no need to concatenate a string before echoing it in PHP.
The parameters can be passed individually to echo as multiple arguments for a slight performance (speed) increase. In other words, you can use , instead of ..
For example:
<?php echo '<h5>' , $_SESSION['username'] , '<span class="chat_date">Dec 25</span</h5>'; ?>
I would recommend reading the Official Documentation.
<?php
echo "<h5> $_SESSION[username] <span class=\"chat_date\">Dec 25</span></h5>";
?>
Variables are evaluated inside double quoted strings.
To echo double quotes inside double quotes, you add a backslash before the double quote so PHP knows it is not the end of the quoted segment.
For arrays, do not quote the key inside a string.

How can I echo PHP and HTML in the same line? [duplicate]

This question already has answers here:
php - insert a variable in an echo string
(10 answers)
Closed 3 years ago.
All I want to do is echo out a PHP variable inside a <li> tag. Refer to the code below. What's the proper format? Mine is not working.
$row['cat_title'];
echo "<li> {$cat_title} </li>";
If you need to output a value of a particular array key (e.g. $row['cat_title']) in HTML, you have quite a few options.
You can use the concatenation operator (.):
echo '<li>' . $row['cat_title'] . '</li>';
You can use variable interpolation with simple string parsing (note that in this syntax, quotes around the array key must be omitted):
echo "<li>$row[cat_title]</li>";
You can use variable interpolation with complex string parsing (using {}) which is actually not necessary here, but useful for more interpolating more complex expressions. With this syntax, quotes around the array key should be included.:
echo "<li>{$row['cat_title']}</li>";
You can output plain HTML and use the echo shortcut syntax <?= to output the value (only do this if you are already outputting HTML, not if you are currently in a <?php tag; that would be a syntax error.):
<li><?= $row['cat_title'] ?></li>
You can use printf (thanks to Elias Van Ootegem's comment for reminding me of this; I should have included it to begin with). sprintf can be used if you want to save the result to a variable instead; printf will output it immediately:
printf('<li>%s</li>', $row['cat_title']);
The first argument of printf is a format string, where %s is a string conversion specification that will take the value of $row['cat_title'] when printf is executed.
There are other ways, but these are the most common.
You need to reference the right variable. You're on the right track, though.
echo "<li> {$row['cat_title']} </li>";
echo '<li>'.$var.'</li>';
OR
echo "<li>$var</li>";
OR
<li><?=$var?></li>
If the file is mostly PHP in the file then:
<?php echo "<li>" . $row['cat_title'] . "</li>"; ?>
Or conversely if it's mostly HTML in the file then:
<li><?php echo $row['cat_title']; ?></li>
It sounds to me that it's most likely the second option you are looking for.
Another alternative:
<li><?php echo $row['cat_title']; ?></li>
Either of these methods will work...
// Use single quotes and periods like this...
echo '<li>'. $row['cat_title'] .'</li>';
OR
// Use double quotes like this...
echo "<li> $row['cat_title'] </li>";

How do I echo a <a> tag which has an href that is using php echo base_url() [duplicate]

This question already has answers here:
How can I combine two strings together in PHP?
(19 answers)
Closed 7 years ago.
Hi I am trying to produce a <td> which also contains an <a> link which will redirect to a function in my controller which also echos the id of my data. Here is my code so far:
<?php
if ($this->session->userdata("username")==$info->U_username) {
echo '<td>EDIT</td>';
}
?>
This code produces an error Disallowed Key characters. Any help or comment is highly appreciated.
For concatenating strings PHP has . operator.
echo '<td>EDIT</td>';
You need to add the result of base_url() to the string you want to output, e.g.:
echo '<td>EDIT</td>';
Either you need to concatinate instead to use php multiple time .use like this
<?php
if ($this->session->userdata("username")==$info->U_username){
echo "<td><a href='".base_url()."'/gamestalker/edit_content/'".$info->C_id."'>EDIT</a></td>";
}
?>
or don't include html into php tags like this
<?php
if ($this->session->userdata("username")==$info->U_username){ ?
<td>EDIT</td>
<? }
?>
You need string concatenation. In PHP you use . for that.
Also codeigniter's base_url can take an argument:
<?php
if ($this->session->userdata("username")==$info->U_username){
echo '<td>EDIT</td>';
}
?>

using ' and " in php syntax [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
How to get useful error messages in PHP?
Ive started on part of my new year resolution and decided to learn php, as part of it im trying to parse in an xml feed, and echo out the name of the events wrapped in <a> tags linking them back to the events page on the xml feed's site.
I think ive got it all in but i cant seem to see why this isnt working im just getting a blank page, if some one could point me in the right direction it would be much appreciated, cheers
<?php
// F1 W/H xml feed
$xml = simplexml_load_file('http://whdn.williamhill.com/pricefeed/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=5&marketSort=HH&filterBIR=N');
foreach ($xml->response->williamhill->class->type as $type) {
$type_attrib = $type->attributes();
echo "<h2>".$type_attrib['name']."</h2>"; //Title - in this case f1 championship
} ?>
<ul>
<?php
foreach($type->market as $event) {
echo "<li>";
echo "<a href="$event_attributes['url']">";
echo $event_attributes['name'];
echo "</a>";
echo "</li>";
}
?>
</ul>
echo "<a href="$event_attributes['url']">";
try changing that line to
echo "<a href=\"".$event_attributes['url']."\">";
The Php parser is pretty funny about this. Usually you pick one and just stick to it, or use both single quotes and double quotes as you please. Just remember that strings with double quotes are parsed for variables.
$hello = "Hello";
echo "$hello master";
is the same as
$hello ="Hello";
echo $hello.' master';
When you are testing your PHP scripts, you'll find it useful to switch on errors - then PHP will actually tell you why it isn't showing you anything:
error_reporting(E_ALL);
Normally you will have missed a ; or mis-typed a variable name.
in your case the error is here:
echo "<a href="$event_attributes['url']">";
You have accidentally ended the string with a double quote, so PHP thinks the string ends here:
echo "<a href="
This is where using single-quotes can be very handy because your double quotes won't then close the string.
echo '<a href="' . $event_attributes['url'] . '">';
The main difference between single and double quotes in PHP is that double quotes has special clever parsing rules and single quotes doesn't. For example:
$myVar = "BLAH";
echo "Example $myVar"; // Example BLAH
echo 'Example $myVar'; // Example $myVar
In your unordered list, you should use a dot to concatenate your string, and escape your double quotes like this:
echo "<a href=\"".$event_attributes['url']."\">";
Instead of
echo "<a href="$event_attributes['url']">";
Your example throws and error because you haven't used proper string concatenation. However, even with correct concat, it would render as <a href=http://someurl>, and you'd need to add the double quotes according to html standard. Hence you have to double quote.
if you want to not be troubled by having to switch between using a ' or a " then i suggest using the php alternative syntax php alternative syntax
with the given code it would look like
<?php
// F1 W/H xml feed
$xml = simplexml_load_file('http://whdn.williamhill.com/pricefeed/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=5&marketSort=HH&filterBIR=N');
foreach ($xml->response->williamhill->class->type as $type) {
$type_attrib = $type->attributes();
echo "<h2>".$type_attrib['name']."</h2>"; //Title - in this case f1 championship
} ?>
<ul>
<?php foreach($type->market as $event):?>
<li>
<a href="<?php echo $event_attributes['url']; ?>">
<?php echo $event_attributes['name']; ?>
</a>
</li>
<? endforeach;?>
</ul>
one advantage this would bring is that it would produce cleaner code since you can clearly distiguish your php code from your html which is the presentational part at the price writing all those other <?php ?> and as what others would claim a performance degradation. the choice is yours
Change
echo "<a href="$event_attributes['url']">";
for
echo "<a href=".$event_attributes['url'].">";
You are missing the periods in your second echo, where you have your $event_attributes['url']
<?php
foreach($type->market as $event) {
echo "<li>";
echo "<a href=".$event_attributes['url'].">";
echo $event_attributes['name'];
echo "</a>";
echo "</li>";
}
?>
I would recommend you to enable your error log, it would allow you to know the line with problems in any of your scripts.

Categories