Escaping quotes in PHP with variable - php

There are numerous question on Stackoverflow concerning this but I have not been able to solve this still.
I'm trying to put multiple variables inside global attribute data-*. The output should be:
data-info="23;thisWeek"
The 23 comes from a database: $row["id"], and thisWeek from a variable: $categori1.
I've tried:
echo "<tr data-info=" .fixSlashes($row["id"], $categori1); " class=\"tableclass\"><td>"
Then
<?php
function fixSlashes($idP, $categoriP){
$str = addslashes($idP . ";" .$categoriP);
return $str;
}
?>
But something goes wrong. No error message, but the behaviour is wrong. It works if I just write:
echo "<tr data-info="data-info="23;thisWeek" class=\"tableclass\"><td>"

It looks like you are not outputting the html correctly. Note the escaped quotes around the fix Slashes function. Also note the "." instead of the semicolon.
"<tr data-info=\"" .fixSlashes($row["id"], $categori1) . "\" class=\"tableclass\"><td>"
If you want to see all errors include the following code. This would have caught the semicolon error.
error_reporting(E_ALL);
ini_set('display_errors', '1');

echo "<tr data-info=" .fixSlashes($row["id"], $categori1); " class=\"tableclass\"><td>"
You have a semicolon (;) where the concat operator (.) should be. Umm, after the fixSlashes function. Before the class suffix string.
You're ending the echo statement prematurely, before the "class=\"tableclass\">" can be appended.

I hate to piggy-back, but half the answers are getting the one problem and half the answers are getting the other problem.
You need to fix your semi-colon to a period (concat) as #MingShun said.
You need to get quotes (escaped) around your data as #JimmyScray said.
echo "<tr data-info=\"" .fixSlashes($row["id"]. $categori1). "\" class=\"tableclass\"><td>";

Use escape sequence for displaying double quotations and use single quotations for id (i.e $row['id'])
echo "<tr data-info=\" $row['id'];$categori1\" class=\"tableclass\"><td>";

Related

PHP Missing Slashes

I am convinced that the solution is very simple, however I have searched many pages and questions and I am slightly frustrated with the lack of solution.
I'm trying to create a span element which has the onclick property.
The onclick event should pass to the displayStory function path to the text file.
Unfortunately, all slashes are missing.
Slashes are fine if I dont use apostrophes inside $dir, however i have to insert them somehow
PHP:
<?php
$allStories = scandir("./stories");
foreach($allStories as $story){
$dir = "'/stories/$story'";
$element = ("<span class='listElement' onclick='displayStory($dir)'>$story</span>");
echo $element;
}
?>
Output:
<span class="listElement" onclick="displayStory(" stories="" example.txt')'="">example.txt</span>
You need to learn how to escape characters:
<?php
$allStories = scandir("./stories");
foreach($allStories as $story){
// No single quotes here
$dir = "/stories/$story";
// No parenthesis needed to assign a value
// Escape double quotes for attributes preceding them with a backslash \"
// Use single quotes for function parameter
$element = "<span class=\"listElement\" onclick=\"displayStory('$dir');\">$story</span>";
echo $element;
}
?>
Output should be:
<span class="listElement" onclick="displayStory('stories/example.txt');">example.txt</span>

PHP - Echo out database information into a string

I am simply trying to echo or print out specific data from a DB into a string (i hope thats the right name), which should be a very simple process as I've done it before. The point is everytime a user inserts information into the database this string echo's or prints out the inserted data.
But for some very odd reason this time around when i try to echo out the data, I literally get this.
Very frustrating. As you can see from the image above i have tried using 2 different ways to do this a variable and a session, but the echo literally just prints it out. I have done this before so i am aware that it is possible. I am just a little lost into how i am meant to achieve this or even better where i went wrong. I know how to do this using a different style of coding, but i am trying to keep everything uniformed (newbie).
$addon_name = $_SESSION['Add_On_OpName'];
mysqli_report(MYSQLI_REPORT_INDEX); //overrid a common php nonsense error
$prod_sel = $dbc->query("SELECT * FROM Add_On WHERE Add_On_OpName = '$addon_name'");
$prod_sel->data_seek(0);
while ($output = $prod_sel->fetch_assoc()) {
$prod_run .= $output['Add_On_OpName'] . $output['Prod_Name'] . $output['Add_On_Price'] . $output['Add_On_Select'] . '<br>';
$addon = $output['Add_On_OpName']; //echo out product name
$_SESSION['Prod_Name'] = $output['Prod_Name']; //echo out product desc
$_SESSION['Add_On_Price'] = $output['Add_On_Price']; //echo out price
echo '
<p>$addon . " " . $_SESSION["Add_On_Price"]; </p>
';
My session is started and the php file is connected to the DB.
I also have error handling which has not given out any error messages.
You must do:
echo "<p>$addon ".$_SESSION["Add_On_Price"]."; </p>";
A string encapsulated into ' is rendered just as it is.
Use " to render a string that contains variables. Example:
$a = 3;
$a++;
echo "the result is $a";
will result in the result is 4.
On the other hand,
echo 'the result is $a';
gives the result is $a.
As the documentation points out:
Single quoted ¶ The simplest way to specify a string is to enclose it
in single quotes (the character ').
Doued ¶
If the string is enclosed in double-quotes ("), PHP will interpret
more escape sequences for special characters
Try not mix it..
And if within double quotes you have an associative array you may concat.
echo "string $variable". $array["index"];
or
echo "string $variable {$array["index"]}";
Then your code should look like
$addon_name = $_SESSION['Add_On_OpName'];
mysqli_report(MYSQLI_REPORT_INDEX); //overrid a common php nonsense error
$prod_sel = $dbc->query("SELECT * FROM Add_On WHERE Add_On_OpName = '$addon_name'");
$prod_sel->data_seek(0);
while ($output = $prod_sel->fetch_assoc()) {
$prod_run .= $output['Add_On_OpName'] . $output['Prod_Name'] . $output['Add_On_Price'] . $output['Add_On_Select'] . '<br>';
$addon = $output['Add_On_OpName']; //echo out product name
$_SESSION['Prod_Name'] = $output['Prod_Name']; //echo out product desc
$_SESSION['Add_On_Price'] = $output['Add_On_Price']; //echo out price
echo "<p>$addon {$_SESSION["Add_On_Price"]}; </p>'";
}
Long time ago
I never use double quotes due to it require parse the whole string for special notations. However it.
Try not mix single quotes with double quotes. pick up a standard for you code you will not notice any difference than is easy to code and read without surprises
You're mixing single quotes and double quotes. Single quotes do not perform interpolation of variables so when you write this:
echo '... whatever including " char and $ sign';
PHP will just literally print everything inside.
You forget some ' or " !
echo '<p>' . $addon . ' ' . $_SESSION["Add_On_Price"] . '</p>';
Use double quotes
echo "<p>$addon $_SESSION['Add_On_Price']; </p>";

PHP: Complicated String With Single and Double Quotes

I'm trying to pass GET variables inside the URL with a bit of html inside of my PHP but can't figure out the quotes situation. I need to embed two variables inside the URL. I have one in but don't know how to embed the other. Here is the string:
echo "<a href='?id=".($id-1)."' class='button'>PREVIOUS</a>";
and here is what I need to go inside
&City=$City
Thanks for the help
Its pretty simple,
echo "<a href='?id=".($id-1)."&city=" . $City . "' class='button'>PREVIOUS</a>";
In php double quotes "" can eval variables inside them.
$test = "123;"
echo "0$test456"; // prints 0123456
In your case you better use single quote ''.
echo '<a href=\'?id=' . ($id-1) . '&City=' . $City . '\' class=\'button\'>PREVIOUS</a>';
or better
echo 'PREVIOUS';
Use something like this:
echo "<a href='?id=".$id."&City=".$city."'>";
You do need (well, it's good practice anyway) to use & for your ampersand. Otherwise it's fairly straight forward;
echo "<a href='?id=".($id-1)."&City=$City' class='button'>PREVIOUS</a>";
This is because you are using double quotes, which means you can put variables directly into the string (there are some exceptions which you might need to put in curly brackets {}).
I suggest you get a text editor with syntax highlighting, such as jEdit (other editors are available).
Hope this helps.
Maybe is it better to use the sprintf function
$id = 100;
$previousId = $id - 1;
$City = 'Amsterdam';
$link = 'PREVIOUS';
echo sprintf($link, $id, $City);

How do I print a character variable within quotes using php function

I need to get this output.
the result is"random"safdsaf
I am using this piece of code
<?php
$x = "random";
echo 'the result is' .$x. 'safdsaf';
?>
But i am getting this
the result israndomsafdsaf
I have to define random before printing it.
i.e. I do not want to change this piece of code
<?php
$x = "random";
What change should i make inside echo to get the desired output?
If you are using the same type of quotes delimit the quotes in your string like this:
echo "The result is\"" .$x. "\"safdsaf";
or simply use two sets of different quotes:
echo 'the result is"' .$x. '"safdsaf';
Output of either line of code:
The result is"random"safdsaf
Try this
Added the little bit space befor ' and added ", it will give the some out put as you want
echo 'the result is "' .$x. '" safdsaf';
the result will be
The result is "random" safdsaf
If you want to print out double quotes you can include them in single quotes
Something like this would do the trick.
$x = '"random"';
If for whatever reason you don't want to use single quotes you can also escape them like :
$x = "\"random\"";
As you want to keep the string, I suggest you change the original line where you put it in :
echo 'the result is"' .$x. '"safdsaf';
the principle stays the same
Here's some reading material : http://php.net/manual/en/language.types.string.php
You can use simply :-
echo 'the result is "' .$x. '" safdsaf';
OR you can use .
echo "the result is \" $x\" safdsaf";
Using the \ before the quote like this: the result is \"random\" safdsaf.
if you have alot of quotes and such in a string, i would suggest using the addslashes(). This method will do the work for you for you.
For more info, take a look here - http://www.w3schools.com/php/func_string_addslashes.asp

echo function with the html tags

I want to create tags using echo function but I'm stuck here; I dont know how to make it through.
This is what I want to do:
echo "<img src=$row['one'] style="width:100px"/>" ;
(Note: $row['one'] is a variable of php script and that contains the path of the image), but it throws me these error:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\im.php on line 13
I want these statement to execute in php and I tried this way too:
echo '<img src=$row['one'] styel="width:100px" />';
These time I get the error:
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in C:\xampp\htdocs\im.php on line 13
I know where the error is. The error is most probably here
'<img src=$row[' //here's the error, right?
I worked on c and quite some other languages. I know that in c, to use double quotes in the printf we follow up some syntax but I dont know what to do in php.
echo "<img src=$row['one'] style="width:100px"/>" ;
You cannot have (unescaped) double quotes inside double quotes. It should be:
echo "<img src='{$row['one']}' style='width:100px'/>" ;
Some notes: HTML attributes can be quoted using either single or double quotes. Double quotes expand variables (single quotes don't). Putting variable names in {} helps when using arrays.
You need to escape the ":
echo "<img src=\"{$row['one']}\" style=\"width:100px\" />";
or you use single quotes and do this:
echo '<img src="', $row['one'], '" style="width:100px" />';
There is never a need to concatenate in order to echo. You can always just use ,. The php manual explains the differences between ' and " in the chapter on strings.
As a goodie, because you mentioned printf, this works in php, too:
printf('<img src="%s" style="width:100px"/>', $row['one']);
You need to concatenate the string.
echo "<img src='".$row['one']."' style='width:100px'/>" ;
You are also mixing your quotes up,
// Bad: echo "<img... style="width:100px"/>";
You have to be mindful of which quotes you are using to create the string. You are using the double quotations to both create the string, and define your width. You can fix this by escaping the quotes used to write the width, ex: \"width:100px\", or you can use single quotes like in my example.
echo "<img src='" . $row['one'] . "' style='width:100px'/>" ;
I want to create tags using echo function
That's wrong desire.
Do not use echo to create tags. Tags belongs to HTML, not to PHP.
So, just write usual HTML, bereaking it for PHP only when needed.
<img src="<?=$row['one']?>" style="width:100px"/>
echo "<img src=\"{$row[one]}\" style=\"width:100px\" />";

Categories