# PHP-Variable aus externer Datei in Javascript einfügen



## IIIRaVeNIII (22. März 2005)

Hallo!

Also mein Titel sagts ja eigentlich schon... Ich suche nach einer Möglichkeit in einer *.js Datei (also Javascript) eine Variable aus einer *.php Datei zu laden. Das problem ist nämlich, dass ich keine Ahnung habe wie und ob man mit Javascript auf eine MySQL-Datenbank zugreifen kann!

Es sollen Datenfelder ausgelesen und danach auf eine bestimmte Art formatiert werden. danach soll das ganze über eben dieses Javascript als NewsTicker ausgegeben werden...

im Moment mache ich das auslesen der Daten und das Formatieren über PHP, ganz einfach aus dem Grund, dass ichs dort kann! also vielleicht kennt ja wer nen einfachen weg die Variable (Typ Array) aus der PHP-Datei zu bekommen! (wichtig ist, dass es auf initialisierung des Javascripts funktioniert, also die Daten nicht einfach mitgeschickt werden können, wenn das Javascript gestartet wird)

Ich hoffe es hat wer verstanden, was ich suche...

Schon mal vielen dank im vorraus!

R@ven


----------



## Sven Mintel (22. März 2005)

> Ich hoffe es hat wer verstanden, was ich suche...



Den ersten Teil schon. Wenn du es mit PHP kannst, mache es doch mit PHP.... nirgendwo steht, dass ein Javascript die Endung *.js haben muss... ebensowenig ist es ein unabwendbares Übel, dass Dateien mit der Endung *.js nicht von PHP geparst werden.

Also....referenziere in dem Dokument entweder ein PHP-Skript als JS-Datei(das PHP-Skript sollte dann JS-Code ausgeben, der Vollständigkeit halber könntest du noch den korrekten Content-Type-Header senden)...

oder konfiguriere den Server(z.B. per .htaccess ) so, dass dort auch Dateien mit der Endung *.js von PHP verarbeitet werden.




> wichtig ist, dass es auf initialisierung des Javascripts funktioniert, also die Daten nicht einfach mitgeschickt werden können, wenn das Javascript gestartet wird


.... das ist der Teil, den ich nicht verstanden habe


----------



## IIIRaVeNIII (22. März 2005)

Auf jeden Fall erstmal danke für den Tipp! das läuft sogar...   

Hab nur noch das Prob, dass ich jetzt nen Browserfehler hab! d.h. er macht zwar alles, zeigt bloß dieses nervige gelbe dreieck mit dem schwarzen ausrufezeichen an...

ich poste mal den quelltext, wahrscheinlich hab ich bloß wieder irgendwas übersehen...

```
<?php

include ('db_login.dat');

$news = array();

$dbverbindung = mysql_connect ($host, $user, $password);

$dbselect = "	SELECT *
				FROM mh04_News
				ORDER BY news_erstellt
				DESC
				LIMIT 5";

$result = mysql_db_query ($dbname, $dbselect, $dbverbindung);

$i = 0;

while ($ausgabe = mysql_fetch_array ($result))
{
	$news[$i] = "<div align=\"justify\"><b>[".$ausgabe['news_erstellt']."]</b><br><b>".$ausgabe['news_titel']."</b><br>".$ausgabe['news_text']."</div>";
	$newsid[$i] = $ausgabe['idNews'];
	$i++;
}

echo"
<script language='JavaScript1.2'>

//Einstellungen fürs Script
v_font='verdana';
v_fontSize='10px';
v_fontSizeNS4='11px';
v_fontWeight='normal';
v_fontColor='#60709F';
v_textDecoration='none';
v_fontColorHover='#EDEFF4';
v_textDecorationHover='none';
v_bgColor='#ced3e1';

v_top=0;
v_left=0;
v_width=230;
v_height=75;
v_paddingTop=2;
v_paddingLeft=2;
v_position='relative';
v_timeout=2500;
v_slideSpeed=30;
v_slideDirection=0;
v_pauseOnMouseOver=true;

v_slideStep=1;
v_textAlign='left';
v_textVAlign='middle';

//Das wird beim News Ticker angezeigt [Link,Text,Wo?]
v_content=[
['index2.php?section=home/news/aktuell&id=".$newsid[0]."','".$news[0]."','_blank'],
['index2.php?section=home/news/aktuell&id=".$newsid[1]."','".$news[1]."','_blank'],
['index2.php?section=home/news/aktuell&id=".$newsid[2]."','".$news[2]."','_blank']
];

//Einstellungen für Browserunterstützung
v_ua=navigator.userAgent;v_nS4=document.layers?1:0;v_iE=document.all&&!window.innerWidth&&v_ua.indexOf(\"MSIE\")!=-1?1:0;v_oP=v_ua.indexOf(\"Opera\")!=-1&&document.clear?1:0;v_oP7=v_oP&&document.appendChild?1:0;v_oP4=v_ua.indexOf(\"Opera\")!=-1&&!document.clear;v_kN=v_ua.indexOf(\"Konqueror\")!=-1&&parseFloat(v_ua.substring(v_ua.indexOf(\"Konqueror/\")+10))<3.1?1:0;v_count=v_content.length;v_cur=1;v_cl=0;v_d=v_slideDirection?-1:1;v_TIM=0;v_fontSize2=v_nS4&&navigator.platform.toLowerCase().indexOf(\"win\")!=-1?v_fontSizeNS4:v_fontSize;v_canPause=0;function v_getOS(a){return v_iE?document.all[a].style:v_nS4?document.layers[\"v_container\"].document.layers[a]:document.getElementById(a).style};function v_start(){var o,px;o=v_getOS(\"v_1\");px=v_oP&&!v_oP7||v_nS4?0:\"px\";if(parseInt(o.top)==v_paddingTop){v_canPause=1;if(v_count>1)v_TIM=setTimeout(\"v_canPause=0;v_slide()\",v_timeout);return}o.top=(parseInt(o.top)-v_slideStep*v_d)*v_d>v_paddingTop*v_d?parseInt(o.top)-v_slideStep*v_d+px:v_paddingTop+px;if(v_oP&&o.visibility.toLowerCase()!=\"visible\")o.visibility=\"visible\";setTimeout(\"v_start()\",v_slideSpeed)};function v_slide(){var o,o2,px;o=v_getOS(\"v_\"+v_cur);o2=v_getOS(\"v_\"+(v_cur<v_count?v_cur+1:1));px=v_oP&&!v_oP7||v_nS4?0:\"px\";if(parseInt(o2.top)==v_paddingTop){if(v_oP)o.visibility=\"hidden\";o.top=v_height*v_d+px;v_cur=v_cur<v_count?v_cur+1:1;v_canPause=1;v_TIM=setTimeout(\"v_canPause=0;v_slide()\",v_timeout);return}if(v_oP&&o2.visibility.toLowerCase()!=\"visible\")o2.visibility=\"visible\";if((parseInt(o2.top)-v_slideStep*v_d)*v_d>v_paddingTop*v_d){o.top=parseInt(o.top)-v_slideStep*v_d+px;o2.top=parseInt(o2.top)-v_slideStep*v_d+px}else{o.top=-v_height*v_d+px;o2.top=v_paddingTop+px}setTimeout(\"v_slide()\",v_slideSpeed)};if(v_nS4||v_iE||v_oP||document.getElementById&&!v_kN&&!v_oP4){
document.write(\"<style>.vnewsticker,a.vnewsticker{font-family:\"+v_font+\";font-size:\"+v_fontSize2+\";color:\"+v_fontColor+\";text-decoration:\"+v_textDecoration+\";font-weight:\"+v_fontWeight+\"}a.vnewsticker:hover{font-family:\"+v_font+\";font-size:\"+v_fontSize2+\";color:\"+v_fontColorHover+\";text-decoration:\"+v_textDecorationHover+\"}</style>\");v_temp=\"<div \"+(v_nS4?\"name\":\"id\")+\"=v_container style='position:\"+v_position+\";top:\"+v_top+\"px;left:\"+v_left+\"px;width:\"+v_width+\"px;height:\"+v_height+\"px;background:\"+v_bgColor+\";layer-background\"+(v_bgColor.indexOf(\"url(\")==0?\"-image\":\"-color\")+\":\"+v_bgColor+\";clip:rect(0,\"+v_width+\",\"+v_height+\",0);overflow:hidden'>\"+(v_iE?\"<div style='position:absolute;top:0px;left:0px;width:100%;height:100%;clip:rect(0,\"+v_width+\",\"+v_height+\",0)'>\":\"\");for(v_i=0;v_i<v_count;v_i++)
v_temp+=\"<div \"+(v_nS4?\"name\":\"id\")+\"=v_\"+(v_i+1)+\" style='position:absolute;top:\"+(v_height*v_d)+\"px;left:\"+v_paddingLeft+\"px;width:\"+(v_width-v_paddingLeft*2)+\"px;height:\"+(v_height-v_paddingTop*2)+\"px;clip:rect(0,\"+(v_width-v_paddingLeft*2)+\",\"+(v_height-v_paddingTop*2)+\",0);overflow:hidden\"+(v_oP?\";visibility:hidden\":\"\")+\";text-align:\"+v_textAlign+\"' class=vnewsticker>\"+(!v_nS4?\"<table width=\"+(v_width-v_paddingLeft*2)+\" height=\"+(v_height-v_paddingTop*2)+\" cellpadding=0 cellspacing=0 border=0><tr><td width=\"+(v_width-v_paddingLeft*2)+\" height=\"+(v_height-v_paddingTop*2)+\" align=\"+v_textAlign+\" valign=\"+v_textVAlign+\" class=vnewsticker>\":\"\")+(v_content[v_i][0]!=\"\"?\"<a href='\"+v_content[v_i][0]+\"' target='\"+v_content[v_i][2]+\"' class=vnewsticker\"+(v_pauseOnMouseOver?\" onmouseover='if(v_canPause&&v_count>1){clearTimeout(v_TIM);v_cl=1}' onmouseout='if(v_canPause&&v_count>1&&v_cl)v_TIM=setTimeout(\'v_canPause=0;v_slide();v_cl=0\',\"+v_timeout+\")'\":\"\")+\">\":\"<span\"+(v_pauseOnMouseOver?\" onmouseover='if(v_canPause&&v_count>1){clearTimeout(v_TIM);v_cl=1}' onmouseout='if(v_canPause&&v_count>1&&v_cl)v_TIM=setTimeout(\'v_canPause=0;v_slide();v_cl=0\',\"+v_timeout+\")'\":\"\")+\">\")+v_content[v_i][1]+(v_content[v_i][0]!=\"\"?\"</a>\":\"</span>\")+(!v_nS4?\"</td></tr></table>\":\"\")+\"</div>\";v_temp+=(v_iE?\"</div>\":\"\")+\"</div>\";document.write(v_temp);setTimeout(\"v_start()\",1000);if(v_nS4)onresize=function(){location.reload()}}

</script>
";

?>
```
Der untere Teil war schon so im Script enthalten... ich steig da leider nicht durch 


Also, vielleicht findet ja wer den Fehler... wie gesagt, das Ding läuft! Nur eben nicht sauber...

greetz

R@ven

P.S. achso, ich hab leider keinen Plan, wie man den Quelltext hier richtig reinsetzt, sorry!

*[**code]*  hier der Code  *[**/code]*
*[**php]*  hier der PHP-Code  *[**/php]*
*[**html]*  hier der HTML-Code  *[**/html]*


----------



## IIIRaVeNIII (23. März 2005)

Danke, man lernt ja nie aus... 

Tja, leider funktioniert das Ding doch noch nicht ganz richtig! der Fehler scheint wohl doch noch mehr zu bewirken, als nur das "gelbe Dreieck"...

es scheint irgendwie daran zu liegen, wie ich das eingebunden habe, habe ich so den Verdacht! an sich und für sich allein funktioniert beides; PHP und JavaScript, aber in Kombination wohl so nicht.

d.h. er zeigt die Sachen alle schön an, jedoch hat er wohl ein Problem mit dem mouseover, denn dann stoppt das Script!

hmm.. dabei habe ich nur die zeichenersetzung mit " > \" rüberlaufenlassen, um den echo von PHP laufen lassen zu können...

Also, wenn jemand den Fehler findet wäre schön, wenns gepostet werden würde!

THX

R@ven


----------



## Sven Mintel (23. März 2005)

Es wäre hilfreich, wenn du nicht den PHP-Code postest, sondern den geparsten Quelltext.
Falls das nicht direkt in einem HTML-Dokument steht, müssen auf jeden Fall die <script>-Tags raus.

Was besagt denn überhaupt die Fehlermeldung(aufs gelbe Icon Klicken)


----------



## IIIRaVeNIII (23. März 2005)

So, folgendes:

Mit der Fehlermeldung war nicht viel anzufangen... aber Problem ist wech. Habe es einfach mal andersrum versucht und zwar nicht " > \" sondern ' > \' und siehe da damit funktioniert es! Scheinbar war unten eine Codebereich drin, der unbedingt die " benötigt.

Also hier erstmal der gesamte Quelltext:


```
<?php

include ('db_login.dat');

$news = array();

$dbverbindung = mysql_connect ($host, $user, $password);

$dbselect = "	SELECT *
				FROM mh04_News
				ORDER BY news_erstellt
				DESC
				LIMIT 5";

$result = mysql_db_query ($dbname, $dbselect, $dbverbindung);

$i = 0;

while ($ausgabe = mysql_fetch_array ($result))
{
	$news[$i] = "<div align=\"justify\">[".$ausgabe['news_erstellt']."]<br><b>".$ausgabe['news_titel']."</b><br>".substr($ausgabe['news_text'],0,100)." ...</div>";
	$newsid[$i] = $ausgabe['idNews'];
	$i++;
}

echo'
<script language=\'JavaScript1.2\'>

// === 1 === FONT, COLORS, EXTRAS...
v_font=\'verdana\';
v_fontSize=\'10px\';
v_fontSizeNS4=\'11px\';
v_fontWeight=\'normal\';
v_fontColor=\'#60709F\';
v_textDecoration=\'none\';
v_fontColorHover=\'#EDEFF4\';//		| won\'t work
v_textDecorationHover=\'none\';//	| in Netscape4
v_bgColor=\'#ced3e1\';
// set [=\'transparent\'] for transparent
// set [=\'url(image_source)\'] for image
v_top=0;//	|
v_left=0;//	| defining
v_width=230;//	| the box
v_height=75;//	|
v_paddingTop=2;
v_paddingLeft=2;
v_position=\'relative\';// absolute/relative
v_timeout=2500;//1000 = 1 second
v_slideSpeed=30;
v_slideDirection=0;//0=down-up;1=up-down
v_pauseOnMouseOver=true;
// v2.2+ new below
v_slideStep=1;//pixels
v_textAlign=\'left\';// left/center/right
v_textVAlign=\'middle\';// top/middle/bottom - won\'t work in Netscape4

// === 2 === THE CONTENT - [\'href\',\'text\',\'target\']
// Use \'\' for href to have no link item

v_content=[
[\'\',\''.$news[0].'\',\'_blank\'],
[\'\',\''.$news[1].'\',\'_blank\'],
[\'\',\''.$news[2].'\',\'_blank\']
];

// ===
v_ua=navigator.userAgent;v_nS4=document.layers?1:0;v_iE=document.all&&!window.innerWidth&&v_ua.indexOf("MSIE")!=-1?1:0;v_oP=v_ua.indexOf("Opera")!=-1&&document.clear?1:0;v_oP7=v_oP&&document.appendChild?1:0;v_oP4=v_ua.indexOf("Opera")!=-1&&!document.clear;v_kN=v_ua.indexOf("Konqueror")!=-1&&parseFloat(v_ua.substring(v_ua.indexOf("Konqueror/")+10))<3.1?1:0;v_count=v_content.length;v_cur=1;v_cl=0;v_d=v_slideDirection?-1:1;v_TIM=0;v_fontSize2=v_nS4&&navigator.platform.toLowerCase().indexOf("win")!=-1?v_fontSizeNS4:v_fontSize;v_canPause=0;function v_getOS(a){return v_iE?document.all[a].style:v_nS4?document.layers["v_container"].document.layers[a]:document.getElementById(a).style};function v_start(){var o,px;o=v_getOS("v_1");px=v_oP&&!v_oP7||v_nS4?0:"px";if(parseInt(o.top)==v_paddingTop){v_canPause=1;if(v_count>1)v_TIM=setTimeout("v_canPause=0;v_slide()",v_timeout);return}o.top=(parseInt(o.top)-v_slideStep*v_d)*v_d>v_paddingTop*v_d?parseInt(o.top)-v_slideStep*v_d+px:v_paddingTop+px;if(v_oP&&o.visibility.toLowerCase()!="visible")o.visibility="visible";setTimeout("v_start()",v_slideSpeed)};function v_slide(){var o,o2,px;o=v_getOS("v_"+v_cur);o2=v_getOS("v_"+(v_cur<v_count?v_cur+1:1));px=v_oP&&!v_oP7||v_nS4?0:"px";if(parseInt(o2.top)==v_paddingTop){if(v_oP)o.visibility="hidden";o.top=v_height*v_d+px;v_cur=v_cur<v_count?v_cur+1:1;v_canPause=1;v_TIM=setTimeout("v_canPause=0;v_slide()",v_timeout);return}if(v_oP&&o2.visibility.toLowerCase()!="visible")o2.visibility="visible";if((parseInt(o2.top)-v_slideStep*v_d)*v_d>v_paddingTop*v_d){o.top=parseInt(o.top)-v_slideStep*v_d+px;o2.top=parseInt(o2.top)-v_slideStep*v_d+px}else{o.top=-v_height*v_d+px;o2.top=v_paddingTop+px}setTimeout("v_slide()",v_slideSpeed)};if(v_nS4||v_iE||v_oP||document.getElementById&&!v_kN&&!v_oP4){
document.write("<style>.vnewsticker,a.vnewsticker{font-family:"+v_font+";font-size:"+v_fontSize2+";color:"+v_fontColor+";text-decoration:"+v_textDecoration+";font-weight:"+v_fontWeight+"}a.vnewsticker:hover{font-family:"+v_font+";font-size:"+v_fontSize2+";color:"+v_fontColorHover+";text-decoration:"+v_textDecorationHover+"}</style>");v_temp="<div "+(v_nS4?"name":"id")+"=v_container style=\'position:"+v_position+";top:"+v_top+"px;left:"+v_left+"px;width:"+v_width+"px;height:"+v_height+"px;background:"+v_bgColor+";layer-background"+(v_bgColor.indexOf("url(")==0?"-image":"-color")+":"+v_bgColor+";clip:rect(0,"+v_width+","+v_height+",0);overflow:hidden\'>"+(v_iE?"<div style=\'position:absolute;top:0px;left:0px;width:100%;height:100%;clip:rect(0,"+v_width+","+v_height+",0)\'>":"");for(v_i=0;v_i<v_count;v_i++)
v_temp+="<div "+(v_nS4?"name":"id")+"=v_"+(v_i+1)+" style=\'position:absolute;top:"+(v_height*v_d)+"px;left:"+v_paddingLeft+"px;width:"+(v_width-v_paddingLeft*2)+"px;height:"+(v_height-v_paddingTop*2)+"px;clip:rect(0,"+(v_width-v_paddingLeft*2)+","+(v_height-v_paddingTop*2)+",0);overflow:hidden"+(v_oP?";visibility:hidden":"")+";text-align:"+v_textAlign+"\' class=vnewsticker>"+(!v_nS4?"<table width="+(v_width-v_paddingLeft*2)+" height="+(v_height-v_paddingTop*2)+" cellpadding=0 cellspacing=0 border=0><tr><td width="+(v_width-v_paddingLeft*2)+" height="+(v_height-v_paddingTop*2)+" align="+v_textAlign+" valign="+v_textVAlign+" class=vnewsticker>":"")+(v_content[v_i][0]!=""?"<a href=\'"+v_content[v_i][0]+"\' target=\'"+v_content[v_i][2]+"\' class=vnewsticker"+(v_pauseOnMouseOver?" onmouseover=\'if(v_canPause&&v_count>1){clearTimeout(v_TIM);v_cl=1}\' onmouseout=\'if(v_canPause&&v_count>1&&v_cl)v_TIM=setTimeout(\"v_canPause=0;v_slide();v_cl=0\","+v_timeout+")\'":"")+">":"<span"+(v_pauseOnMouseOver?" onmouseover=\'if(v_canPause&&v_count>1){clearTimeout(v_TIM);v_cl=1}\' onmouseout=\'if(v_canPause&&v_count>1&&v_cl)v_TIM=setTimeout(\"v_canPause=0;v_slide();v_cl=0\","+v_timeout+")\'":"")+">")+v_content[v_i][1]+(v_content[v_i][0]!=""?"</a>":"</span>")+(!v_nS4?"</td></tr></table>":"")+"</div>";v_temp+=(v_iE?"</div>":"")+"</div>";document.write(v_temp);setTimeout("v_start()",1000);if(v_nS4)onresize=function(){location.reload()}}

</script>
';

?>
```

Naja, dafür hab ich schon das nächste Problem. aber da muss ich erstmal selber hintersteigen! denn irgendwie mag er eine einzige News nicht, die ich eingegeben habe! alle anderen stellt er perfekt dar, nur eben diese eine nicht!

Aber nochmal vielen vielen Dank für den Denkanstoß!

greetz

R@ven


----------



## Sven Mintel (23. März 2005)

Enthält diese Neuigkeit zufällig einen Zeilenumbruch oder ein *'*

Wenn ja...machs weg


----------



## IIIRaVeNIII (23. März 2005)

Man bist du gut! Wow!  Genau das is das Problem...

Bloß wie kriege ichs hin, dass er damit keine Probleme mehr hat! Naja, ist doch doof, wenn ich die Neuigkeiten dem News Ticker anpassen muss...

Ne Idee?


----------



## Sven Mintel (23. März 2005)

Meine bevorzugte Methode für sowas... hab sie hier schon oft empfohlen


```
['index2.php?section=home/news/aktuell&id=".$newsid[0]."',unescape('".rawurlencode($news[0])."'),'_blank'],
```

MIt PHP per *rawurlencode()* codiert ausgeben... Javascript kann es dann über *unescape()* wieder dekodieren....störende Zeichen gibts dann keine


----------



## IIIRaVeNIII (23. März 2005)

O.O Boahh! vielen vielen Dank!

was bedeutet denn das: unescape() ?

Und kann man den rawurlencode() immer verwenden, wenn man unliebsamme Zeichen enthalten hat?

Du bist echt Top! THX

R@ven


----------



## Sven Mintel (23. März 2005)

rawurlencode() kannst du eigentlich bei sowas immer nehmen(was Praktischeres hab ich noch nicht entdeckt)...
damit hast du nur noch Zahlen, Buchstaben und % in Strings zu stehen... nichts, was einem idR. Ärger bereitet.

*unescape()* ist gewissermassen die JS-Variante des *rawurldecode()*in PHP.
Alternativ kannst du auch mit *decodeURI()*... das ist aber weniger kompatibel zu älteren Browsern.


----------

