PHP-sessie om berekening in stappen mogelijk te maken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan Derks

Johan Derks

18/12/2011 17:03:40
Quote Anchor link
Het lukt mij niet om een PHP-sessie op te zetten en met behulp daarvan een niet ingevuld formulier af te keuren en terug te tonen.

Ik begin met een file fontVortRegistrado.php met een formulier enkonduko, die ik post naar metodelektilo.php.
Onder het formulier, binnen de body uiteraard, heb ik geschreven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// open de zitting
session_start();
//  sla de drie variabelen op in de zitting
$_SESSION["fontVorto"]=document.enkonduko.fontVorto.value;
$_SESSION["fontLingvo"]=document.enkonduko.fontLingvo.value;
$_SESSION["portugalaItala"]=document.enkonduko.portugalaItala.value;
?>

Is dit misschien al fout, omdat de sessie alleen de waarden van geposte variabelen opneemt?
Goe dan ook, de volgende pagina metodelektilo begint met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php  
ini_set('display_errors',1);
error_reporting(E_ALL&~E_NOTICE);
define('TITLE','Register');
?>


(Eerst had daarachter ook weer staan 'session_start()', maar twee keer openen kan niet, bedacht ik.)

Vervolgens begint de body met
<script type="text/javascript">
if ($_SESSION["fontVorto"]=="via fontvorto" || $_SESSION["fontLingvo"]==-1)
{alert("Vi ne enskribis vian fontvorton kaj/au la fontlingvon.");
header('Location: fontVortRegistrado.php');
}
</script>

(Die waarden "via fontvorto" en -1 zijn default waarden van de inputvariabelen "fontVorto" en "fontLingvo" in het vorige formulier. Dus als er daar niets ingevuld is, moet ik terug naar dat formulier in 'fontVortRegistrado'.)
Hier komt mijn eerste probleem: Is dit de goede manier om de functie 'header' te gebruiken of moet dat window.open of zoiets zijn?

Omdat ik dacht, dat zo'n script misschien door een gebeurtenis aangeropen moet worden, heb ik het ook geprobeerd met <body onload="kontrolu()"> en in de header gezet:
<script type="text/javascript">
function kontrolu()
{if ($_SESSION["fontVorto"]=="via fontvorto" || $_SESSION["fontLingvo"]==-1)
{alert("Vi ne enskribis vian fontvorton kaj/au la fontlingvon.");
header('Location: fontVortRegistrado.php');
}
}
</script>
Dat is mijn tweede vraag: wordt zo'n script, dat in de body staat gewoon chronologisch bij het opladen van het document uitgevoerd?
En tenslotte natuurlijk: Hoe moet ik die sessie openen (bij iedere volgende pagina weer?), van gegevens voorzien en die gegevens weer gebruiken, voor weer te geven tekst (met echo, heb ik gezien), maar ook als $_SESSION-variabelen binnen javascript?
En wanneer moet ik hem afsluiten? Ik ben die() en exit() tegengekomen, maar die vereisen tekst. Mag dat dan ook lege tekst zijn?
En kan require() en include() nuttig zijn?
De bedoeling van de pagina's is om een berekening uit te voeren, waarbij de gebruiker door de pagina's geleid wordt en bij elke volgende pagina bepaalde keuzes doet om de gewenste berekening mee mogelijk te maken.
 
PHP hulp

PHP hulp

27/11/2024 16:55:50
 
Jacco Brandt

Jacco Brandt

18/12/2011 17:08:08
Quote Anchor link
document.enkonduko.fontVorto.value is javascript, wat doet die in je php-code?
 
Johan Derks

Johan Derks

19/12/2011 09:41:46
Quote Anchor link
De eerste fout! Het is het eerste formulier en dus kan ik nog geen geposte variabelen in het php-gedeelte opnemen. Ik heb de naam maar meteen veranderd in fontVortRegistrado.html, want er staat geen php-tekst meer in.
De volgende pagina metodelektilo.php begint nu met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php  
ini_set('display_errors',1);
error_reporting(E_ALL&~E_NOTICE);
define('TITLE','Register');
session_start();
$fontVorto=$_POST["fontVorto"];
$fontLingvo=$_POST["fontLingvo"];
$_SESSION["fontVorto"]=$fontVorto;
$_SESSION["fontLingvo"]=$fontLingvo;
?>

en het script om een niet-ingevuld formulier terug te krijgen luidt:
<script "text/javascript">
if ($fontVorto=="via fontvorto" || $fontLingvo==-1)
{alert("Vi ne enskribis vian fontvorton kaj/au la fontlingvon.");
header('Location: fontVortRegistrado.php');
}
</script>
Dat werkt nog niet. De pagina metodelektilo.php wordt gewoon getoond.
Mijn vragen blijven hetzelfde. Als Jacco of iemand mij verder kan helpen, ben ik erg blij!
 
Erwin H

Erwin H

19/12/2011 10:43:44
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$fontVorto
=$_POST["fontVorto"];
$fontLingvo=$_POST["fontLingvo"];
$_SESSION["fontVorto"]=$fontVorto;
$_SESSION["fontLingvo"]=$fontLingvo;
?>

Dit heeft niet zoveel zin. Je stopt de data in variabelen, om ze dan nog eens in variabelen te stoppen. Dat kan dus direct. Daarnaast controleer je niet of die element in de $_POST array wel bestaan. Bestaan ze niet dan gaat je script onderuit. Altijd checken dus met isset().

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<script "text/javascript">
if ($fontVorto=="via fontvorto" || $fontLingvo==-1)
{alert("Vi ne enskribis vian fontvorton kaj/au la fontlingvon.");
header('Location: fontVortRegistrado.php');
}
</script>

En dit lijkt meer op php dan op javascript om eerlijk te zijn. Je kan $ wel gebruiken in variabele namen in javascript, maar het is niet nodig en ook niet gebruikelijk. Daarbij vraag ik me af of deze variabelen wel bestaan in javascript, of dat het echt variabelen zijn uit je php script die je denkt te kunnen gebruiken in javascript (wat natuurlijk niet kan, php is server side, javascript is client side, die kunnen elkaar op deze manier dus niet zien).
Verder is header() geen javascript functie. Gebruik daar window.location = "fontVortRegistrado.php";
Gewijzigd op 19/12/2011 10:44:05 door Erwin H
 
Johan Derks

Johan Derks

19/12/2011 13:42:15
Quote Anchor link
Ik heb de formuliercontrole (fontVortRegistrado.html) nu gedaan met javascript en dat werkt.
Het stukje in metodElektilo, waarvan je je afvraagt of dat wel kan, is dus overbodig, hoewel ik me afvraag of het zou kunnen.
Toch heb ik $_SESSION["fontVorto"] en $_SESSION["fontLingvo"] in metodElektilo wel nodig om die aan een volgende pagina te kunnen doorgeven. Dus heb ik geschreven:
if (isset($_POST["fontVorto"]))
{$_SESSION["fontVorto"]=$_POST["fontVorto"]};
if (isset($_POST['fontLingvo']))
{$_SESSION["fontLingvo"]=$_POST["fontLingvo"]}
Helaas. Daar krijg ik steeds de foutmelding 'unexpected "}" ' op, binnen een php-script.
 
Erwin H

Erwin H

19/12/2011 14:08:33
Quote Anchor link
if (isset($_POST["fontVorto"]))
{$_SESSION["fontVorto"]=$_POST["fontVorto"]};

die punt komma moet voor het haakje sluiten. Gebruikelijke schrijfwijze is ook:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (isset($_POST["fontVorto"]))
{

  $_SESSION["fontVorto"]=$_POST["fontVorto"];
}
?>


Een groot deel van je vragen ligt zo te zien aan het ontbreken van basiskennis php. Ik zou je dan ook aanraden eerst een stapeltje tutorials van deze site door te nemen (en te begrijpen) voor je verder gaat. Ik denk dat uiteindelijk zelfs sneller zal zijn....
 
Johan Derks

Johan Derks

19/12/2011 19:06:11
Quote Anchor link
Ja, daar heb je wel gelijk in, maar het is geen kwestie van geen kennis, wel van onvoldoende training.
In Javascript, mag je de laatste statement zonder ; afsluiten, in php niet. Dat zijn van die kleine dingetjes, samenhangend met het feit, dat ik tegelijkertijd drie 'talen' moet beheersen (HTML, JS en PHP) en daarbinnen verschillende structuern (standaard, post/get, session en frameset). Dat is wel veel van het goede.
Als dan meer ervaren mensen mij, 71 jaar oud, helpen, ben ik daar zeer dankbaar voor.
Ter zake:
1. php-variabelen kun je niet gebruiken in javascript, heb ik ontdekt. Om toch invloed uit te oefenen op de lay-out en invulmogelijkheden van je formulier, moet je
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if (voorwaarde) {print'inhoud1';} else print'inhoud2';} ?>
gebruiken, denk ik.
Toch is er iets nog niet in orde met het scriptje, dat ik geschreven heb, namelijk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if ($_POST["portugalaItala"]!=-1)
    {
print'extra inhoud';}
?>

(en dan gaat de normale inhoud van de pagina verder.
Toch was de geposte waarde van "portugalaItala" echt -1.
Verder was de doelpagina geopend met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php  
............
session_start();
............

if (isset($_POST['portugalaItala']))
    {
$_SESSION["portugalaItala"]=$_POST["portugalaItala"];}
?>

Ik ben benieuwd.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/12/2011 19:24:32
Quote Anchor link
Johan Derks op 19/12/2011 19:06:11:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if ($_POST["portugalaItala"]!=-1)
    {
print'extra inhoud';}
?>

(en dan gaat de normale inhoud van de pagina verder.
Toch was de geposte waarde van "portugalaItala" echt -1.

Maar je test op waarde niet -1
 
- SanThe -

- SanThe -

19/12/2011 19:30:21
Quote Anchor link
Een $_POST-waarde uit een formulier wordt door PHP (helaas) altijd gezien als zijnde een string. Nu is het het simpelst, maar eigenlijk niet okee, om van het getal een string te maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if ($_POST["portugalaItala"] != "-1")
{

    print'extra inhoud';
}

?>


Of gebruik strval().

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if (strval($_POST["portugalaItala"]) != -1)
{

    print'extra inhoud';
}

?>


Toevoeging op 19/12/2011 19:31:43:

Ger van Steenderen op 19/12/2011 19:24:32:
Maar je test op waarde niet -1


Over het hoofd gezien.
 
Johan Derks

Johan Derks

19/12/2011 19:36:02
Quote Anchor link
Hé ja, hij doet het! Maar ik had een defaultwaarde ongelijk aan -1 opgegeven!
Dat was ik vergeten, dus door niets te vinken was aan de voowaarde =-1 voldaan.
Ik dank jullie hartelijk en hoop spoedig met een nieuw probleem te komen.
 
- SanThe -

- SanThe -

19/12/2011 19:42:57
Quote Anchor link
Johan Derks op 19/12/2011 19:36:02:
.... en hoop spoedig met een nieuw probleem te komen.


Leuk, zo'n vooruitzicht. Geweldig. ;-)
 
- Pepijn  -

- Pepijn -

19/12/2011 19:47:22
Quote Anchor link
Waarom in het spaans.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/12/2011 19:54:02
Quote Anchor link
SanThe, PHP gaat daar zelf heel makkelijk mee om. Het is niet nodig om een string die uit geatllen bestaat te typecasten.
 
Johan Derks

Johan Derks

19/12/2011 20:02:27
Quote Anchor link
Het is geen Spaans, maar Esperanto, mijn dagelijkse gezinstaal.
Overigens had de oplossing nog met iets anders te maken: met het verschil tussen checked="checked" in een checkbox en selected="selected"in een listbox of hoe dat mag heten.
Se vi volas esti vere internacia, lernu Esperanton.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/12/2011 20:39:16
Quote Anchor link
Juist ja, dat wilde ik nou net ook zeggen, lol
Met checked of selected geef je alleen maar de default waardes aan, als je dat bij een select niet doet dan is dat eerste optie.

PS. Knap dat je op je 71ste nog bezig bent met programeren, ik hoop dat ik dat ook ga redden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.