webForumDet fria alternativet

PHP-databasinformation till JavaScript!

16 svar · 520 visningar · startad av lillebror

lillebrorMedlem sedan apr. 20041 687 inlägg
#1

Hej!

I mitt lilla webbprojekt har jag en vertikal javascroller som byter mellan två texter. Dessa texter hämtar jag från en databas genom PHP. Min fråga nu är hur jag får in dessa variabler i JavaScriptet. Krävs det något typomvandling/exportering för att detta skall funka? Är XML ett alternativ? Vore tacksam för lite tips i rätt riktning :)

Så här ser scriptet ut och det som är fetmarkerat är den text jag vill byta ut mot mina variabler:

<div id="tempholder"></div>
<script language="JavaScript" src="dhtmllib.js"></script>
<script language="JavaScript" src="scroller.js"></script>
<script language="JavaScript">

/*
Mike's DHTML scroller (By Mike Hall)
Last updated July 21st, 02' by Dynamic Drive for NS6 functionality
For this and 100's more DHTML scripts, visit [url]http://www.dynamicdrive.com[/url]
*/

//SET SCROLLER APPEARANCE AND MESSAGES
var myScroller1 = new Scroller(50, 50, 730, 40, 0, 0); //(xpos, ypos, width, height, border, padding)
myScroller1.setColors("#006600", "#ccffcc", "#009900"); //(fgcolor, bgcolor, bdcolor)
myScroller1.setFont("Verdana,Arial,Helvetica", 2);
myScroller1.addItem("[B]<b>TAF: EGJJ 221150Z 19016KT 9999 VCSH FEW008 SCT015CB 13/10 Q1008 TEMPO 5000 SHRA BKN012CB=</b>[/B]");
myScroller1.addItem("[B]<b>METAR: EGJJ 221150Z 19016KT 9999 VCSH FEW008 SCT015CB 13/10 Q1008 TEMPO 5000 SHRA BKN012CB=</b>[/B]");

//SET SCROLLER PAUSE
myScroller1.setPause(2000); //set pause beteen msgs, in milliseconds

function runmikescroll() {

  var layer;
  var mikex, mikey;

  // Locate placeholder layer so we can use it to position the scrollers.

  layer = getLayer("placeholder");
  mikex = getPageLeft(layer);
  mikey = getPageTop(layer);

  // Create the first scroller and position it.

  myScroller1.create();
  myScroller1.hide();
  myScroller1.moveTo(mikex, mikey);
  myScroller1.setzIndex(100);
  myScroller1.show();
}

window.onload=runmikescroll
</script>
<div id="placeholder" style="position:relative; width:730px; height:40px;"> </div>
jawbreakerMedlem sedan jan. 2003294 inlägg
#2

Hej!
Nu kanske jag missuppfattar dig helt, men det låter nästan som att du funderar lite för mycket...

myScroller1.addItem("<?= $minVariabel1 ?>");
myScroller1.addItem("<?= $minVariabel2 ?>");

Då förutsätter jag att du hämtar data från databasen och sparar denna data i variablerna $minVariabel1 och $minVariabel2 tidigare på sidan.

lillebrorMedlem sedan apr. 20041 687 inlägg
#3

Det är så enkelt? Så brukar jag göra när jag har php-kod i vanlig html-kod...

lillebrorMedlem sedan apr. 20041 687 inlägg
#4

Det fungerade tyvärr inte! :(

lillebrorMedlem sedan apr. 20041 687 inlägg
#5

Så här såg min kod ut som jag klippte in i javascriptet:

<?php echo showTaf("ESMS") ?>
jawbreakerMedlem sedan jan. 2003294 inlägg
#6

Om du kollar "Visa källa" för sidan när den laddat klart, hur ser koden ut då? Grejen är ju att javascriptkoden ska se ut precis som den gör i exemplet du postade till att börja med. Om den inte ser ut på samma sätt så går det kanske att gissa vad som har gått snett.
Så kolla källkoden och posta den här om du inte ser något uppenbart fel.

lillebrorMedlem sedan apr. 20041 687 inlägg
#7

Will do! :birp

lillebrorMedlem sedan apr. 20041 687 inlägg
#8

Det ser ut på följande sätt när jag kikar i källkoden:

//SET SCROLLER APPEARANCE AND MESSAGES
var myScroller1 = new Scroller(50, 50, 700, 40, 0, 0); //(xpos, ypos, width, height, border, padding)
myScroller1.setColors("#000000", "#E6E6E6", "#009900"); //(fgcolor, bgcolor, bdcolor)
myScroller1.setFont("Verdana,Arial,Helvetica", 2);
myScroller1.addItem("<b>TAF: EGJJ 221150Z 19016KT 9999 VCSH FEW008 SCT015CB 13/10 Q1008 TEMPO 5000 SHRA BKN012CB=</b>");
myScroller1.addItem("<b>
[B]ESSP 221130Z 221218 14008KT 9999 SCT030 BKN100 PROB30 1618
            RA=[/B]</b>");

//SET SCROLLER PAUSE
myScroller1.setPause(10000); //set pause beteen msgs, in milliseconds

function runmikescroll() {

  var layer;
  var mikex, mikey;

Får det ej att fungera. Det fetmarkerade är det som jag tog bort och ersatte med min php-funktion. Märkligt! :OO

jawbreakerMedlem sedan jan. 2003294 inlägg
#9

Det blir fel för att innehållet i php-variabeln innehåller radbrytningar och sådant otäckt... Testa

<?php echo ereg_replace( "[\r\n]+", "", (string)showTaf("ESMS") ) ?>

Jag har inte php installerat på min dator, så jag kan inte garantera att jag skriver helt rätt nu.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#10

Pröva:

<?php 
$brs = array("\n\r","\r\n","\n","\r");
echo str_replace($brs, "<br />", showTaf("ESMS"));
 ?>

/r Jawbreaker hann före, och fick in en fin regexp också... Grrrr! :)

nitro2k01Medlem sedan aug. 20037 630 inlägg
#11

jawbreaker » Förutsatt att regexpen är rätt (Vilket den verkar vara) så ska ditt exempel se ut så här:

<?php echo preg_replace( "[\r\n]+", "", showTaf("ESMS") ); ?>
lillebrorMedlem sedan apr. 20041 687 inlägg
#12

Jag kan bara meddela jawbreaker att din kod fungerar suveränt! nitro2k01, tack för hjälpen du med! Det är helt fantastiskt att det finns såna klippor som Ni :)

Kan man få en enkel förklaring på vad ereg_replace gör för något? :e

nitro2k01Medlem sedan aug. 20037 630 inlägg
#13

Fast jag har lärt mig ett par nya saker av jawbreaker nu, dels att det faktiskt finns nåt som heter ereg_replace, kunde jag inte ana, och dels att man kan casta i php. Så tack!
(Och lillebror, acceptera jawbreakers svar, han löste problem både för dig och mig :) )

jawbreakerMedlem sedan jan. 2003294 inlägg
#14

Ja, vilket teamwork det blev :)
Fint att det fungerade till slut i alla fall.

ereg_replace och preg_replace och diverse andra replace-funktioner i php (jag vet ärligt talat inte skillnaden på alla, såhär på rak arm), ersätter en viss sträng eller ett reguljärt uttryck i en variabel med en annan sträng, kan man säga.
Ta en titt på denna sida, så kanske det klarnar lite.

lillebrorMedlem sedan apr. 20041 687 inlägg
#15

Jag fortsätter på denna tråd eftersom det tidigare accepterade svaret löste mitt problem för samma script. Det jag vill åstadkomma då var att implementera en bit PHP-kod i ett javascript som skall visa aktuellt väder för en viss flygplats. Javascript fungerar som en textscroller. Nu vill jag att en användare genom en variabel skall kunna ställa in om han/hon vill visa:

Variabel 0 = Endast 1 st METAR (väderrapport)
Variabel 1 = Endast 1 st TAF (väderprognos)
Variabel 2 = 1 st TAF och 1 st METAR
Variabel 3 = Alla METAR efter varandra

Koden tidigare såg ut så här:

<?php echo ereg_replace( "[\r\n]+", "", (string)showTaf("ESMS") ) ?>

Den fungerar utmärkt. Nu är det på följande sätt att jag ska hämta flera poster från min databas som jag vill visa i denna textscroller.

Färdiga koden i javascriptet med PHP-koden, något avskalad ser ut så här:

//SET SCROLLER APPEARANCE AND MESSAGES
var myScroller1 = new Scroller(50, 50, 700, 40, 0, 0); //(xpos, ypos, width, height, border, padding)
myScroller1.setColors("#000000", "#e8f002;", "#009900"); //(fgcolor, bgcolor, bdcolor)
myScroller1.setFont("Verdana,Arial,Helvetica", 2);

<?php if($typeofmetartaf == 0) { ?>
myScroller1.addItem("<b>METAR: <?php echo ereg_replace( "[\r\n]+", "", (string)showMetar("ESSA") ) ?></b>");

<?php } else if($typeofmetartaf == 1) { ?>
myScroller1.addItem("<b>TAF: <?php echo ereg_replace( "[\r\n]+", "", (string)showTaf("ESMX") ) ?></b>");

<?php } else if($typeofmetartaf == 2) { ?>
myScroller1.addItem("<b>METAR: <?php echo ereg_replace( "[\r\n]+", "", (string)showMetar("ESSP") ) ?></b>");
myScroller1.addItem("<b>TAF: <?php echo ereg_replace( "[\r\n]+", "", (string)showTaf("ESPA") ) ?></b>");

<?php } else if($typeofmetartaf == 3)  { 

$MetarObj = showMetarAll();
while($row = mysql_fetch_array($MetarObj)) {
	$metar = $row['metar']; ?>
myScroller1.addItem("<b>METAR: <?php echo ereg_replace( "[\r\n]+", "", (string)$metar ) ?></b>");
<?php } }?>

If-satsen som ska vara lika med 0,1,2 fungerar bra. Då skrivs rätt information ut. Men när jag sätter värdet till 3 så vill inte koden vara med mig längre. Brottades med detta hela kvällen igår utan något resultat. Vet inte vad jag gör för fel? Någon som kan se det?

Sä här ser koden ut för den funktion som matar ut en vektor med väderinformation:

function showMetarAll() {
	
	$sqlSelect = "SELECT codeID, metar FROM tblMetar";
        $RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
return $RSObj;
}
jawbreakerMedlem sedan jan. 2003294 inlägg
#16

Det är fel i funktionen showMetarAll() - variabelnamnen stämmer inte överens. $RSobj är inte samma sak som $RSObj, så du får bestämma dig för om du vill ha ett stort eller litet "O" i namnet.

lillebrorMedlem sedan apr. 20041 687 inlägg
#17

Du har då ett tränat öga Jawbreaker ;) Tack än en gång! Trevlig midsommar!

131 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
129 ms — hämta tråd, inlägg och bilagor (db)