PHP + Javascript probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Ik wil voor het positioneren van een DHTML menu het volgende script gebruiken om het juiste x coordinaat te gebruiken voor deze website : http://www.vli.info/indexb.php


dit is het script:

<Script Language="JavaScript">
<!--
if((screen.width == "800") && (screen.height == "600"))
{
document.write("<? $posx='198'; ?>")
}
else if((screen.width == "1024") && (screen.height == "768"))
{
document.write("<? $posx='310'; ?>")
}
else if((screen.width == "1280") && (screen.height == "1024"))
{
document.write("<? $posx='438'; ?>")
}
else if((screen.width == "1600") && (screen.height == "1200"))
{
document.write("<? $posx='598'; ?>")
}
else
{
document.write("<? $posx='0'; ?>")
}
//-->
</Script>
De bedoeling is dat ik dus een PHP variabele dmv het javascript krijg ($posx is global) Maar wat ie dus nu schijnt te doen, is gewoon die steeds ongeacht de java if's het php stukje uitvoerd, wat altijd resulteerd in $posx =0


Weet iemand hoe ik dit moet oplossen? Zou ik bv javascript variabeles kunnen maken en in PHP opvragen of eerst converteren. (ik brul maar wat hoor..)

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Clientside != serverside...
Oftewel, je kan niet clientside en serverside mixen. Je zult het door middel van een Form (get / post) naar de server moeten posten om daar de goede javascript uit te 'spugen'

[ Voor 5% gewijzigd door gorgi_19 op 15-04-2003 17:26 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Even een korte uitleg

De server geeft aan de client de html code van de pagina. Dit doet de server door php op te starten, dat vervolgens een scriptje uitvoert. De uitvoer van het php-script wordt dus naar de client gestuurd. Als alles is verstuurd is de server klaar en doet dan ook niets meer (behalve het wachten op de volgende request natuurlijk ;))

Op dat moment krijgt de client het binnen, en je browser voert vervolgens de javascript code uit. Er is dus totaal geen link tussen de php code, dat op de server wordt uitgevoerd, en de javascript code, dat op de client wordt uitgevoerd.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
aha!! ik snappen!! :)
bedankt, ik ga het wel anders oplossen, maar ik weet nog niet hoe

Acties:
  • 0 Henk 'm!

Verwijderd

waarom voer je dit niet allemaal clientside uit ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja heb al een oplossing :D heb nu een aangepaste index.htm
die resolutie checkt en een res nummer meegeeft

<html>
<head>
<title>Van Leeuwen Internet :: voor al uw internet oplossingen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<Script Language="JavaScript1.1">
<!--
if((screen.width == "800") && (screen.height == "600"))
{
document.write("<FRAMESET rows=100%,*><FRAME name=mainFrame src=indexb.php?res=1></FRAMESET>");
}
else if((screen.width == "1024") && (screen.height == "768"))
{
document.write("<FRAMESET rows=100%,*><FRAME name=mainFrame src=indexb.php?res=2></FRAMESET>");
}
else if((screen.width == "1200") && (screen.height == "1024"))
{
document.write("<FRAMESET rows=100%,*><FRAME name=mainFrame src=indexb.php?res=3></FRAMESET>");
}
else if((screen.width == "1600") && (screen.height == "1200"))
{
document.write("<FRAMESET rows=100%,*><FRAME name=mainFrame src=indexb.php?res=4></FRAMESET>");
}
else
{
document.write("<FRAMESET rows=100%,*><FRAME name=mainFrame src=indexb.php?res=5></FRAMESET>");
}
//-->
</Script>

</html>

Acties:
  • 0 Henk 'm!

  • wim__k
  • Registratie: Februari 2003
  • Laatst online: 21-11-2020
kan je ook niet beter overwegen een "switch" te gebruiken ipv 5 if statements en 5 keer hetzelfde stukje code?

code:
1
2
3
4
5
6
7
8
9
10
11
12
var res;

switch (screen.width + "x" + screen.height)
{
    case "800x600": res = 1;
    case "1024x768": res = 2;
    case "1200x1024": res = 3;
    case "1600x1200": res = 4;
    default: res = 5;
}

document.write("<FRAMESET rows=100%,*><FRAME name=mainFrame src=indexb.php?res=" + res + "></FRAMESET>");


niet getest, maar je krijgt het idee wel lijkt me

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die switch zelf maakt op zich niet zoveel uit, het is misschien zelfs slechter, omdat er nu strings moeten worden vergelijkt, en eerst maar 2 ints.

Maar dat van die variabele is idd een veel beter (leesbaarder) idee. Er wordt bij elke optie namelijk de hele tijd hetzelfde geoutput, behalve 1 getalletje. Dan kun je dat getalletje beter in een variabele zetten

[ Voor 17% gewijzigd door .oisyn op 15-04-2003 23:01 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

waarom vraag je eigenlijk zowel de width als de height op ?
is 1 niet afdoende ?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Voor de standaard resoluties wel, maar je kunt ook dingen als 1280x960 en 1280x1024 krijgen. Het bovenstaande lijstje is nog lang niet compleet.

.oisyn: Ik vind de manier van win_k wel een stuk overzichtelijker, waardoor er minder kans is op fouten, ik denk dat het tijdsverschil hierbij toch al héél erg klein is he :)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik 'misbruik' in veel gevallen nog wel eens een switch omwille van overzichtelijkheid; in dit geval zou ik het zo doen:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
switch (true) {

  case (screen.width == 800 && screen.height == 600):
    res = 1;
    break;

  case  (screen.width == 1024 && screen.height == 768):
    res = 2;
    break;

  case  (screen.width == 1200 && screen.height == 1024):
    res = 3;
    break;

  case  (screen.width == 1600 && screen.height == 1200):
    res = 4;
    break;

  default:
    res = 5;
    break;

}

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

djluc schreef op 16 April 2003 @ 10:16:
.oisyn: Ik vind de manier van win_k wel een stuk overzichtelijker, waardoor er minder kans is op fouten, ik denk dat het tijdsverschil hierbij toch al héél erg klein is he :)
Nou ja even afgezien van het tijdsverschil en de switch zelf, ik vind het nogal niet erg netjes om verschillende waarden aan elkaar te concateneren in een string, om vervolgens die string te vergelijken om te controleren of alle waarden kloppen

voorbeeld:

JavaScript:
1
2
3
4
5
6
7
if (waarde1 == 10 && waarde2 == 100 && waarde3 == 1000)
    // ...

// tov:
var str = waarde1 + "," + waarde2 + "," + waarde3;
if (str == "10,100,1000")
    // ...



En crisp: in een degelijke programmeertaal geeft dat errors omdat je de case label 'false' meerdere keren gebruikt ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

.oisyn schreef op 16 April 2003 @ 10:54:
[...]
En crisp: in een degelijke programmeertaal geeft dat errors omdat je de case label 'false' meerdere keren gebruikt ;)
Daarom zeg ik ook 'misbruik'; eigenlijk meer bij gebrek aan bijvoorbeeld een selec (RPG). Ik neem aan dat andere degelijke programmeertalen daar ook wel betere constructies voor hebben ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

crisp: niet direct, maar imho is er niets mis aan een aantal if-else-if statements :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
ik vind het nogal niet erg netjes om verschillende waarden aan elkaar te concateneren in een string, om vervolgens die string te vergelijken om te controleren of alle waarden kloppen
Ik heb ook niet gezegd dat ik dat beter vond, alleen het gebruik van een switch statement in verband met de overzichtelijkheid.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom is dit niet overzichtelijk?

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
var res;
if (width == 640 && height == 480)
    res = 1;
else if (width == 800 && height == 600)
    res = 2;
else if (width == 1024 && height == 768)
    res = 3;
else if (width == 1280 && height == 1024)
    res = 4;
else if (width == 1600 && height == 1200)
    res = 5;
else
    res = 6;


(overigens zou ik hier arrays voor gebruiken, met een opzoek algoritme, in plaats van eindeloze lijsten van ifstatements of caselabels)

[ Voor 17% gewijzigd door .oisyn op 16-04-2003 16:38 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Dat laatste zou ik inderdaad ook doen, maar dat is nu even niet zijn prob. Over de overzichtelijkheid valt idd te twistren, toch vind ik dit nog steeds een erg overzichtelijk ogende:
code:
1
2
3
4
5
6
7
8
switch (screen.width + "x" + screen.height)
{
    case "800x600": res = 1;
    case "1024x768": res = 2;
    case "1200x1024": res = 3;
    case "1600x1200": res = 4;
    default: res = 5;
}


Maargoed het is geen mooie code topic...
offtopic:
hoe krijg je dat "javascript:" boven je post, ik kan alleen [code] gebruiken.

[ Voor 39% gewijzigd door djluc op 16-04-2003 17:42 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

djluc schreef op 16 april 2003 @ 17:40:
Dat laatste zou ik inderdaad ook doen, maar dat is nu even niet zijn prob. Over de overzichtelijkheid valt idd te twistren, toch vind ik dit nog steeds een erg overzichtelijk ogende:
[...]
Maargoed het is geen mooie code topic...
In deze opzet komt er altijd 5 uit aangezien er geen breaks worden gebruikt ;)

offtopic:
[ code=javascript ] [ /code ]

[ Voor 18% gewijzigd door crisp op 16-04-2003 17:44 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

[code=taal]...[/code]

Zo kun je ook voor highlighting zorgen als de taal C, C++ of Java is

De volledige definitie is
[code[=taal[, startregel[, filenaam]]]...[/code]

hoewel ik niet weet of filenaam al ondersteund wordt... het zit iig niet in de highlighter, maar dat staat dus op de ToDo lijst

[ Voor 54% gewijzigd door .oisyn op 16-04-2003 17:45 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
En taal is dan dus javascript, geen js oid?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

djluc schreef op 16 april 2003 @ 19:20:
En taal is dan dus javascript, geen js oid?
[ code=js,1 ] kan ook, dan krijg je het zo:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function klapinuit(el, type) {

  if (el) {

    var w = el.scrollWidth;
    var cw = el.offsetWidth;
    var classpfx = 'code'+type;

    if (w > cw) {

      el.style.width = w+'px';
      el.className = classpfx + '_uit';
      if (type == 2) el.className += ' ' + getBackgroundClass(el);
      el.parentNode.parentNode.parentNode.parentNode.style.height = el.offsetHeight + 'px';

    } else {

      el.style.width = '';
      el.style.height = '';
      el.parentNode.parentNode.parentNode.parentNode.style.height = '';
      el.className = classpfx + '_in';

    }

  }

}

[ Voor 9% gewijzigd door crisp op 16-04-2003 20:41 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
wow jullie zitten wel stoer te posten zeg!! ik ben maar een newbie
zag mooie stukjes code staan, misschien maakt ik het nog wel wat efficienter
ik denk als newbie altijd maar, als het doet wat het moet doen, dan is het eerst wel goed
ben nog lang niet bij het hoofdstuk optimize prime.

Ow en ik heb zoveel verschillende resoluties nodig, om de postie van een DHTML menu te bepalen, Heb namelijk een site waar een tabel die in het midden van het beeld gecentreerd is. En daar heb ik een DHTML menu in die een vaste positie heeft (x,y) en. Dus bij elke resolutie moet die x en y aangepast worden. Zou niet weten hoe je een die menu anders zou moeten doen.
Pagina: 1