Log in

View Full Version : Variable replacement


Twilkey
06-15-2008, 08:44 AM
Here is the problem. I have asked many people and noone can figure out the problem.

I am storing embed code in a database table. I have a variable that is put in the src part and some variables in the width and height. Now this was working when I had the embed code just in the php file, but once I started storing the code in a database table and trying to pull the code from the table, it stopped working.

Here is what one embed code looks like when it goes into the database.
<OBJECT ID="MediaPlayer" width=600 height=500
classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"

codebase="http://activex.microsoft.com/activex/
controls/mplayer/en/nsmp2inf.cab#Version=6,0,02,902"

standby="Loading Microsoft Windows Media Player components..."

type="application/x-oleobject">

<PARAM NAME="FileName"
VALUE="http://location.to.media/file.wmv">

<PARAM NAME="animationatStart" VALUE="true">

<PARAM NAME="transparentatStart" VALUE="true">

<PARAM NAME="autoStart" VALUE="true">

<PARAM NAME="showControls" VALUE="true">

<EMBED type="application/x-mplayer2"

pluginspage = "http://www.microsoft.com/Windows/MediaPlayer/"

SRC="$movielink"

name="MediaPlayer"

width="$playerwidth";

height="... {$vbulletin->options['player_height']} ...";

AutoStart=true>

</EMBED>

</OBJECT>

Now the problem is that the variables arnt replaced with what they are supposed to when the embed code is pulled from the database.

Here is the code I use to display the embed code.
if ($_REQUEST['do'] == 'showmovie')
{
$movieid = $vbulletin->input->clean_gpc('g', 'id', TYPE_UINT);
$movie_query = $vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX . "psmedia_movie WHERE movieid=$movieid");
$movie = $vbulletin->db->fetch_array($movie_query);

$formatid = htmlspecialchars_uni($movie['formatid']);
$format_query = $vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX . "psmedia_format WHERE id=$formatid");
$format = $vbulletin->db->fetch_array($format_query);

$formattitle = htmlspecialchars_uni($format['title']);
$movietitle = htmlspecialchars_uni($movie['title']);
$moviedescription = htmlspecialchars_uni($movie['description']);
$movieotherinfo = htmlspecialchars_uni($movie['otherinfo']);
$movieauthor = htmlspecialchars_uni($movie['author']);
if ($movieauthor == '') {$movieauthor = "Unknown";}
$moviestream = $format['code'];
$movielink = htmlspecialchars_uni($movie['link']);

($hook = vBulletinHook::fetch_hook('psmedia_showmovie')) ? eval($hook) : false;

eval('$psmedia_showmovie_rightbar = "' . fetch_template('psmedia_showmovie_rightbar') . '";');
eval('$psmedia_content = "' . fetch_template('psmedia_showmovie') . '";');
}

Opserty
06-15-2008, 11:36 AM
You need to eval() the embed code or put the embed code in a template and eval() that template.

Twilkey
06-15-2008, 06:57 PM
Im kind of confused as to why I need to do that. I have this code $moviestream = $format['code']; pulling the embed code from the database. And the player gets embeded just fine, but the playerwidth, playerhieght, and movielink variables dont get replaced like they are supposed to.

Opserty
06-15-2008, 07:44 PM
You need to use eval() on the embed code that gets fetched from the database.

Twilkey
06-16-2008, 04:13 AM
Ok I have tried something, but I am getting an error and its still not changing the variables.

Code Used:
$moviestream = $format['code'];
eval($moviestream);Error Code:
Parse error: syntax error, unexpected '<' in /home/paulsonn/public_html/forum/psmedia.php(458) : eval()'d code on line 1
Embed Code Used:
<OBJECT ID="MediaPlayer" width=600 height=500
classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"

codebase="http://activex.microsoft.com/activex/
controls/mplayer/en/nsmp2inf.cab#Version=6,0,02,902"

standby="Loading Microsoft Windows Media Player components..."

type="application/x-oleobject">

<PARAM NAME="FileName"
VALUE="http://location.to.media/file.wmv">

<PARAM NAME="animationatStart" VALUE="true">

<PARAM NAME="transparentatStart" VALUE="true">

<PARAM NAME="autoStart" VALUE="true">

<PARAM NAME="showControls" VALUE="true">

<EMBED type="application/x-mplayer2"

pluginspage = "http://www.microsoft.com/Windows/MediaPlayer/"

SRC="<? $movielink ?>"

name="MediaPlayer"

width="<? $playerwidth ?>";

height="<? $playerheight ?>";

AutoStart=true>

</EMBED>

</OBJECT>

Opserty
06-16-2008, 06:20 AM
Is it not possible just to stick this code in a template?

You need to eval the embed code as a string, look at the way vBulletin does it to the templates.

King Kovifor
06-16-2008, 02:18 PM
Do as Opserty has said and use a template and then use something along the lines of:

eval("$embedded_code = '" . fetch_template('my_embedded_code') . "';");

Twilkey
06-16-2008, 05:53 PM
I get where I should use a template if I was storing only one or two embed cods. But I am storing many embed cods and using the database makes it easier and gives me the ability to easily add more embed codes.

Opserty
06-16-2008, 06:29 PM
Well eval() your embed code as though it was a template, so instead of fetch_template(...), you have your embed code.

Twilkey
06-16-2008, 10:09 PM
Ok I dont know if I am just not understanding you right or what. I have tried what you suggested, but yet it doesnt want to work for me. I dont know, maybe I am missing a period or something somewhere.