Avatar billede coolzone Nybegynder
15. december 2004 - 01:38 Der er 7 kommentarer og
1 løsning

PHP & Javascript

Hej

Jeg har længe lavet scripts i PHP, men er nu begyndt at kigge lidt på Javascript til noget clientside afvikling.

I den forbindelse sidder jeg og roder lidt med kombination af PHP og Javascript.

Jeg har lavet et lille script her:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da">
<head>
<style type="text/css">
<!--
body {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    font-weight: normal;
    margin: 0px 0px 0px 0px;
    padding: 0px 0px 0px 0px;
}
-->
</style>
<title>Javascript testing</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<script type="text/javascript">
<!--
function indtastning() {
    navn = prompt ("Indtast dit navn.");
}
function duerikke() {
    alert ("Du skrev ikke noget! Du skal skrive noget!"); window.location="javascript.html";
}
indtastning();
    if (navn == "" || navn == " ") duerikke();
    document.write("Dit navn er: " + navn + ", og antallet af bogstaver i navnet er:" + navn.length + "");
   
<?
$phpnavn = "document.write(navn)";
print 'document.write("Denne linie er skrevet i PHP. Alt det ovenst&aring;ende er skrevet i Javascript. Nu vil jeg overf&oslash;re Javascript variablen, som inderholder dit navn, til en PHP variabel.<br />")';
?>

<? print 'document.write("<br />Dit navn er: <span class=\"nomargin\">")'; ?>

<? print $phpnavn; ?>

<? print 'document.write("</span> og det er skrevet med PHP.")'; ?>

//-->
</script>
</body>
</html>

Jeg kan kun få det til at virke, hvis jeg starter og stopper PHP, hver kan print skal bruges. Hvis jeg har flere print sætninger indenfor de samme <? ?> så virker det ikke og skærmen er blank.

Er der nogen der ved hvorfor?
Avatar billede skovenborg Nybegynder
15. december 2004 - 01:44 #1
ovenstående virker jo egentlig fint nok (giver ingen fejl eller noget).

Men jeg tror dit problem opstår når du prøver at udskrive php-kode på flere linier. Strenge i javascript skal nemlig være på præcis samme linie, ellers giver den fejl:
<? print 'document.write("</span> og det er skrevet med PHP.")'; ?> // OK
<? print 'document.write("</span> og det er
skrevet med PHP.")'; ?> // Forkert
Avatar billede skovenborg Nybegynder
15. december 2004 - 01:47 #2
sagt på en anden måde så skal du sørge for at det output php laver skal være på samme linie (ikke bare på skærmen men også i html-koden), hvis det bliver brugt til at danne en javascript-streng (som fx "</span> og det er skrevet med PHP.", som er javascript-strengen i dette tilfælde).
Avatar billede coolzone Nybegynder
15. december 2004 - 02:03 #3
Så burde jeg kunne gøre sådan:

<?
print 'document.write("<br />Dit navn er: <span class=\"nomargin\">")';
print $phpnavn;
print 'document.write("</span> og det er skrevet med PHP.")';
?>

Men det virker ikke. Jeg får bare en blank side.
Avatar billede skovenborg Nybegynder
15. december 2004 - 02:11 #4
okay, det var det du mente ;-)

Problemmet her er faktisk at du skriver det på samme linie. Javascript-sætninger skal nemlig adskilles med semi-kolon hvis de står på samme linie (er også fint at gøre det ellers).
Når du bruger PHP og Javascript sammen på den måde er det en rigtig god ide at kigge på hvad PHP rent faktisk skriver ud. Hvis man kigger efter ser man at der med ovenstående kode kommer til at stå:
document.write("<br />Dit navn er: <span class=\"nomargin\">")document.write(navn)document.write("</span> og det er skrevet med PHP.")

Læg mærke til at efter document.write() er færdig kommer der ingen semi-kolon, hvilket  resulterer i en javascript-fejl, som derfor medvirker til at intet bliver skrevet ud.

Løsningen er at ændre php-koden lidt, så semi-kolon kommer med:
<?
print 'document.write("<br />Dit navn er: <span class=\'nomargin\'>");';
print $phpnavn.";";
print 'document.write("</span> og det er skrevet med PHP.")';
?>
Avatar billede coolzone Nybegynder
15. december 2004 - 02:17 #5
skovenborg: Tusind tak!! :-))

Skriv lige et eller andet som svar så du kan få point.
Avatar billede skovenborg Nybegynder
15. december 2004 - 02:22 #6
okay, men giv mig ikke mere end 30 points - højest. Så svar også selv og tag de resterende 120 :-)
Avatar billede coolzone Nybegynder
15. december 2004 - 02:31 #7
Nope, du fortjener det :-)
Avatar billede skovenborg Nybegynder
15. december 2004 - 11:06 #8
nå okay - så tak for den overvældende sum af points :-)

Nu gider jeg heller ikke rode mere rundt i det end højst nødvendigt (og især ikke efter at have læst http://www.eksperten.dk/artikler/547
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