PHP-sessie om berekening in stappen mogelijk te maken
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)
1
2
3
4
5
6
7
8
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;
?>
// 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)
1
2
3
4
5
2
3
4
5
<?php
ini_set('display_errors',1);
error_reporting(E_ALL&~E_NOTICE);
define('TITLE','Register');
?>
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.
document.enkonduko.fontVorto.value is javascript, wat doet die in je php-code?
De volgende pagina metodelektilo.php begint nu met
Code (php)
1
2
3
4
5
6
7
8
9
10
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;
?>
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!
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$fontVorto=$_POST["fontVorto"];
$fontLingvo=$_POST["fontLingvo"];
$_SESSION["fontVorto"]=$fontVorto;
$_SESSION["fontLingvo"]=$fontLingvo;
?>
$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)
1
2
3
4
5
6
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>
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
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.
{$_SESSION["fontVorto"]=$_POST["fontVorto"]};
die punt komma moet voor het haakje sluiten. Gebruikelijke schrijfwijze is ook:
Code (php)
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....
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 gebruiken, denk ik.
Toch is er iets nog niet in orde met het scriptje, dat ik geschreven heb, namelijk:
(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)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
............
session_start();
............
if (isset($_POST['portugalaItala']))
{$_SESSION["portugalaItala"]=$_POST["portugalaItala"];}
?>
............
session_start();
............
if (isset($_POST['portugalaItala']))
{$_SESSION["portugalaItala"]=$_POST["portugalaItala"];}
?>
Ik ben benieuwd.
Johan Derks op 19/12/2011 19:06:11:
Maar je test op waarde niet -1
Of gebruik strval().
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.
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.
Johan Derks op 19/12/2011 19:36:02:
.... en hoop spoedig met een nieuw probleem te komen.
Leuk, zo'n vooruitzicht. Geweldig. ;-)
Waarom in het spaans.
SanThe, PHP gaat daar zelf heel makkelijk mee om. Het is niet nodig om een string die uit geatllen bestaat te typecasten.
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.
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.