Avatar billede gummisko Nybegynder
17. september 2005 - 14:04 Der er 20 kommentarer og
1 løsning

Tilretning af javascript til brug på php side

Hej guruer!
Er der en venlig sjæl som vil hjælpe med at få nedenstående javascript tilrettet til brug på en php-side

<SCRIPT>
var g_arrMonths = new Array()

// Enter the month names below
g_arrMonths[0] = "January"
g_arrMonths[1] = "February"
g_arrMonths[2] = "March"
g_arrMonths[3] = "April"
g_arrMonths[4] = "May"
g_arrMonths[5] = "June"
g_arrMonths[6] = "July"
g_arrMonths[7] = "August"
g_arrMonths[8] = "September"
g_arrMonths[9] = "October"
g_arrMonths[10] = "November"
g_arrMonths[11] = "December"

// Enter the column headers
var g_strDateTime = "Date / Time"
var g_strStudentScore = "Student Score"
var g_strPassingScore = "Passing Score"
var g_strResult1 = "Result"
var g_strQuestion = "Question"
var g_strCorrectAns = "Correct Answer"
var g_strResult2 = "Result"
var g_strStudentAns = "Student Answer"
var g_strPointsAwarded = "Points Awarded"
var g_strNeutral = "Neutral"
var g_strCorrect = "Correct"
var g_strIncorrect = "Incorrect"

var g_arrResults = window.opener.g_arrResults
var g_oQuizResults = window.opener.g_oQuizResults;

function AddItem(nIdx)
{
    var strResult = g_strIncorrect;
    var strClass = "INCORRECT";
    document.write("<TR>");
    document.write("<TD class='NUMBER'>" + g_arrResults[nIdx].nQuestionNum + "</TD>");
    document.write("<TD class='QUESTION'>" + g_arrResults[nIdx].strQuestion + "</TD>");
    document.write("<TD>" + g_arrResults[nIdx].strCorrectResponse + "</TD>");
    document.write("<TD>" + g_arrResults[nIdx].strStudentResponse + "</TD>");
    if (g_arrResults[nIdx].strResult == "correct")
    {
        strResult = g_strCorrect;
        strClass = "CORRECT"
    }
    else if (g_arrResults[nIdx].strResult == "neutral")
    {
        strResult = g_strNeutral
        strClass = "NEUTRAL"
    }

    document.write("<TD class='" + strClass + "'>" + strResult + "</TD>");
    document.write("<TD>" + g_arrResults[nIdx].nPoints + "</TD>");
    document.write("</TR>");
}

function FormatDate(dtmDate)
{
    var strResult = "";
    var nHours = dtmDate.getHours();
    var strAM = "am";
    var nMinutes = dtmDate.getMinutes();
    var strMinutes = "" + nMinutes;

    if (nMinutes < 10)
    {
        strMinutes = "0" + nMinutes;
    }

    if (nHours == 12)
    {
        strAM = "pm";
    }

    if (nHours > 12)
    {
        nHours -= 12;
        strAM = "pm";
    }
   

    strResult += "<P class='DATETIME'>"
    strResult += g_arrMonths[dtmDate.getMonth()] + " ";
    strResult += dtmDate.getDate() + ", ";
    strResult += dtmDate.getFullYear() + "  ";
    strResult += "</P><P class='DATETIME'>"
    strResult += nHours + ":";
    strResult += strMinutes + " ";
    strResult += strAM;
    strResult += "</P>"
    return strResult;
}

var strTitle = window.opener.document.title;
document.write("<P><H1>" + strTitle + "</H1></P>");
if (g_oQuizResults.oOptions.strName)
{
    if (g_oQuizResults.oOptions.strName.length > 0)
    {
        document.write("<P><H2>" + g_oQuizResults.oOptions.strName + "</H2></P>");
    }
}
</SCRIPT>
<P style='margin-bottom: 0;'>&nbsp;</P>

<TABLE WIDTH='600' BORDER=1 align='center'>
    <TR>
<SCRIPT>
    document.write("<TH>" + g_strDateTime + "</TH>");

    if (g_oQuizResults.oOptions.bShowUserScore)
    {   
        document.write("<TH>" + g_strStudentScore + "</TH>");
    }
    if (g_oQuizResults.oOptions.bShowPassingScore)
    {
        document.write("<TH>" + g_strPassingScore + "</TH>");
    }
    if (g_oQuizResults.oOptions.bShowShowPassFail)
    {
        document.write("<TH>" + g_strResult1 + "</TH>");
    }

</SCRIPT>
    </TR>
   
    <TR>
<SCRIPT>
    document.write("<TD class='DATE'>" + FormatDate(g_oQuizResults.dtmFinished) + "</TD>");

    if (g_oQuizResults.oOptions.bShowUserScore)
    {
        document.write("<TD class='SUMMARY'>" + g_oQuizResults.strScore + "</TD>");
    }
    if (g_oQuizResults.oOptions.bShowPassingScore)
    {
        document.write("<TD class='SUMMARY'>" + g_oQuizResults.strPassingScore + "</TD>");
    }
    if (g_oQuizResults.oOptions.bShowShowPassFail)
    {
        document.write("<TD class='SUMMARY'>" + g_oQuizResults.oOptions.strResult + "</TD>");
    }
</SCRIPT>
    </TR>
</TABLE>
<P style='margin-top: 0;'>&nbsp;</P>

<SCRIPT>
    if (g_oQuizResults.oOptions.bShowQuizReview)
    {

        document.write("<TABLE WIDTH='100%' BORDER=1>");
        document.write("<TR>");
        document.write("<TH>#</TH>");
        document.write("<TH>" + g_strQuestion + "</TH>");
        document.write("<TH>" + g_strCorrectAns + "</TH>");
        document.write("<TH>" + g_strStudentAns + "</TH>");
        document.write("<TH>" + g_strResult2 + "</TH>");
        document.write("<TH>" + g_strPointsAwarded + "</TH>");
        document.write("</TR>");


        // Sort our questions by question number
        var arrSort = new Array();

        if (g_arrResults.length > 0)
        {
            if (g_arrResults[0].bFound)
            {
                for (var i = 0; i < g_arrResults.length; i++)
                {
                    g_arrResults[i].bFound = false;
                }
            }

            for (var i = g_arrResults.length - 1; i >= 0; i--)
            {
                var nIndex = -1;
                var nMaxValue = -1;
       
                for (var j = 0; j < g_arrResults.length; j++)
                {
                    if (!g_arrResults[j].bFound && g_arrResults[j].nQuestionNum > nMaxValue)
                    {
                        nMaxValue = g_arrResults[j].nQuestionNum;
                        if (nIndex >= 0)
                        {
                            g_arrResults[nIndex].bFound = false;
                        }
                        g_arrResults[j].bFound = true;
                        nIndex = j;               
                    }
                }
                arrSort[i] = nIndex;
            }

            for (var i = 0; i < arrSort.length; i++)
            {
                AddItem(arrSort[i]);
            }
        }

        document.write("</TABLE>");
    }

</SCRIPT>


Du kan evt. se flere detaljer på http://www.eksperten.dk/spm/648780 hvor jeg desværre kom i den forkerte kategori.

På forhånd tak!!
Avatar billede nielle Nybegynder
17. september 2005 - 14:08 #1
Hvad mener du? Det er da bare at sætte det ind som det er. Det skal selvfølgeligt placeres uden for sine <?php ... ?> kode-blokke.
Avatar billede gummisko Nybegynder
17. september 2005 - 14:13 #2
har lige fået at vide af roenvig på http://www.eksperten.dk/spm/648780 at javascript ikke kan køres på en php-side???

desuden er der noget med variabel-navnene???
Avatar billede nielle Nybegynder
17. september 2005 - 14:33 #3
Skal dit JS inkluderes på en PHP-side, eller skal den skrive en form som så submitter til en PHP-side? Det er to forskellige ting.
Avatar billede gummisko Nybegynder
17. september 2005 - 14:51 #4
Den skal inkluderes på index.php
Koden til denne er i forvejen(og den virker fint!!) som følger:

<HTML>
<HEAD>
<TITLE>Send resultatet fra quizzen</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">

<?php

    $rigtige = $_POST["QuizResults"];
    $quiznavn = $_REQUEST["subject"];
    $modtagers_email = $_REQUEST["modtagers_email"];
    $din_email = $_REQUEST["din_email"];
    $navn = $_REQUEST["navn"];
    $skole = $_REQUEST["skole"];
    $klasse = $_REQUEST["klasse"];
    $kommentar = $_REQUEST["kommentar"];
   
    $bolWasPosted = ( $_SERVER['REQUEST_METHOD'] = "POST" );
    if ( $bolWasPosted )
    {
        $strTest = trim($_REQUEST["QuizResults"]);

        $strTest = str_replace( "Core Data ", "", $strTest );
        $strTest = str_replace( '"', '', $strTest );
$strTest = stripslashes( $strTest );
        $arrTest = explode(',', $strTest);


        $svar = $arrTest[6];
          $pas = $arrTest[7];
        $max = $arrTest[8];
        $min = $arrTest[9]; 
        $procent = $svar / $max * 100;
        if ( $svar >= $pas )
        {
            $besta = "Quizzen er bestået";
        }
        else
        {
            $besta ="Quizzen er ikke bestået";
        }
  }


?>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' skal være en e-mailadresse.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' skal indeholde et nummer.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' mangler.\n'; }
  } if (errors) alert('De(n) følgende fejl opstod:\n'+errors);
  document.MM_returnValue = (errors == '');
}
//-->
</script>

</HEAD>
<body text="#000000" link="#000000" vlink="#000000" alink="#000000" leftmargin="20" topmargin="20" style="color: #000000; font-family: Verdana; font-size: 8 pt" >
<img src="de_logo.jpg" width="700" height="70">
<p>



<form method="POST" action="index2.php">       
    <table>   
    <tr>
    <td width="98%" colspan="2" valign="top"><p><font face="Tahoma, Verdana" size="2"><br>
            <font size="3"><strong>Resultatet fra quizzen</strong></font></font></p> 
      <font size="2" face="Verdana, Arial, Helvetica, sans-serif">Quizzens navn: <? echo $_REQUEST["subject"]; ?> <br>
      <br>
      Antal mulige point max: <?= $max ?><br>
      Point for at bestå quizzen: <?=$pas?><br>
      Opnåede antal point: <?=$svar?>  ud af  <?=$max?> <br> 
      Resultatet i procent: <?=$procent?>%<br>   
      <?=$besta?></font><br> 
        <p><font size="2" face="Tahoma, Verdana"><strong>Her skal du udfylde
              alle felter og derefter klikke p&aring; Send. Dermed sender du
              en e-mail til din underviser.</strong><br>
        </font>
        </p>
      </td>
      </tr>
    <tr>
    <td width="30%" valign="top"><p><font face="Tahoma, Verdana" size="2">Underviserens e-mail</font></p>
      </td>
    <td width="68%" valign="top"><font face="Tahoma, Verdana" size="2"><input type="text" name="modtagers_email" size="40"></font></td>
    </tr>
    <tr>
    <td width="30%" valign="top"><p><font face="Tahoma, Verdana" size="2">Din e-mail</font></p></td>
    <td width="68%" valign="top"><font face="Tahoma, Verdana" size="2"><input type="text" name="din_email" size="40"></font></td>
      </tr>
    <tr>
    <td width="30%" valign="top"><p><font face="Tahoma, Verdana" size="2">Dit navn </font></p></td>
    <td width="68%" valign="top"><font face="Tahoma, Verdana" size="2"><input type="text" name="navn" size="40"></font></td>
      </tr>   
    <tr>
    <td width="30%" valign="top"><p><font face="Tahoma, Verdana" size="2">Din skole </font></p></td>
    <td width="68%" valign="top"><font face="Tahoma, Verdana" size="2"><input type="text" name="skole" size="40"></font></td>
      </tr>
      <tr>
    <tr>
    <td width="30%" valign="top"><p><font face="Tahoma, Verdana" size="2">Din klasse </font></p></td>
    <td width="68%" valign="top"><font face="Tahoma, Verdana" size="2"><input type="text" name="klasse" size="40"></font></td>
      </tr>   

      <tr>
    <td width="30%" valign="top"><font face="Tahoma, Verdana" size="2"><br>Kommentar til quizzen el.lign.</font></td>
    <td width="68%" valign="top"><font face="Tahoma, Verdana" size="2"> <br><textarea style="font-family:Tahoma ; font-size: 8 pt" name="kommentar" cols="50" rows="4"></textarea>
    </font></td>
  </tr>
  <tr>
    <td width="98%" colspan="2">
      <p>
      <input name="max" type="hidden" value="<?=$max?>">
      <input name="svar" type="hidden" value="<?=$svar?>">
      <input name="procent" type="hidden" value="<?=$procent?>">   
      <input name="besta" type="hidden" value="<?=$besta?>">   
      <input name="quiznavn" type="hidden" value="<?=$quiznavn?>">   
      <input name="QuizResults" type="hidden" value="<?=$strTest?>">         
      <input type="submit" value="Send" name="send"  onClick="MM_validateForm('modtagers_email','','RisEmail','din_email','','RisEmail','navn','','R','skole','','R','klasse','','R');return document.MM_returnValue">
      </p>
      </td></tr></table>
</form>
Her ses alle detaljer fra quizzen i vild forvirring:
<?php
// En foreach-løkke som udskriver alle værdierne
foreach( $arrTest as $noegle => $vaerdi ) {
    echo "[" . $noegle . "] = " . $vaerdi . "\n\n";
}
?>
HER SKAL DEN TILRETTEDE KODE INDSÆTTES SÅ ALLE DETALJER KAN SES
</body>
</html>
Avatar billede nielle Nybegynder
17. september 2005 - 15:17 #5
Jamen, så burde du også simpelthen kunne indsætte din JavaScript-kode direkte ind der hvor du har skrevet:

HER SKAL DEN TILRETTEDE KODE INDSÆTTES SÅ ALLE DETALJER KAN SES
Avatar billede gummisko Nybegynder
17. september 2005 - 15:44 #6
jamen det virker ikke!!
Det er garanteret noget nmed de variablers navne???
Avatar billede nielle Nybegynder
17. september 2005 - 15:59 #7
Har du afprøvet det på en ren HTML-side? Hvis det virker når du sætter det ind på en ren html-side så skal det også virke her.
Avatar billede gummisko Nybegynder
17. september 2005 - 16:16 #8
så vidt jeg kan se(suk) er scriptet til at åbne et nyt vindue??
Værdierne i variablerne skal jo modtages fra formularen og derefter bruges på php-siden
Her får scriptet åbenbart værdien fra window.opener.osvosv

Eller hva??
Avatar billede gummisko Nybegynder
17. september 2005 - 16:23 #9
var g_arrResults = window.opener.g_arrResults
var g_oQuizResults = window.opener.g_oQuizResults;

disse 2 skal modtage værdierne fra formularen - det må være disse 2 som skal hente en værdi med
var g_arrResults = Request(g_arrResults);
var g_oQuizResults = Request(g_oQuizResults);

men hvordan skal det skrives i javascript?? Hentes værdien sendt fra formularen med request i javascript??
Avatar billede nielle Nybegynder
17. september 2005 - 16:44 #10
Nej, Request(...) er normalt ASP-kode.

Hvor har du fået din JavaScript kode fra? Jeg treoede at det var noget du selb har lavt, men det er det så ikke.

Når der står sådan noget som:

var g_arrResults = window.opener.g_arrResults
var g_oQuizResults = window.opener.g_oQuizResults;

- så henviser det til noget på den side som har åbnet denne. Uden at kende den så mangler scriptet nogle ret vitale oplysninger.
Avatar billede gummisko Nybegynder
17. september 2005 - 16:58 #11
okay
nu prøver jeg så at sende
g_arrResults  og g_oQuizResults med fra formularen

Hvordan skriver man det i javascript??

var g_arrResults = "g_arrResults" //et array
var g_oQuizResults = "g_oQuizResults" //et objekt

eller hvordan?
Avatar billede nielle Nybegynder
17. september 2005 - 17:18 #12
Hvordan ser formularen ud?
Avatar billede gummisko Nybegynder
17. september 2005 - 17:21 #13
function SendQuiz() 
{
    var sHTML = "";
    sHTML += '<FORM id="formQuiz" method="POST" action="http://www.elearningforce.dk/mail/index.php" target="_blank">';
    sHTML += '<INPUT TYPE="hidden" NAME="QuizResults" VALUE=\'' + g_strQuizResults + '\'>';
    sHTML += '<INPUT TYPE="hidden" NAME="subject" VALUE=\'' + g_strSubject + '\'>';
    sHTML += '<INPUT TYPE="hidden" NAME="subject" VALUE=\'' + g_arrResults + '\'>';
    sHTML += '<INPUT TYPE="hidden" NAME="subject" VALUE=\'' + g_oQuizResults + '\'>';
    sHTML += '<br><input type="submit"><br>';
    sHTML += '</FORM>';
    document.getElementById("divQuiz").innerHTML = sHTML;
    document.getElementById("divQuiz").document.getElementById("formQuiz").submit();
}
Avatar billede gummisko Nybegynder
17. september 2005 - 17:22 #14
ups sorry
function SendQuiz() 
{
    var sHTML = "";
    sHTML += '<FORM id="formQuiz" method="POST" action="http://www.elearningforce.dk/mail/index.php" target="_blank">';
    sHTML += '<INPUT TYPE="hidden" NAME="QuizResults" VALUE=\'' + g_strQuizResults + '\'>';
    sHTML += '<INPUT TYPE="hidden" NAME="subject" VALUE=\'' + g_strSubject + '\'>';
    sHTML += '<INPUT TYPE="hidden" NAME="g_arrResults" VALUE=\'' + g_arrResults + '\'>';
    sHTML += '<INPUT TYPE="hidden" NAME="g_oQuizResults" VALUE=\'' + g_oQuizResults + '\'>';
    sHTML += '<br><input type="submit"><br>';
    sHTML += '</FORM>';
    document.getElementById("divQuiz").innerHTML = sHTML;
    document.getElementById("divQuiz").document.getElementById("formQuiz").submit();
}
Avatar billede nielle Nybegynder
17. september 2005 - 17:30 #15
Ok så men sådan en som:

g_arrResults

- er jo sat til sin værdi via koden:

var g_arrResults = window.opener.g_arrResults

- og det vis siga at den indeholder nogle værdiere som er sat via det vindue som opreindeligt åbnede det nuværende vindue (window.opener. ...).

Uden at vide hvad værdierne er sat til i *det* vindue, så mangler der nogle meget vigtige oplysninger.
Avatar billede gummisko Nybegynder
17. september 2005 - 17:55 #16
window.opener kan ikke gå på tværs af domæner som i dette tilfælde

vil du skrive dette:

Hvordan skriver man det i javascript når man skal have værdien af disse (der er tekst i variablerne)??

var g_arrResults = "g_arrResults" //et array med tekst
var g_oQuizResults = "g_oQuizResults" //et objekt med tekst
Avatar billede nielle Nybegynder
17. september 2005 - 18:03 #17
Af JavaScript koden fremgår det at der er tale om arraays. Normalt giver et submit af en form dig ikke et array men derimod blot en masse værdier som ikke direkte er koblet med hinanden som et array. Den ensete måde at få et array via en foram er at starte med input som et antal checkbokse:

<input type="checkbox" name="g_arrResults[]" value="Værdi 1">
<input type="checkbox" name="g_arrResults[]" value="Værdi 2">
<input type="checkbox" name="g_arrResults[]" value="Værdi 3">

- eller via en select:

<select name="g_arrResults[]" multible>
<option>Værdi 1</option>
<option>Værdi 2</option>
<option>Værdi 3</option>
</select>
Avatar billede nielle Nybegynder
17. september 2005 - 18:04 #18
Hvis du derfor står med en problemstilling hvor array-værdierne skal komme via en form i stedet fra et andet JavaScript, så er der dermed et problem med at din form skal laves fundamentalt om.
Avatar billede gummisko Nybegynder
17. september 2005 - 18:30 #19
okay
vi lukker og slukker
smid lige et svar så du kan få lidt ud af det - takker!
Avatar billede nielle Nybegynder
17. september 2005 - 18:42 #20
Nej tak til point - du har jo ikke fået en løsning på dette problem.

Jeg vil foreslå at du i stedet for at tage noget, som er baseret på en JavaScript->JavaScript løsning - og derfor er meget vanskelig at lave om til en form+PHP->JavaScript løsning, i stedet bygger en ny løsning op nede fra som passer til dette. Det er sikkert slet ikke så svært når det kommer til stykket.
Avatar billede gummisko Nybegynder
20. september 2005 - 18:42 #21
ok lukker og slukker
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