[PHP/JS] Waardes wegschrijven in spans

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil door middel van javascript een aantal waardes wegschrijven in een 3tal spans.
Op zich geen probleem.
Het probleem is echter dat ik om deze waardes te krijgen in een mysql database zal moeten kijken.
Hieronder heb ik de code van de functie staan, die ik gebruik om de waardes weg te schrijven.

Het gaat om een variabel aantal dropdownboxen waarin een school geselecteerd wordt, die hebben allemaal dus de naam school+een nummer.
Het grote probleem is dat ik op de plaats van $_POST['school'.$i] eigenlijk de value van de bijbehorende dropdownbox moet komen staan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function setCijfers(nr)
{ 
    var zone = 'zone'+nr;
    var afstand = 'afstand'+nr;
    var vergoeding = 'vergoeding'+nr;
    
    <?
        $zone = mysql_result(mysql_query("SELECT zone FROM school WHERE id=". $_POST['school'.$i]),0);
        $afstand = mysql_result(mysql_query("SELECT `".$zone."` FROM `zonetabel` WHERE `id`=".$getuser->zone),0);
        $vergoeding = mysql_result(mysql_query("SELECT `vergoeding` FROM zonekosten WHERE zones=".$afstand),0);
    ?>
    
    document.getElementById(zone).innerHTML = '<? echo $zone; ?>' ;
    document.getElementById(afstand).innerHTML = '<? echo $afstand; ?>' ;
    document.getElementById(vergoeding).innerHTML = '<? echo $vergoeding; ?>' ;
}

Hier de aanroep:
code:
1
echo '<td><select name="school'.$i.'" onChange="javascript:setCijfers('.$i.')">';

Ik ben hier gistermiddag en vanmorgen al enkele uren mee bezig geweest en misschien is er wel een makkelijkere oplossing.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Besef goed wat het verschil is tussen serverside en clientside. Kijk naar de gegenereerde sourcecode, en probeer te begrijpen waarom het niet gaat werken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik besef goed dat client en serverside verschillende dingen zijn.
Maar omdat het gewoon mogelijk is om dmv javascript een sql-query uit te laten voeren.
Probeer ik nu iets dergelijks te maken.

Dit zou voor de klant een heel welkome aanvulling van het systeem zijn.
Is er anders misschien een andere optie om bij een school met id=value van de dropdownbox
een zone te zoeken en via die zone weer de afstand tot een andere zone en via dat verschil dus weer een vergoeding?

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Misschien dat je hier wat aan hebt? http://www.phpfreakz.nl/artikelen.php?aid=83

edit:
Dat lijkt mij namelijk de juiste manier om iets dergelijks te doen.

[ Voor 35% gewijzigd door Huppie op 12-04-2005 10:41 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

Verwijderd

Als jij bijv 'setCijfers('5')' in je HTML hebt staan dan wordt de functie setCijfers uitgevoerd zoals deze door PHP is geparsed. De functie setCijfers kan dus geen php code uitvoeren, omdat dit serverside gebeurt. Je zal dus eigenlijk de functie setCijfers serverside moeten uitvoeren, dus een nieuwe pagina oproepen.

zone, afstand en vergoeding in je functie zijn dus heel iets anders dan $zone, $afstand en $vergoeding in je PHP (die in Javascript zijn clientside en de laatste zijn serverside en zijn al verdwenen en kan je dus niet meer gebruiken).

Er zal vast wel een andere mogelijkheid zijn, alleen snap ik niet helemaal wat je precies wilt :)

Wat jij volgensmij wilt is dat je drie selectiemenu's hebt. Op basis van het eerste selectiemenu wordt er een tweede selectiemenu gemaakt en op basis van die keuze wordt er weer een selectiemenu gemaakt. In dit geval zijn er twee mogelijkheden die ik zo snel kan verzinnen.

1) Je toont drie selectiemenu's waarvan je de tweede en derde disabled of leeg laat. Bij een verandering van het eerste selectiemenu (onChange) verzendt je het formulier naar de server (kun je met javascript regelen). De server voert de query uit en maakt zo het tweede menu waaruit de client een keuze kan maken. Op dezelfde manier kun je dan het derde menu maken. Let er wel op dat je niet alleen de keuze van de gebruiker checkt in PHP, maar ook kijkt welke er verandert. Als alledrie de menu's zijn gebouwd en de client kiest ineens weer een andere waarde in het eerste menu dan moet je dus het tweede menu weer opnieuw opbouwen. Deze manier wordt vaak toegepast
2) Iets minder logisch maar wel mogelijk. Met PHP haal je alle info uit de database en met JS regel je hiermee de inhoud van de menu's. Erg complex en niet logisch, voordeel is wel dat er niet steeds een nieuwe pagina geladen hoeft te worden :p

[ Voor 74% gewijzigd door Verwijderd op 12-04-2005 10:53 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De bedoeling is alsvolgt:
Er is een aantal variabel dropdown boxen, waarin scholen staan.
Wanneer uit 1 van deze dropdownboxen een school gekozen wordt, wil ik graag uit een database de bijbehorende zone, de afstand van die zone tot een andere zone en de vergoeding die voor die afstand staat uitlezen en in een 3tal spans wegschrijven.

Dit graag zonder te submitten. Zo heeft men een controle voordat het form gesubmit wordt en dus een aantal emails verzonden worden.

edit:
Dus in feite heb je per regel 1 dropdown met scholen, 1 span voor de zone, 1 voor de afstand en 1 voor de vergoeding.

Het aantal regels is variabel.

[ Voor 15% gewijzigd door Verwijderd op 12-04-2005 11:03 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 12 april 2005 @ 11:02:
De bedoeling is alsvolgt:
Er is een aantal variabel dropdown boxen, waarin scholen staan.
Wanneer uit 1 van deze dropdownboxen een school gekozen wordt, wil ik graag uit een database de bijbehorende zone, de afstand van die zone tot een andere zone en de vergoeding die voor die afstand staat uitlezen en in een 3tal spans wegschrijven.

Dit graag zonder te submitten. Zo heeft men een controle voordat het form gesubmit wordt en dus een aantal emails verzonden worden.
Dan zul je toch eerst alle info uit je db moeten halen en met javascript clientside je info in de dropdown-boxes zetten.

Waarom vind je eigenlijk dat er 'te weinig controle' is als er steeds een nieuw pagina wordt opgehaald? Het is alleen maar effecienter en als je een extra knop erbij zet na de derde keuze kan het formulier nooit verzonden worden zonder dat de gebruiker rustig de keuzes zelf heeft kunnen controleren (desnoods doe je een knop bij elke dropdown) :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Niet zo zeer te weinig controle, maar eerder het probleem om alle waarden te onthouden en iedere keer door te geven.
Met een beetje pech kan het namelijk over 40 regels gaan waarin een school gekozen moet worden.
Dan moet ik dus voor iedere regel bij gaan houden of er al een school gekozen is of niet en dus deze waarden allemaal onthouden en doorgeven.

Maar ik begrijp dus dat het niet mogelijk is, zonder te submitten?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 12 april 2005 @ 11:13:
Maar ik begrijp dus dat het niet mogelijk is, zonder te submitten?
Als je weet wat er clientside gebeurt en wat er serverside gebeurt dan weet je ook het antwoord op deze vraag :Y)

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Bovendien hoef je bij een submit toch niet perse een e-mail te versturen. Wat je bijvoorbeeld kunt doen is een hidden field gebruiken om te sturen of je een submit doet om extra data uit te lezen, of dat je een "echte" submit doet.

in je html pagina
JavaScript:
1
2
3
4
function onchangeCombo1() {
   frmFormpje.hidAction.value = "change_combo1";
   frmFormpje.submit();
}


en in je php:
PHP:
1
2
3
4
if ( $hidAction == "change_combo1" ) {
  /* doe je ding voor combo2 hier */
    ...
}


Ik snij wat bochtjes af in mn code, heb geen zin om je alles voor te kauwen, maar misschien heb je hier een opzetje waar je iets mee kan.

Het kan overigens wel volledig clientside, maar dan zul je dus de inhoud van de tabellen waarop je je combo's baseert volledig moeten meegeven naar je form. Dat betekent dus extra overhead bij het opvragen van de pagina. Het is aan jou om te kiezen wat handig is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Huppie schreef op dinsdag 12 april 2005 @ 10:39:
Misschien dat je hier wat aan hebt? http://www.phpfreakz.nl/artikelen.php?aid=83

edit:
Dat lijkt mij namelijk de juiste manier om iets dergelijks te doen.
Hier heb ik een oplossing gevonden alleen heb ik nog 1 vraagje, wat ik niet kan vinden. Ben ook geen js-guru.

Hoe geef ik een variabele mee als framenaam? Nu heb ik window.nr.location.href, maar dat werkt niet
code:
1
2
3
4
5
function updateS(nr)
{
    var school = 'school'+nr;
    window.nr.location.href = 'show.php?d=teluit&id=' + document.getElementById(school).value;
}

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Uit m'n hoofd dacht ik dat
code:
1
window(nr).location.href = 'show.php?d=teluit&id=' + document.getElementById(school).value;
het zou moeten doen ;)
edit:
typo

[ Voor 14% gewijzigd door Huppie op 12-04-2005 16:20 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

Verwijderd

wat je volgens mij wil is onclick een php script uitvoeren zonder de pagina te refreshen. dat gebruik ik tenminste en dat werkt echt super relaxed. wat je daarvoor moet doen is een functie maken die een nieuw script element in de huidige pagina aanmaakt, daarin "include" je een php pagina die javascript code genereerd. Op die manier kan je zonder te refreshen data uit een database opvragen en wegschrijven in een div oid

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

(i)frames spreek je over het algemeen zo aan:
JavaScript:
1
2
var frame = 'myframe';
parent.frames[frame].location.href = 'foo.php';

Intentionally left blank

Pagina: 1