0

I am trying to insert php variables into javascript.

Here is the broken code:

 var tokens = [<?
 $result = mysql_query("SELECT * FROM accounts ORDER BY id DESC") or die (mysql_error()); 
 while ($row = mysql_fetch_array($result)) { 
 $user_name = $row['user'];
 $user_id = $row['id'];
 echo "['$user_name','$user_id'],";
 }
 ?>]
3
  • 1
    And which is the question? Any error? Commented Nov 2, 2009 at 0:09
  • I've attempted a quick clarification of the question. Hopefully Gully will confirm that this is what he's trying to do. Commented Nov 2, 2009 at 0:39
  • Duplicate of stackoverflow.com/questions/1663750/… Commented Nov 2, 2009 at 23:36

3 Answers 3

4

Use PHP's json_encode & then echo out to javascript directly, e.g:

$fruit = array("banana", "apple", "strawberry", "raspberry", "orange");
$json_fruit = json_encode($fruit);

echo "var fruit = $json_fruit;";

Edit: I have updated this answer to no longer use eval() since it is not required. I had just started using JSON when I first answered this question.

Sign up to request clarification or add additional context in comments.

3 Comments

eval isn't necessary unless youa re trying to pass it back as a response via ajax (in that case it should go on the js side anyway). json_encode spits out a valid js object/value.
-1 For the unneeded eval. This shows you don't understand what JSON is.
Thanks for the reminder on this one. I have updated the answer so it no longer uses eval().
2

You do this:

 echo "['$user_name','$user_id'],";

... meaning that it will generate this:

[ ['a','b'], ['a','b'], ['a','b'], ['a','b'], ]

Notice that it will always end with a "," and this is an incorrect syntax.

Correct syntax is :

[ ['a','b'], ['a','b'], ['a','b'], ['a','b'] ]

I'm not a PHP guy, but I'd say something like this would fix it :

 var tokens = [<?
 $result = mysql_query("SELECT * FROM accounts ORDER BY id DESC") or die (mysql_error()); 
 $i = 0;
 while ($row = mysql_fetch_array($result)) { 
 $i++;
 $user_name = $row['user'];
 $user_id = $row['id'];
 echo "['$user_name','$user_id']";
 if($i < sizeof($result)-1 ) // incorrect syntax, but you get the point
   echo ","
 }
 ?>]

3 Comments

Ah, I think I missed that the question is about serializing PHP variables to JavaScript. There should be a built-in PHP function that does that (but I'm not a PHP guy either, so don't know what it might be).
Yeah I made the same error at first when reading the question ^^ True there must be a function doing this somewhere, but this should do the trick as well.
Just remembered that there's an implode function that converts an array to a delimited list - coping with the trailing comma issue - but that requires an array to work with, which would probably be more work to create than your existing counter method anyway.
1

PHP runs on the server. JavaScript runs on the client.

You can generate JavaScript from PHP, but you cannot run PHP in JavaScript.

(It is worthwhile reading up on how the various components of the web work, specifically HTTP, to understand all this better.)

If you want to perform PHP actions in response to client actions in the browser without reloading the whole page, investigate 'ajax'.

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.