Jump to content
  • Announcements

    • boen_robot

      Guidelines and Netiquette   03/28/2017

      Posting Problems:   Having problems posting your topic? Read through this: To join, you agree to our terms and conditions and fill out and submit a registration form. An activation email will be sent to your email adress, so you'll need to verify your account. After that the account has to be validated by one of the moderators. This will mean that it can take up to a day to be activated. A couple of things to remember to ensure approval: Don't use an email address in one of those $2 four character .com domains eg. xyds.com. These will be deleted and the domain added to the banned list. Don't use an email address that is within a domain with a bad reputation for spam. A Google search is run on every email address and email domain. Don't sign up with an email address that doesn't exist, doesn't work or requires the sender to answer a quiz before their email can get to you. Put your country and or state and city in the signup form. Blank forms will go to the botton of the "to do" list. And make sure that your email address and your country match, saying you're from Alabama and using a .ru email address is not going to get you activated. After a membership is activated the first few posts will be monitored. Posting spam or unapproved topics described in the agreement results in an immediate ban. The email provider and the IP addresses associated with the account will be banned and all posts will be deleted. These strict measures have been deemed necessary to hinder spam. Sorry for any inconvenience this causes, but it's not liable to change. If, after reading this, you still can't post and don't understand why, contact one of the Moderators listed here.   Topic Guidelines   Including the following information can expedite an accurate response from board members: Must be a Specific Problem or Question related to web design and development Include Code in Question (wrap with   for small blocks of code and for longer blocks   ) Include Code Author Include Extra Notes/Modifications/Attempts Include web link to page/file when possible Content Guidelines   You may not post, upload, link to, or email any Content that contains, promotes, gives instruction about, or provides prohibited Content. Prohibited Content includes any Content that breaks any local, state, county, national or international law. Prohibited Content also includes: No direct or indirect advertising or websites, forums, products, services No hijacking of posts (do not post your question in someone elses) Content that infringes upon any rights [ex. MP3s and ROMs] (including, but not limited to, copyrights and trademarks) Abusive, threatening, defamatory, racist, or obscene Viruses or any other harmful computer software False Information or libel Spam, chain letters, or Pyramid schemes Gambling or Illicit drugs Terrorism Hacking or cheating for internet/online games Warez, Roms, CD-Keys, Cracks, Passwords, or Serial Numbers Pornography, nudity, or sexual material of any kind Excessive profanity Invasive of privacy or impersonation of any person/entity Hacking materials or information Posting Tips   There are more BBcodes than there are buttons for on the reply menu. To get the full list, click "BB Code Help" underneath the clickable smilie face menu. Use   for small snippets of code Use   for lengthy snippets of code Use   if your snippet is HTML (optional) Use   if your snippet is SQL (optional) Rules of Conduct   Be nice. There's no need for calling someone stupid if they ask an 'easy' question. Keep your avatars and signatures absolutely child friendly. We have a younger audience on this forum. Keep your language appropriate for the same reason above. Do not PM moderators for help on the forum. Post on the topic, or create a new one.   Spam:   Recently, as you have all without doubt noticed, we have had lots of spam and advertisement on the forum. Therefore, we'd like to alert you as to what to do when you have found any of the aforementioned annoying messages: it. Immediately. Give a clear reason, please, if the advertising is not evident. DO NOT POST! Report, let the post stay as is, and we will get to it, meanwhile if you continue to post as normal in the other threads, it won't be on the top so long. Refrain from PMing the member. This won't help at all, as they are most likely spambots anyway. Thank you.       Images in signatures:   After thinking of users on dial-up, we have decided to enforce the following rules regarding signatures. Please pay heed to them. Respecting these rules is respecting the members on this forum with dial-up. Signature rules: No animated images AT ALL. No matter the amount of animation. Maximum image widthxheight: 300x150 Maximum image (file) size: 15kb Use calm colors. Do not use highly contrasting images in your signature, as this can get really annoying when seeing several posts from one member in the same thread. The same prohibited content goes for images as for posts. Lastly, use common sense. No lengthy signatures please. Save us some scrolling. Thank you.       Links in signatures:   Please understand that w3schools.com only exists because of voluntary work and is barely supported by the advertising littered throughout the tutorials and the forum. So, please, stop advertising other sites. DO not post links that drive traffic away from the w3schools domain - especially to a site that offers similar if not identical information. Please help support the site by keeping individuals on it. Thank you. Here are some guidelines as to what you can put in your signature: w3schools links --> allowed w3.org links --> allowed browser links --> allowed html editor links --> allowed personal sites --> allowed tutorial sites competing with w3schools --> NOT allowed sites completely irrelevant to webprogramming and this forum --> NOT allowed   Thanks for understanding, and for taking the time to read this. ~W3Schools Modstaff~
westman

Javascript in PHP

Recommended Posts

$string = 'Hello and hi';
$text ='
<a class="link" href = "javascript:void(0)" onclick = "document.getElementById(\'text_div\').innerHTML=\''.$string.'\';">Text</a>
';

This is code I am using to print $string in text_div.
What syntax (characters) can I not pass through this script?

Edited by westman

Share this post


Link to post
Share on other sites

That code will work as long as the contents of $string do not have a single-quote because the single-quote will close the Javascript string. If you want to protect the code from that then you can use the addslashes() function before using $string.

Share this post


Link to post
Share on other sites

Depends on what is the reason you wish to send this info to a php file? for including? or AJAX type request for example?

Share this post


Link to post
Share on other sites

the idea is this

$id1 = '123';
$id2 = '123';
$text ='
<a class="link" href = "javascript:void(0)" onclick = "document.getElementById(\'test.php\').innerHTML=\''.$id1.'\';document.getElementById(\'test.php\').innerHTML=\''.$id2.'\';">Text</a>
';

then test.php will echo back information to the main page.

Share this post


Link to post
Share on other sites

This is AJAX, Whatever is echoed out in a external PHP page by using AJAX and is on a success,  placed anywhere you wish by referencing a specific element id.

NOTE: I don't know why you have 'test.php' as id ref?.

IF the test.php page is going to be as above you need to initiate request to this test.page using AJAX through an event such as onclick or onloading of page, the test.php should echo out $text. Then this echoed output is returned to main page and on success is place on page using using 'document.getElementById("placementID")';

IF you are planning on sending '123' to the test page you need to send as POST or GET, and read using $_POST['...'] or $_GET['...'], you then assign to the variables ($id1, $id2) these retrieved values, insert as you have, then echo output and process in main page as previously done.

See AJAX tutorials for examples.

 

 

Share this post


Link to post
Share on other sites

You start this JavaScript AJAX request on the main page, which is either triggered by onclick event or onload event.

Share this post


Link to post
Share on other sites

Before I go ahead and start coding this I need some advice on functionality.
I don't know if I should run everything from my main page or use AJAX to call on a second php file.

So this I what I am programming.
An inbox page like google. 

From pic1.PNG you can see my layout.
Once you click on the subject a div will show with the message history.

I will be taking all the info from my DB and creating more divs in php to dynamically echo to the popup div.
The problem...
JavaScript does not like my content ie ' " and line brakes.
If I have a second php file using AJAX would it work better?   

pic1.PNG

Share this post


Link to post
Share on other sites

1) IF you collect info from the database and dynamically echo into a pop-up, you will have to send a id of some type to retrieve the required info by reloading this single main page, get the id with $_GET or POST and process to get required info from database, to show in pop-up div, which must be set to show.

2) AJAX will do exactly the same using the same php code to process and get the required info, but this code is in a separate external php in which the id is sent to, this means the loading of page to process is done in this external page, and not in the main page, which the echoed output from external php file is returned to.

So produced the required result using (1), then if you want, make an AJAX version, as I said it is basically the same but separated , whichever you use, you would have find a way for it to accept quote and line break issues. either by escaping or encoding these characters instead.

Share this post


Link to post
Share on other sites

Thank you.
Then I am going to use 1 php file (main page) to do all the work.
There will be no page reloading as I am looping everything from the DB. first loop is message subject and inside that loop is a sub-loop to get the messages of all subjects.
I am sacrificing page load time for not reloading the page.  

Share this post


Link to post
Share on other sites

Last piece of the puzzle.
I have coded everything and It works well apart from one aspect "JavaScript in php" the title of this post.

this is what I have.
 

$text = strip_tags($text);
$text = str_replace("`", "\'", $text);
$text = str_replace("'", "\'", $text);
$text = str_replace('"', "\'", $text);
$text = preg_replace("/[\n\r]/","<br />",$text);

$text_div = $text;

$subject_all_show .= '
<div align="left" style="background-color:#FFF;">

<div class="link_black" style="padding-top:10px; padding-left:5px; float:left;">
<a href = "javascript:void(0)" onclick = "document.getElementById(\'mail\').style.display=\'block\';document.getElementById(\'fade\').style.display=\'block\';document.getElementById(\'subject\').innerHTML=\''.$subject.'\';document.getElementById(\'mail_text\').innerHTML=\''.$text_div.'\';">subject</a>
</div>
<div style="float:right; padding-top:10px; padding-right:5px;">
date
</div>
<div style="clear:both;"></div>

</div>
<br />
';

This works fine.

but when I change
$text_div = $text;
to
$text_div .= '
<div style="clear:both;"></div>
'.$text.'
</div>';
There is a problem.
How do I fix it as I need to add css to different divs in the while loop. 

 

 

Share this post


Link to post
Share on other sites
$text_div .= <<<HTML
<div>
$text
</div>
HTML;

This did not work.

Could you please give an example of what I should do.

Share this post


Link to post
Share on other sites

Just do it how you would normal write html and place php code where you require it

<?php
        $id1 = '111';
        $id2 = '333';
        $text = <<<HTML
                <div>
<a class="link" href = "javascript:void(0)" onclick = "document.getElementById('text_div').innerHTML='$id1';document.getElementById('text_div').innerHTML='$id2'">Text</a>
                </div>
HTML;
        echo $text;
?>

 

Share this post


Link to post
Share on other sites

That does not work for me and the <div> needs to add css to $text not to the <a>
In the end $text will have <div>'s and css inside.

Edited by westman

Share this post


Link to post
Share on other sites

Oh well if it doesn't work with no apparent explanation why it doesn't work, might as well give up then.

I was going by YOUR example, you can either have placed addition html (with or without php) within the heredoc or use php to echo between html elements of the page.

I don't understand divs and css inside?.

Share this post


Link to post
Share on other sites

I mean
 

$subject_all_show .= '
<div align="left" style="background-color:#FFF;">
<div class="link_black" style="padding-top:10px; padding-left:5px; float:left;">
<a class="link" href = "javascript:void(0)" onclick =document.getElementById(\'text_div\').innerHTML=\'<div style=\"color:FFF;\">'.$text_div.'</div>\'">Text</a>
</div>
<div style="float:right; padding-top:10px; padding-right:5px;">
date
</div>
<div style="clear:both;"></div>
</div>
<br />';

<div style="color:FFF;"> and $text_div need to be together in but it does not work. 

Edited by westman

Share this post


Link to post
Share on other sites

Seriously, just use a heredoc.

$subject_all_show .= <<<EOT
<div align="left" style="background-color:#FFF;">
<div class="link_black" style="padding-top:10px; padding-left:5px; float:left;">
<a class="link" href = "javascript:void(0)" onclick =document.getElementById('text_div').innerHTML='<div style=\"color:FFF;\">$text_div</div>'">Text</a>
</div>
<div style="float:right; padding-top:10px; padding-right:5px;">
date
</div>
<div style="clear:both;"></div>
</div>
<br />
EOT;

You have other problems which have nothing to do with strings and PHP.  For example, that onclick attribute is missing an opening quote, but you have a closing quote.  You probably also need to use HTML entities for some of those characters in that attribute, including anything you have inside $text_div, if you're going to try to jam everything into an onclick attribute.  You need to look at the output from PHP, the HTML that it prints, figure out what it's supposed to look like, what it actually does look like, and how to fix it.  Coming back saying "it doesn't work" doesn't help anyone fix the problems.  Look at the actual HTML being produced and figure out what's wrong with it, then how to fix it.

Share this post


Link to post
Share on other sites

I would seriously consider adding id or classes for styling, and create a function/s on main page for all innerHTML work, then call that function on click event with the required arguments to produce end html result.

Share this post


Link to post
Share on other sites

I fond the problem...
the closing div in <div style=\"color:FFF;\">$text_div</div> was not been seen by my browser.

So here is what I did to find the best way to get everything working.
I used 3 files. pm.php, pm2.php, and pmjs.js

//pm.php
<?php
$subject .= '
<div align="left" style="background-color:#FFF; height:40px; width:600px; padding: 5px; font-size: 16px; border-radius: 15px; box-shadow: inset 5px 0px 0px 0px rgba(42,42,42,.0); text-shadow: 0px 0px 0px rgba(42,42,42,.75); border: 2px solid #1695C4;">

<div class="link_black" style="padding-top:10px; padding-left:5px; float:left;">
<div class=\'pmbutton\' data-id=\''.htmlentities($idRow).'\' data-id2=\''.htmlentities($mainRow).'\'  >  '.$subjectRow.'  </div>
</div>
<div style="float:right; padding-top:10px; padding-right:5px;">
date
</div>
<div style="clear:both;"></div>

</div>
<br />
';
?>
<html>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="pmjs.js"></script>
    
  </head>
  <body>
<h1>Some text</h1>
<?php echo $subject; ?>
<div class='mail_text'></div>
  </body>
 </html>

// pmjs.js

$( document ).ready(function() {
    $('.pmbutton').click(function(e) {
	$('.mail_text').load('pm2.php', { id : $(this).data('id'),id2 : $(this).data('id2') });
});


  });

//pm2.php

<?php
$text = htmlentities($_REQUEST['id']);
$text2 = htmlentities($_REQUEST['id2']);

$text = '
<div align="center" style="padding:15px;">
<div align="left" style="padding:5px; background-color:#E0E0E0;">
<div style="float:left;">
<strong>name</strong>
</div>
<div style="float:right;">
<strong>'.$text2.'</strong>
</div>
<div style="clear:both;"></div>
' . $text . '
</div>
</div>
';

?>


<div>this is the output</div>
<div>div2  &amp; stuff</div>

<?php echo $text; ?>


works well.
Dsonesuk, Thank you for suggesting this as you can see I am using "htmlentities" to help.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×