PHP-Variable aus externer Datei in Javascript einfügen

IIIRaVeNIII

Mitglied
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
 
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 :)
 
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...
Code:
<?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]
;)
 
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
 
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)
 
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:

Code:
<?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
 
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?
 
Meine bevorzugte Methode für sowas... hab sie hier schon oft empfohlen:)

Code:
['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:)
 
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
 
Zurück