Avatar billede 123maka Nybegynder
28. september 2003 - 14:28 Der er 7 kommentarer og
1 løsning

sende fra en frame til en anden

på min localhost virker dette script fint. men lige så snart jeg uploader det laver det det sjove ting. Hvordan kan det være?

mit frameset:
<frameset cols=\"*,214,0\" frameborder=\"NO\" border=\"0\" framespacing=\"0\" scrolling=\"no\">
      <frame name=\"hqjre\" src=\"vis_besked.php\" scrolling=\"no\" style=\"border-right: solid 1px #000000; border-top: solid 1px #000000; border-bottom: solid 1px #000000;\">
      <frame name=\"venstre\" scrolling=\"NO\" src=\"menu.php\" scrolling=\"no\">
      <frame name=\"update_invi\" src=\"update.php\" scrolling=\"no\">
</frameset>

update.php:
<script>
chatHTML = '(noget php)';
if (parent.frames['hqjre'].opdaterSpan) {
parent.frames['hqjre'].opdaterSpan(chatHTML);
setTimeout("self.location.reload(true)",2000);
}
</script>

vis_besked.php:
<script>
function opdaterSpan(chatHTML) {
if (document.getElementById) document.getElementById("iespan").innerHTML = chatHTML;
else if (document.all) document.all["iespan"].innerHTML = chatHTML;
else if (document.layers) document["nslayer"].document.write(chatHTML);
}
</script>
<link href="css.css" rel="stylesheet" type="text/css">
<body bgcolor="#99DAFF" leftmargin="0" rightmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="parent.frames['chatindhold'].location.reload(true);">
<table width="487" border="0" cellspacing="0" cellpadding="0" height="357">
  <tr>
    <td width="23" height="122"></td>

  <td width="464" height="122" valign="top">
<span id="iespan"><layer id="nslayer">
</layer></span></td>
</tr>
</table>
Avatar billede roenving Novice
28. september 2003 - 14:37 #1
Hvor findes den frame, som hedder chatindhold ?-)

onLoad="parent.frames['chatindhold'].location.reload(true);">
Avatar billede 123maka Nybegynder
28. september 2003 - 15:11 #2
den bruges ikke...
får 2 fejl:
Linje: 4
Tegn: 30
Fejl: 'document.getElementById(...)' er null eller ikke et objekt
kode: 0

også den pga den onload
Avatar billede roenving Novice
28. september 2003 - 15:19 #3
Du skriver

chatHTML = '(noget php)';

-- er det normalt php med linjeskift og sådan ?-)

For linjeskift er ulovlige inde i en javascript-variabel, men jeg får det ikke lige til at stemme med din fejl !-)

Hvis der skal være linjeskift i chatHTML-variablen skal du bruge \n ...
Avatar billede 123maka Nybegynder
28. september 2003 - 15:54 #4
er der andre måder den kan sendes til en anden frame på?

mit php ser således ud:
<script>
chatHTML = '<?php
$chatrum_info = mysql_query("SELECT * FROM brugere WHERE id = $_SESSION[s_id]");
$chatrum = mysql_fetch_array($chatrum_info);

$hent = mysql_query("SELECT fra, til, besked FROM chat_meddelser WHERE rum = '1' AND til = '0' OR til = '$_SESSION[s_id]' ORDER BY id DESC limit 0,29") or die(mysql_error());
while ($row = mysql_fetch_array($hent)) {

$brugernavn_info = mysql_query("SELECT id,brugernavn,smiley FROM brugere WHERE id = '$row[fra]'");
$brugernavn = mysql_fetch_array($brugernavn_info);


if($row[fra] == '0') {
$fra = Chatten;
} else {
$fra = $brugernavn[brugernavn];
}

if($row[til] == '0') {
      echo"<a href=\"menu.php?cmd=sebruger&brugerid=$brugernavn[id]\" target=\"venstre\">";
      if($fra != 'Chatten') {
      echo"<img src=\"gfx/smil/"."$brugernavn[smiley]\" border=\"0\"> <b>$fra</b></a>",": $row[besked]<br>";
      } else {
      echo"$fra</a>",": $row[besked]<br>";
      }
      }
      elseif($row[til] == $_SESSION[s_id]) {
      echo"<a href=\"menu.php?cmd=sebruger&brugerid=$brugernavn[id]\" target=\"venstre\"><b>$brugernavn[brugernavn]</a> hvisker: $row[besked]</b><br>";
      }
}
?>';
if (parent.frames['hqjre'].opdaterSpan) {
parent.frames['hqjre'].opdaterSpan(chatHTML);
setTimeout("self.location.reload(true)",5000);
}
</script>
Avatar billede olebole Juniormester
11. oktober 2003 - 06:25 #5
<ole>

Det er en yderst 'grådig' måde at lave en chat på. For det første henter du 29 meddelelser hvergang ... hvorfor det? Der er da god sandsynlighed for brugeren allerede har læst mindst 25 af dem i forvejen. Tænk på, det sker hvert 5. sekund ...! I sig selv ikke et realitisk interval til chats med ret mange brugere - og slet ikke med denne kodning.

Du bør også nøjes med to DB-kald, hvor dine to sidste føjes sammen til ét joined kald.
Og brug LIMIT 1, hvis du kun leder efter en enkelt bruger i din select-query - ellers rodes resten af tabellen igennem til ingen verdens nytte.

Desuden skriver du så ineffektivt ud, som man kan. Det er helt fundamentalt i alle script-sprog, at man ikke skriver ud i en løkke, men fylder sine strenge i en buffer og skriver ud ét sted - på én gang.

Disse ting bør du absolut rette, hvis du vil lave noget ordentligt ... ellers vil du belaste serveren alt for meget.

Sidst: Brug gåseøjne ... f.eks:
  $fra = $brugernavn["brugernavn"];
Godt nok retter PHP op på sjusket kode i denne henseende, men det _er_ dårlig kode - og hvad værre er: Det en potentiel sikkerhedsbrist ikke at skrive dem.

/mvh
</bole>
Avatar billede 123maka Nybegynder
22. oktober 2003 - 15:36 #6
okay, det skal jeg huske Ole.
tak for tips'ne. Er det nogen steder jeg kan læse om de ting du nævner?
som fx.:

"Det er helt fundamentalt i alle script-sprog, at man ikke skriver ud i en løkke, men fylder sine strenge i en buffer og skriver ud ét sted - på én gang."
Avatar billede olebole Juniormester
22. oktober 2003 - 20:53 #7
Tjaahh ... jeg har set det nævnt i flere lærebøger om programmering - og derudover er den slags info ofte noget, der går i 'arv' ved undervisning.
Du kan også selv teste med et lille timer-script og så skrive en streng - der er samlet af f.eks. 1000 stumper - på forskellige måder, smtidig med du tager tid på handlingen.

Her er et link til performance-optimering af DHTML (HTML, CSS og JavaScript):
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebgen/html/dhtmlperf.asp
/mvh
Avatar billede 123maka Nybegynder
05. november 2003 - 21:55 #8
tak for det olebole :).
Lukker
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