[PHP] Pagina-elementen laden zonder reload

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi. Ik ben bezig met een klein onderzoekstooltje in PHP. Het is de bedoeling dat een gebruiker stap voor stap een online onderzoekje kan maken.

Hier staat een voorbeeld: http://www.odessa.nl/enquete/hoeveel.html

Als je op ok drukt wordt er een pagina uitgepoept waar je vragen en response type kan invullen. Nu wil ik ervoor zorgen dat wanneer de gebruiker response type 'lijst met nummers' of 'lijst met woorden' kiest, er direct een extra cel zichtbaar wordt waar de gebruiker het aantal antwoorden op de vraag kan invullen. Als het aantal is ingevuld moet de gebruiker op 'ok' kunnen drukken en dan moet er weer een nieuwe cel komen waarin de gebuiker het juiste aantal velden krijgt om mogelijke antwoorden op de vraag in te vullen.

Ik heb zo'n grap wel eens gemaakt met Javascript, maar ik wil het nu in PHP hebben en zonder dat de (hele) pagina opnieuw geladen hoeft te worden.

Ik krijg de indruk dat dit niet mogelijk is met PHP, want ik vind niets over events afvangen. Events afhangen is natuurlijk typisch iets wat client side gebeurt, maar ik wilde het toch even vragen voordat ik over een andere oplossing ga denken.

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Probeer eerst eens wat te lezen over wát php precies doet (serverside) en wát javascript precies doet, en wat daar het verschil tussen is.

Als je dit met PHP af wilt handelen, _BLIJF_ je namelijk altijd met een http request zitten :)
Als je de 'verborgen' gegevens al vast in je document zet, en deze onchange van visibility veranderd, zit je weer met javascript, maar heb je geen http requests.

Wat je gaat gebruiken hang af van hoe dynamisch je vragenlijst is opgebouwd, krijg je bijvoorbeeld als je bij vraag 5 antwoord A kiest, een compleet andere vragenlijst dan bijv raag B dan zou ik voor PHP gaan. Staat de volgorde van de vragenlijst vast, dan zou ik voor javascript gaan.

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Papa Eend schreef op 19 May 2003 @ 14:58:
Probeer eerst eens wat te lezen over wát php precies doet (serverside) en wát javascript precies doet, en wat daar het verschil tussen is.

Als je dit met PHP af wilt handelen, _BLIJF_ je namelijk altijd met een http request zitten :)
Als je de 'verborgen' gegevens al vast in je document zet, en deze onchange van visibility veranderd, zit je weer met javascript, maar heb je geen http requests.

Wat je gaat gebruiken hang af van hoe dynamisch je vragenlijst is opgebouwd, krijg je bijvoorbeeld als je bij vraag 5 antwoord A kiest, een compleet andere vragenlijst dan bijv raag B dan zou ik voor PHP gaan. Staat de volgorde van de vragenlijst vast, dan zou ik voor javascript gaan.
Ik begrijp best het verschil tussen PHP en Javascript. Misschien blijkt dat niet meteen uit mijn openingspost. De een is server-side en daarvoor moet dus gecommuniceerd worden met de server en de ander is client-side en kan dus zonder verdere communicatie door de client afgehandeld worden. Duidelijk.

Maarrrr, kun je misschien toelichten hoe je dit met PHP zou doen? Ik wil het geheel heel heel graag PHP-only houden, omdat ik dat gewoon fijner vind werken.
Als je een paar functies hebt waar ik op kan zoeken ben ik al zeer gelukkig.
Overigens is de vragenlijst dynamisch opgebouwd. De informatie die geladen moet worden in de nieuwe cellen zijn voor de 3 mogelijke opties verschillend.

Acties:
  • 0 Henk 'm!

  • Tranq
  • Registratie: Oktober 1999
  • Laatst online: 16-10-2024
Ik denk dat je het dan nog steeds niet goed begrijpt. Als je dit PHP only wilt maken dan moet je constant de pagina herladen om het volgende te krijgen.

Als je wilt dat het on the fly veranderd wordt zonder de pagina te herladen zal je echt aan javascripting moeten denken.

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Tranq schreef op 19 May 2003 @ 16:27:
Ik denk dat je het dan nog steeds niet goed begrijpt. Als je dit PHP only wilt maken dan moet je constant de pagina herladen om het volgende te krijgen.

Als je wilt dat het on the fly veranderd wordt zonder de pagina te herladen zal je echt aan javascripting moeten denken.
Met javascript en DHTML kun je wellicht een deel van de pagina vervangen. Ik doe dat zelf bij een bepaalde pagina bij het laden (om progress te laten zien) maar je zou misschien ook kunnen werken met document.write("<SCRIPT src=\"http://domain.tld/code.php?argumenten\">");. Voor de details moet je in W&G zijn.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Verwijderd schreef op 19 May 2003 @ 15:08:
[...]
Maarrrr, kun je misschien toelichten hoe je dit met PHP zou doen? Ik wil het geheel heel heel graag PHP-only houden, omdat ik dat gewoon fijner vind werken.
Als je een paar functies hebt waar ik op kan zoeken ben ik al zeer gelukkig.
Overigens is de vragenlijst dynamisch opgebouwd. De informatie die geladen moet worden in de nieuwe cellen zijn voor de 3 mogelijke opties verschillend.
Ik gebruik zelf de volgende functie, die voor mij helemaal perfect werkt.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
CreateSelect(Selectnaam, Database Query, naam van database veld om als value te gebruiken, naam van database veld om als text te gebruiken, geselecteerde item, javascript voor onchange);

*/
function createSelect($name, $query, $usevalue=0, $useitem=0, $selected='', $onchange='')
{
    $result = mysql_query($query);
    $onchange = (empty($onchange)) ? '' :  ' onchange="'.$onchange.'" ';
    $output = "<select name='".$name."'".$onchange.">\n<option value='' ".$selected.">Maak uw keuze</option>\n";
    while ($array = mysql_fetch_array($result))
    {
        $select = ($selected == $array[$usevalue]) ? ' selected' : '';

        $output .= '<option value="'.$array[$usevalue].'"'.$select.'>'.$array[$useitem]."</option>\n";
    }
    $output .= "</select>\n";
return($output);
}


usage:

PHP:
1
createSelect('patchkastto', 'select distinct * from patchkasten order by patchkasten_id', 'patchkasten_id', 'patchkasten_naam', $_GET['patchkastto'], 'document.forms[0].method=\'get\'; document.forms[0].submit();')


Ik zet bij de onchange de form method op get, en als de method get is weet ik zeker dat het formulier nog niet klaar is. Je zult dit dus serverside even moeten checken.

Mocht je ook nog willen dat je, als je bijv. 10 van dit soort selects onder elkaar hebt en steeds dieper een 'boomstructuur' van vragen inkomen, hang dan even een ActiveObj hidden input in het form, en zet in de onchange van een select:

JavaScript:
1
document.forms[0].elements["ActiveObj"].value = this.id 


Zo moet je wel een eindje komen denk ik :)

[ Voor 16% gewijzigd door SchizoDuckie op 19-05-2003 16:50 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

document.forms[0]... en dan maar hopen dat je niet meerdere formulieren op je pagina gebruikt ;)

maak daar dan this.form van

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Bosmonster schreef op 19 May 2003 @ 16:50:
document.forms[0]... en dan maar hopen dat je niet meerdere formulieren op je pagina gebruikt ;)

maak daar dan this.form van
Mjah, dat hangt een beetje af van wat we zelf wil, ik heb zelf nog niet meer dan 1 form op 1 pagina nodig gehad :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Niet?

Een nieuwsbrief invulboxje, een quicknav dropdowntje en een contactformuliertje op 1 pagina?

Zeg niet dat het vaak voorkomt, maar waarom dan niet met een kleine aanpassing je script WEL compatible maken.. Beetje nutteloos om het niet te doen.. maakt toch niks uit ;)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Ik vind het opzetje van papa eens opzich wel een goed systeempje, als het voor hem goed werkt perfect. Wat ik alleen jammer vind is dat je het query niet controleert, beveiligd op gevaarlijke tekens en natuurlijk op errors van de database, en natuurlijk de schrijfwijze van je sql, alles in kleine letters maargoed dat even ter zijde.

Dit is natuurlijk nog steeds niet precies hetgeen de topicstarter wil doen, het zorgt er nog steeds niet voor dat de gegevens dynamisch geladen worden.

Wat je zou kunnen doen is steeds in een ander frame een pagina laden, eventueel zelfs met een onLoad eventje wat de gegevens in het andere frame bij kan werken cq. kan vernieuwen, dan wordt de pagina niet steeds herladen maar alleen de inhoud van het onzichtbare frame.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Hij wil het zonder javascript..

Feit is dat dat onmogelijk is.. vraag me ook ten zeerste af WAAROM je het in hemelsnaam zonder zou willen. Je hebt technieken tot je beschikking die iets kunnen.. en dan ga je het proberen ZONDER die technieken te doen.. misschien leuk voor de uitdaging, maar echt nuttig is het niet...

Een aardige javascript implementatie zag ik in een ander topic: http://www.remakes.org/
Pagina: 1