Avatar billede vind Nybegynder
06. september 2005 - 15:14 Der er 18 kommentarer og
1 løsning

php i javascript

Jeg har en lille lysavis kørende i mit cms (tidl.mambo).
Selve php-koden i lysavisen ser sådan ud:

<?php
(...)
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
$content = "<center>
<script language=\"JavaScript1.2\">
var scrollerwidth=120
var scrollerheight=80
var scrollerbgcolor='transparent'
var scrollerbackground='scrollerback.gif'
var messages=new Array()
messages[0]=\"ticker 1\"
messages[1]=\"ticker 2\"
messages[2]=\"ticker 3\"
messages[3]=\"ticker 4\"
//add more messages here if needed

(...)

I stedet for at skulle rette de fire tekster manuelt, så vil jeg lade scriptet hente teksten i en database.
Derfor vil jeg benytte nedenstående kode - eller noget lignende - til at hente beskederne frem:
<?php
$connection = mysql_connect("localhost","**login**","**pass**");
mysql_select_db("**database**", $connection);

$query = mysql_query("SELECT * FROM lysavis ORDER BY id");
while($row = mysql_fetch_array($query)) {

echo"
$row[ticker1]

";
}
?>
(rækkerne hedder "ticker1", "ticker2", "ticker3", "ticker4".
Jeg havde så forestillet mig at indsætte overstående script ind ved hver linje.
Mit problem er simpelthen, at det ikke virker! Jeg har forsøgt mange ting, men hver gang melder den fejl. Ofte er fejlen noget med et forkert ' eller ", men uanset hvad jeg gør, så hjælper det ikke.
Som I nok kan se af overstående er jeg bestemt ikke nogen php/mysql-ørn, så lidt hjælp vil blive påskønnet. :-)

Jeg vil meget gerne uddybe problemet, hvis det er skrevet lidt uforståeligt. :)

På forhånd tak.
Andreas V.
Avatar billede Slettet bruger
06. september 2005 - 15:22 #1
while($row = mysql_fetch_array($query)) {

echo 'messages[0]=\"' . $row['ticker1'] . '\";' . "\n";
echo 'messages[1]=\"' . $row['ticker2'] . '\";' . "\n";
echo 'messages[2]=\"' . $row['ticker3'] . '\";' . "\n";
echo 'messages[3]=\"' . $row['ticker4'] . '\";' . "\n";

}
Avatar billede dmdisco Nybegynder
06. september 2005 - 15:23 #2
echo "messages[0]=\"$row[ticker1]\"";
Avatar billede showsource Seniormester
06. september 2005 - 15:24 #3
$i = 0;
while($row = mysql_fetch_array($query)) {

echo"messages[". $i ."] = \"". $row["ticker"] ."\"\r\n";
$i++;
}

Her er så kun en kolonne, "ticker" og tabellen har så et row for hver tekst
Avatar billede showsource Seniormester
06. september 2005 - 15:28 #4
evt.
$i = 0;
$nr = 1;
while($row = mysql_fetch_array($query)) {

echo"messages[". $i ."] = \"". $row["ticker". $nr] ."\";\r\n";
$nr++;
$i++;
}
Avatar billede vind Nybegynder
06. september 2005 - 15:33 #5
el_barto: Jeg har forsøgt mig med din løsning. Det ser sådan ud:
<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

$content = "<center>
<script language=\"JavaScript1.2\">
var scrollerwidth=120
var scrollerheight=80
var scrollerbgcolor='transparent'
var scrollerbackground='scrollerback.gif'
var messages=new Array()
<?php
$connection = mysql_connect("localhost","forening","bsforening");
mysql_select_db("elevforening", $connection);
$query = mysql_query("SELECT * FROM lysavis ORDER BY id");
while($row = mysql_fetch_array($query)) {
echo 'messages[0]=\"' . $row['ticker1'] . '\";' . "\n";
echo 'messages[1]=\"' . $row['ticker2'] . '\";' . "\n";
echo 'messages[2]=\"' . $row['ticker3'] . '\";' . "\n";
echo 'messages[3]=\"' . $row['ticker4'] . '\";' . "\n";
}
?>
//add more messages here if needed
osv.

Den kommer dog med fejl:
Parse error: parse error in /(..)/mod_iticker.php on line 39
Linje 39: $connection = mysql_connect("localhost","forening","bsforening");
Avatar billede vind Nybegynder
06. september 2005 - 15:37 #6
... og hvis jeg sætter \ foran alle ", så kommer denne fejl:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /home/www/forening/mambo/modules/mod_iticker.php on line 43.

Linje 43: echo 'messages[0]=\"' . $row['ticker1'] . '\";' . "\n";
Avatar billede Slettet bruger
06. september 2005 - 15:50 #7
Jamen du roder jo også rundt i PHP tags :)

<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

$content = "<center>
<script type=\"text/javascript\">
var scrollerwidth=120;
var scrollerheight=80
var scrollerbgcolor='transparent'
var scrollerbackground='scrollerback.gif'
var messages=new Array()";
$connection = mysql_connect("localhost","forening","bsforening");
mysql_select_db("elevforening", $connection);
$query = mysql_query("SELECT * FROM lysavis ORDER BY id");
while($row = mysql_fetch_array($query)) {

$content .= 'messages[0]=\"' . $row['ticker1'] . '\";' . "\n";
$content .= 'messages[1]=\"' . $row['ticker2'] . '\";' . "\n";
$content .= 'messages[2]=\"' . $row['ticker3'] . '\";' . "\n";
$content .= 'messages[3]=\"' . $row['ticker4'] . '\";' . "\n";
}
?>

Og må jeg så fraråde bruge af <center> og andet gammelt HTML-affald ;)
Avatar billede Slettet bruger
06. september 2005 - 15:50 #8
Og så lige et par
;
efter de andre JS deklarationer:

var scrollerheight=80;
var scrollerbgcolor='transparent';
var scrollerbackground='scrollerback.gif';
Avatar billede vind Nybegynder
06. september 2005 - 16:04 #9
Hm. Nu kommer den igen med denne fejl:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /(..)/mod_iticker.php on line 43. Linjen er stadig denne: echo 'messages[0]=\"' . $row['ticker1'] . '\";' . "\n";

Jeg har forsøgt at lægge hele filen på nettet. Prøv tag et kig her:
http://www.vinds.dk/iticker.phps .
Avatar billede Slettet bruger
07. september 2005 - 07:42 #10
Jamen du har jo heller ikke kopieret mit helt korrekt:

<?php
// iTicker//
// $Id: mod_iticker.php,v0.1 2004/07/23 Thomas Klaey
//
// Copyright (C) 2000-2003 Miro International Pty Ltd
// All rights reserved.  Mambo Open Source is Free Software
// released under the GNU/GPL License.
//
// This source file is part of the Mambo Open Source Content
// Management System.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// The "GNU General Public License" (GPL) is available at
// http://www.gnu.org/copyleft/gpl.html.

defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

$content = "<center>
<script language=\"JavaScript1.2\">
var scrollerwidth=120;
var scrollerheight=80;
var scrollerbgcolor='transparent';
var scrollerbackground='scrollerback.gif';
var messages=new Array();";

$connection = mysql_connect("localhost","***","***");
mysql_select_db("***", $connection);
$query = mysql_query("SELECT * FROM lysavis ORDER BY id");
while($row = mysql_fetch_array($query)) {

$content .= 'messages[0]=\"' . $row['ticker1'] . '\";' . "n";
$content .= 'messages[1]=\"' . $row['ticker2'] . '\";' . "n";
$content .= 'messages[2]=\"' . $row['ticker3'] . '\";' . "n";
$content .= 'messages[3]=\"' . $row['ticker4'] . '\";' . "n";
}

//add more messages here if needed

$content .= "if (messages.length>1)
i=2
else
i=0

function move1(whichlayer){
tlayer=eval(whichlayer)
if (tlayer.top>0&&tlayer.top<=5){
tlayer.top=0
setTimeout(\"move1(tlayer)\",3000)
setTimeout(\"move2(document.main.document.second)\",3000)
return
}
if (tlayer.top>=tlayer.document.height*-1){
tlayer.top-=5
setTimeout(\"move1(tlayer)\",100)
}
else{
tlayer.top=scrollerheight
tlayer.document.write(messages[i])
tlayer.document.close()
if (i==messages.length-1)
i=0
else
i++
}
}

function move2(whichlayer){
tlayer2=eval(whichlayer)
if (tlayer2.top>0&&tlayer2.top<=5){
tlayer2.top=0
setTimeout(\"move2(tlayer2)\",3000)
setTimeout(\"move1(document.main.document.first)\",3000)
return
}
if (tlayer2.top>=tlayer2.document.height*-1){
tlayer2.top-=5
setTimeout(\"move2(tlayer2)\",100)
}
else{
tlayer2.top=scrollerheight
tlayer2.document.write(messages[i])
tlayer2.document.close()
if (i==messages.length-1)
i=0
else
i++
}
}

function move3(whichdiv){
tdiv=eval(whichdiv)
if (tdiv.style.pixelTop>0&&tdiv.style.pixelTop<=5){
tdiv.style.pixelTop=0
setTimeout(\"move3(tdiv)\",3000)
setTimeout(\"move4(second2)\",3000)
return
}
if (tdiv.style.pixelTop>=tdiv.offsetHeight*-1){
tdiv.style.pixelTop-=5
setTimeout(\"move3(tdiv)\",100)
}
else{
tdiv.style.pixelTop=scrollerheight
tdiv.innerHTML=messages[i]
if (i==messages.length-1)
i=0
else
i++
}
}

function move4(whichdiv){
tdiv2=eval(whichdiv)
if (tdiv2.style.pixelTop>0&&tdiv2.style.pixelTop<=5){
tdiv2.style.pixelTop=0
setTimeout(\"move4(tdiv2)\",3000)
setTimeout(\"move3(first2)\",3000)
return
}
if (tdiv2.style.pixelTop>=tdiv2.offsetHeight*-1){
tdiv2.style.pixelTop-=5
setTimeout(\"move4(second2)\",100)
}
else{
tdiv2.style.pixelTop=scrollerheight
tdiv2.innerHTML=messages[i]
if (i==messages.length-1)
i=0
else
i++
}
}

function startscroll(){
if (document.all){
move3(first2)
second2.style.top=scrollerheight
second2.style.visibility='visible'
}
else if (document.layers){
document.main.visibility='show'
move1(document.main.document.first)
document.main.document.second.top=scrollerheight+5
document.main.document.second.visibility='show'
}
}

window.onload=startscroll

</script>




<ilayer id=\"main\" width=&{scrollerwidth}; height=&{scrollerheight}; bgColor=&{scrollerbgcolor}; background=&{scrollerbackground}; visibility=hide>
<layer id=\"first\" left=0 top=1 width=&{scrollerwidth};>
<script language=\"JavaScript1.2\">
if (document.layers)
document.write(messages[0])
</script>
</layer>
<layer id=\"second\" left=0 top=0 width=&{scrollerwidth}; visibility=hide>
<script language=\"JavaScript1.2\">
if (document.layers)
document.write(messages[1])
</script>
</layer>
</ilayer>

<script language=\"JavaScript1.2\">
if (document.all){
document.writeln('<span id=\"main2\" style=\"position:relative;width:'+scrollerwidth+';height:'+scrollerheight+';overflow:hiden;background-color:'+scrollerbgcolor+' ;background-image:url('+scrollerbackground+')\">')
document.writeln('<div style=\"position:absolute;width:'+scrollerwidth+';height:'+scrollerheight+';clip:rect(0 '+scrollerwidth+' '+scrollerheight+' 0);left:0;top:0\">')
document.writeln('<div id=\"first2\" style=\"position:absolute;width:'+scrollerwidth+';left:0;top:1;\">')
document.write(messages[0])
document.writeln('</div>')
document.writeln('<div id=\"second2\" style=\"position:absolute;width:'+scrollerwidth+';left:0;top:0;visibility:hidden\">')
document.write(messages[1])
document.writeln('</div>')
document.writeln('</div>')
document.writeln('</span>')
}
</script>
</center>";
?>
Avatar billede vind Nybegynder
07. september 2005 - 10:49 #11
Jeg er dæleme glad for din hjælp - det er rigtig godt!
Nu synes jeg, at det begynder at lysne, men der mangler lige et enkelte skridt. Jeg har forsøgt at fjerne det ene efter det andet, for det virker stadig ikke helt. Der kommer ikke længere php-fejl (fedt!), men der kommer heller ingen tekst. Når jeg så ser i kildekoden, så ser det sådan ud:

<script language="JavaScript1.2">
var scrollerwidth='120';
var scrollerheight='80';
var scrollerbgcolor='transparent';
var scrollerbackground='scrollerback.gif';
var messages=new Array()messages[0]=\"tekst1\";nmessages[1]=\"tekst2\";nmessages[2]=\"tekst3\";nmessages[3]=\"tekst4\";nif (messages.length>1)
i=2
else
i=0

Jeg ved ikke helt hvordan man fjerner det "n", der har lusket sig ind inden "messages", samt sætter en ";" efter new Array().
Avatar billede Slettet bruger
07. september 2005 - 11:08 #12
Det med "n" var mig der havde glemt et \-tegn, \n betyder ny linie i koden. Prøv og se om ikke nedenstående er bedre:

<?php
// iTicker//
// $Id: mod_iticker.php,v0.1 2004/07/23 Thomas Klaey
//
// Copyright (C) 2000-2003 Miro International Pty Ltd
// All rights reserved.  Mambo Open Source is Free Software
// released under the GNU/GPL License.
//
// This source file is part of the Mambo Open Source Content
// Management System.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// The "GNU General Public License" (GPL) is available at
// http://www.gnu.org/copyleft/gpl.html.

defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

$content = "<center>
<script language=\"JavaScript1.2\">
var scrollerwidth=120;
var scrollerheight=80;
var scrollerbgcolor='transparent';
var scrollerbackground='scrollerback.gif';
var messages=new Array();";

$connection = mysql_connect("localhost","***","***");
mysql_select_db("***", $connection);
$query = mysql_query("SELECT * FROM lysavis ORDER BY id");
while($row = mysql_fetch_array($query)) {

$content .= 'messages[0]=\"' . $row['ticker1'] . '\";' . "\n";
$content .= 'messages[1]=\"' . $row['ticker2'] . '\";' . "\n";
$content .= 'messages[2]=\"' . $row['ticker3'] . '\";' . "\n";
$content .= 'messages[3]=\"' . $row['ticker4'] . '\";' . "\n";
}

//add more messages here if needed

$content .= "if (messages.length>1)
i=2
else
i=0

function move1(whichlayer){
tlayer=eval(whichlayer)
if (tlayer.top>0&&tlayer.top<=5){
tlayer.top=0
setTimeout(\"move1(tlayer)\",3000)
setTimeout(\"move2(document.main.document.second)\",3000)
return
}
if (tlayer.top>=tlayer.document.height*-1){
tlayer.top-=5
setTimeout(\"move1(tlayer)\",100)
}
else{
tlayer.top=scrollerheight
tlayer.document.write(messages[i])
tlayer.document.close()
if (i==messages.length-1)
i=0
else
i++
}
}

function move2(whichlayer){
tlayer2=eval(whichlayer)
if (tlayer2.top>0&&tlayer2.top<=5){
tlayer2.top=0
setTimeout(\"move2(tlayer2)\",3000)
setTimeout(\"move1(document.main.document.first)\",3000)
return
}
if (tlayer2.top>=tlayer2.document.height*-1){
tlayer2.top-=5
setTimeout(\"move2(tlayer2)\",100)
}
else{
tlayer2.top=scrollerheight
tlayer2.document.write(messages[i])
tlayer2.document.close()
if (i==messages.length-1)
i=0
else
i++
}
}

function move3(whichdiv){
tdiv=eval(whichdiv)
if (tdiv.style.pixelTop>0&&tdiv.style.pixelTop<=5){
tdiv.style.pixelTop=0
setTimeout(\"move3(tdiv)\",3000)
setTimeout(\"move4(second2)\",3000)
return
}
if (tdiv.style.pixelTop>=tdiv.offsetHeight*-1){
tdiv.style.pixelTop-=5
setTimeout(\"move3(tdiv)\",100)
}
else{
tdiv.style.pixelTop=scrollerheight
tdiv.innerHTML=messages[i]
if (i==messages.length-1)
i=0
else
i++
}
}

function move4(whichdiv){
tdiv2=eval(whichdiv)
if (tdiv2.style.pixelTop>0&&tdiv2.style.pixelTop<=5){
tdiv2.style.pixelTop=0
setTimeout(\"move4(tdiv2)\",3000)
setTimeout(\"move3(first2)\",3000)
return
}
if (tdiv2.style.pixelTop>=tdiv2.offsetHeight*-1){
tdiv2.style.pixelTop-=5
setTimeout(\"move4(second2)\",100)
}
else{
tdiv2.style.pixelTop=scrollerheight
tdiv2.innerHTML=messages[i]
if (i==messages.length-1)
i=0
else
i++
}
}

function startscroll(){
if (document.all){
move3(first2)
second2.style.top=scrollerheight
second2.style.visibility='visible'
}
else if (document.layers){
document.main.visibility='show'
move1(document.main.document.first)
document.main.document.second.top=scrollerheight+5
document.main.document.second.visibility='show'
}
}

window.onload=startscroll

</script>




<ilayer id=\"main\" width=&{scrollerwidth}; height=&{scrollerheight}; bgColor=&{scrollerbgcolor}; background=&{scrollerbackground}; visibility=hide>
<layer id=\"first\" left=0 top=1 width=&{scrollerwidth};>
<script language=\"JavaScript1.2\">
if (document.layers)
document.write(messages[0])
</script>
</layer>
<layer id=\"second\" left=0 top=0 width=&{scrollerwidth}; visibility=hide>
<script language=\"JavaScript1.2\">
if (document.layers)
document.write(messages[1])
</script>
</layer>
</ilayer>

<script language=\"JavaScript1.2\">
if (document.all){
document.writeln('<span id=\"main2\" style=\"position:relative;width:'+scrollerwidth+';height:'+scrollerheight+';overflow:hiden;background-color:'+scrollerbgcolor+' ;background-image:url('+scrollerbackground+')\">')
document.writeln('<div style=\"position:absolute;width:'+scrollerwidth+';height:'+scrollerheight+';clip:rect(0 '+scrollerwidth+' '+scrollerheight+' 0);left:0;top:0\">')
document.writeln('<div id=\"first2\" style=\"position:absolute;width:'+scrollerwidth+';left:0;top:1;\">')
document.write(messages[0])
document.writeln('</div>')
document.writeln('<div id=\"second2\" style=\"position:absolute;width:'+scrollerwidth+';left:0;top:0;visibility:hidden\">')
document.write(messages[1])
document.writeln('</div>')
document.writeln('</div>')
document.writeln('</span>')
}
</script>
</center>";
?>
Avatar billede vind Nybegynder
07. september 2005 - 11:52 #13
OK - det ser lysere og lysere ud, men det virker ikke helt endnu. :)
Nu ser kildekoden således ud:

<script language="JavaScript1.2">
var scrollerwidth='120';
var scrollerheight='80';
var scrollerbgcolor='transparent';
var scrollerbackground='scrollerback.gif';
var messages=new Array()messages[0]=\"t1\";
messages[1]=\"t2\";
messages[2]=\"t3\";
messages[3]=\"t4\";
if (messages.length>1)
i=2
else
i=0

Det er altså kun mellem new Array() og messages, at der mangler et tegn.
Avatar billede Slettet bruger
07. september 2005 - 11:56 #14
Prøv at bytte

$content = "<center>
<script language=\"JavaScript1.2\">
var scrollerwidth=120;
var scrollerheight=80;
var scrollerbgcolor='transparent';
var scrollerbackground='scrollerback.gif';
var messages=new Array();";

ud med

$content = "<center>
<script language=\"JavaScript1.2\">
var scrollerwidth=120;
var scrollerheight=80;
var scrollerbgcolor='transparent';
var scrollerbackground='scrollerback.gif';
var messages=new Array();\n";
Avatar billede vind Nybegynder
07. september 2005 - 12:16 #15
Det hjalp på kildekoden, der nu ser helt rigtig ud. Men der kommer stadig ingen tekst på selve "itickeren". I stedet kommer der en fejl, der siger "scrollerwidth er ikke defineret". Denne fejl kom ikke før. Har du nogen ide om, hvad det kunne betyde?
Avatar billede Slettet bruger
07. september 2005 - 14:19 #16
Nej, men når jeg nærlæser koden kan jeg da se at det er en noget gammel og forældet kode. Den vil i hvert tilfælde ikke virke i Mozilla Firefox.

Både <ilayer> og <center> er noget der hører fortiden til. Finder du et nyere script vil jeg gerne hjælpe yderligere, men jeg har ikke mulighed for at teste da jeg ikke bruger Internet Explorer.
Avatar billede vind Nybegynder
07. september 2005 - 15:45 #17
Du har hjulpet utrolig meget og jeg er dig evig taknemmelig!
Læg et svar, så du kan få dine fuldt ud fortjente points.

Venlig hilsen
Andreas V.
Avatar billede Slettet bruger
07. september 2005 - 15:55 #18
Ellers tak, dem kan du bare tage igen selv, jeg har opgivet den der pointjagt, men hjælper gerne hvis jeg kan ;)
Avatar billede vind Nybegynder
07. september 2005 - 15:59 #19
Hm. Når jeg ikke kan give points, så må jeg jo sende dig nogle gode vibrationer, for jeg er virkelig glad for din hjælp. Nu tror jeg, at jeg kontakter scriptets ejermand og forhører denne.

/andreas.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester