Session script voor taalkeuze
Ik heb even zelf een sessionscript geschreven voor een taalkeuze. Het script werkt nu zo dat ik maar 1 keer in de link $language hoef mee te schrijven en dan de session dat dan constant onthoud. Kortom hij werkt gewoon goed. Alleen onthoud hij je keuze niet als je je browser sluit. Dat is niet heel erg, maar kan uiteraard wel handig zijn.
Kunnen jullie voor mij even nagaan of dit script goed in elkaar zit? en of er verbeteringen in doorgevoerd moeten/kunnen worden?
Code (php)
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
28
29
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
28
29
<?php
session_start();
if ( isset($_GET['language']) ) { $_SESSION['language'] = $_GET['language'];
} else {
if (!empty($language)){
if ($language == 'nl') {
$_SESSION['language']='nl'; }
if ($language == "uk"){
$_SESSION['language']='uk'; }
if ($language == "d"){
$_SESSION['language']='d'; }
} else {
$_SESSION['language']='nl';
}
}
if ($_SESSION['language'] == 'nl'){$TAAL = "Nederlands";}
if ($_SESSION['language'] == 'uk'){$TAAL = "Engels";}
if ($_SESSION['language'] == 'd'){$TAAL = "Duits";}
?>
session_start();
if ( isset($_GET['language']) ) { $_SESSION['language'] = $_GET['language'];
} else {
if (!empty($language)){
if ($language == 'nl') {
$_SESSION['language']='nl'; }
if ($language == "uk"){
$_SESSION['language']='uk'; }
if ($language == "d"){
$_SESSION['language']='d'; }
} else {
$_SESSION['language']='nl';
}
}
if ($_SESSION['language'] == 'nl'){$TAAL = "Nederlands";}
if ($_SESSION['language'] == 'uk'){$TAAL = "Engels";}
if ($_SESSION['language'] == 'd'){$TAAL = "Duits";}
?>
met $TAAL print ik de huidige selectie op mijn pagina. Dit is voor mezelf ter controle. Later wil ik $_SESSION['language'] gaan gebruiken in een Query.
Niks op aan te merken ziet er gewoon goed uit.
Als je wilt dat de taalkeuze ook onthouden wordt zou je naast het gebruik van de sessie ook een cookie aan moeten maken waarin je de huidige keuze zet. Als een gebruiker vervolgens op je site komt, controleer je eerst of die cookie bestaat en of er dus een bepaalde taal geselecteerd moet worden.
Nu ziet dit er niet slecht uit, alleen hoe ben jij van plan om alle verschillende talen aan te maken?
Ik moet dit voor iemand maken die alleen weet hoe je een internetpagina moet opzoeken, dus ik zal waarschijnlijk een admin voor hem maken waarin hij verschillende talen kan schrijven, elke pagina individueel beheren.
Vroeg me af hoe jij dit gaat oplossen op een effectieve manier.
oh dit is wel een handig script!! Hoe lees je dan je variabele uit je session zeg maar (ben nog niet zo ervaren met sessies). Ik werk nu met id's ongeveer t zelfde.. maar dit lijkt me handiger. Zou leuk zijn als het idd onthouden werd. Ik blijf dit toppic wel ff volgen om te kijken of er een oplossing uit komt :) (of pm me ff ;) )
$language schrijf ik binnen mijn website alleen weg als ik op een van de drie talenknoppen druk. Wanneer er niet is gekozen dan is de standaard taal Nederlands. De variabel lees ik uit mijn sessie door middel van de laatste 3 regels script.
@patrick
Nu ik het script zo heb gemaakt kan ik straks gewoon dit gebruiken:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if ($_SESSION['language'] == 'nl'){
// vul hier je query in voor het selecteren van de nederlandse tekst.
}
?>
if ($_SESSION['language'] == 'nl'){
// vul hier je query in voor het selecteren van de nederlandse tekst.
}
?>
Wat ik straks gewoon in mijn database zet zijn 3 tabellen voor de inhoud van de pagina's. De structuur van de tabellen blijft bij alle drie hetzelfde bijvoorbeeld, "page_id, titel, tekst". Alleen de inhoud van de 3 tabellen bevat dan een andere taal. Wat je dan krijgt is bijvoorbeeld:
Code (php)
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
28
29
30
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
28
29
30
<?php
if ($_SESSION['language'] == 'nl'){
$query = "SELECT * FROM text_nederlands";
$result = mysql_query($query);
}
if ($_SESSION['language'] == 'd'){
$query = "SELECT * FROM text_duits";
$result = mysql_query($query);
}
if ($_SESSION['language'] == 'uk'){
$query = "SELECT * FROM text_engels";
$result = mysql_query($query);
}
// Printen wat geselecteerd is:
$row = mysql_fetch_array($result);
echo"$row[titel]<br>$row[text]";
?>
if ($_SESSION['language'] == 'nl'){
$query = "SELECT * FROM text_nederlands";
$result = mysql_query($query);
}
if ($_SESSION['language'] == 'd'){
$query = "SELECT * FROM text_duits";
$result = mysql_query($query);
}
if ($_SESSION['language'] == 'uk'){
$query = "SELECT * FROM text_engels";
$result = mysql_query($query);
}
// Printen wat geselecteerd is:
$row = mysql_fetch_array($result);
echo"$row[titel]<br>$row[text]";
?>
@frank:
Wat je inderdaad moet doen is een backend maken voor een admin waarin hij in 3 velden de drie verschillende talen kwijt kan per pagina. Deze laat je dan respectievelijk wegschrijven in de goede tabel.
@Blanche:
is er een snelle en even simpele manier om cookies weg te schrijven?
Code (php)
? (klopt mijn veronderstelling?)
Bram schreef op 22.02.2007 13:39:
@frank:
Wat je inderdaad moet doen is een backend maken voor een admin waarin hij in 3 velden de drie verschillende talen kwijt kan per pagina. Deze laat je dan respectievelijk wegschrijven in de goede tabel.
Wat je inderdaad moet doen is een backend maken voor een admin waarin hij in 3 velden de drie verschillende talen kwijt kan per pagina. Deze laat je dan respectievelijk wegschrijven in de goede tabel.
Wat bedoel je hier precies mee?
@Blanche
Bedankt ^^ ik ga op onderzoek uit en post een oplossing wanneer ik deze heb voor een simpel cookie script.
frank schreef op 22.02.2007 13:49:
je moet dus op de pagina waarop je kan kiezen welke taal je wil het volledige script neerzetten. En op de overige pagina's alleen:
? (klopt mijn veronderstelling?)
Code (php)
? (klopt mijn veronderstelling?)
Nou ik heb alles zowieso maar op 1 pagina staan aangezien men website dynamisch wordt (maar dat is een ander verhaal). Kortom het totale script word bij mij op elke pagina gecontroleerd.
De laatste 3 regels welke jij van mij quote, zijn voor mezelf om te controleren of mijn script werkt. Als ik namelijk $TAAL zou printen kan ik zien welke taal ik geselecteerd heb. Later verwerk ik dit in mijn Query waarmee ik de juiste tekst uit de database haal, zoals ik hierboven al beschreven heb.
@Blanche:
Ik heb het geprobeerd en het werkt, maar ik weet niet of ik de setcookie zo goed heb toegepast. Klopt het zo? Iemand anders overigens nog verbeteringen aan het script?
Code (php)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
// LANGUAGE SELECT
session_start();
if (isset($_GET['language']))
{$_SESSION['language'] = $_GET['language'];
setcookie ("languagecookie", $_GET['language'],time()+60*60*24*365);
} else {
if (!empty($language)){
if ($language == 'nl') {
$_SESSION['language']='nl';
setcookie ("languagecookie", "nl",time()+60*60*24*365);
}
if ($language == "uk"){
$_SESSION['language']='uk';
setcookie ("languagecookie", "uk",time()+60*60*24*365);
}
if ($language == "d"){
$_SESSION['language']='d';
setcookie ("languagecookie", "d",time()+60*60*24*365);
}
} else {
if (empty($languagecookie)) { $_SESSION['language']='nl'; }
if ($languagecookie == 'nl') { $_SESSION['language']='nl'; }
if ($languagecookie == 'uk') { $_SESSION['language']='uk'; }
if ($languagecookie == 'd') { $_SESSION['language']='d'; }
}
}
// EINDE LANGUAGE SELECT
if ($_SESSION['language'] == 'nl'){$TAAL = "Nederlands";}
if ($_SESSION['language'] == 'uk'){$TAAL = "Engels";}
if ($_SESSION['language'] == 'd' ){$TAAL = "Duits";}
// De taal is nu geselecteerd uit je cookie of je selectie
echo"Geselecteerde taal: $TAAL";
?>
// LANGUAGE SELECT
session_start();
if (isset($_GET['language']))
{$_SESSION['language'] = $_GET['language'];
setcookie ("languagecookie", $_GET['language'],time()+60*60*24*365);
} else {
if (!empty($language)){
if ($language == 'nl') {
$_SESSION['language']='nl';
setcookie ("languagecookie", "nl",time()+60*60*24*365);
}
if ($language == "uk"){
$_SESSION['language']='uk';
setcookie ("languagecookie", "uk",time()+60*60*24*365);
}
if ($language == "d"){
$_SESSION['language']='d';
setcookie ("languagecookie", "d",time()+60*60*24*365);
}
} else {
if (empty($languagecookie)) { $_SESSION['language']='nl'; }
if ($languagecookie == 'nl') { $_SESSION['language']='nl'; }
if ($languagecookie == 'uk') { $_SESSION['language']='uk'; }
if ($languagecookie == 'd') { $_SESSION['language']='d'; }
}
}
// EINDE LANGUAGE SELECT
if ($_SESSION['language'] == 'nl'){$TAAL = "Nederlands";}
if ($_SESSION['language'] == 'uk'){$TAAL = "Engels";}
if ($_SESSION['language'] == 'd' ){$TAAL = "Duits";}
// De taal is nu geselecteerd uit je cookie of je selectie
echo"Geselecteerde taal: $TAAL";
?>
Gewijzigd op 01/01/1970 01:00:00 door Bram
Je controleert nu of $languagecookie een waarde heeft, maar hoe kom je aan die variabele?
setcookie ("languagecookie", "d",time()+60*60*24*365);
met variabele naam: "lanquagecookie" en value: "d" bijvoorbeeld. Of werkt/hoort dat niet zo?
Gewijzigd op 01/01/1970 01:00:00 door Bram
Als het wel werkt, lijkt het erop dat register_globals aan staat bij jou. Dat zou ik zeker uitzetten in je php.ini aangezien dit een veiligheidsrisico met zich mee brengt als je niet zeer nauwkeurig script. In de nieuwere versies van php staat dit ook standaard uit.
Dat van $language is inderdaad misschien onduidelijk. Die schrijf ik mee onder een button:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?PHP
echo"
<a href=index.php?language=nl&page=$page class=menutop>nl</a>
<a href=index.php?language=uk&page=$page class=menutop>uk</a>
<a href=index.php?language=d&page=$page class=menutop>d</a>
";
?>
echo"
<a href=index.php?language=nl&page=$page class=menutop>nl</a>
<a href=index.php?language=uk&page=$page class=menutop>uk</a>
<a href=index.php?language=d&page=$page class=menutop>d</a>
";
?>
Ik gebruik dus voor de Session variabel en voor de linkvariabel dezelfde naam. Niet helemaal duidelijk dus. Ik zal het script even herschrijven.
Maar als jij een variabele ophaalt uit een link, moet je daar $_GET['language'] voor gebruiken en niet $language. Dit doet me nog meer vermoeden dat register_globals aan staat. Zie ook mijn vorige post...
Code (php)
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
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
<?php
// LANGUAGE SELECT
session_start();
if (isset($_GET['language'])) {
$_SESSION['language_selected'] = $_GET['language'];
setcookie ("languagecookie", $_GET['language'],time()+60*60*24*365);
} else {
if (empty($_COOKIE['languagecookie'])) { $_SESSION['language_selected']='nl'; }
if ($_COOKIE['languagecookie'] == 'nl') { $_SESSION['language_selected']='nl'; }
if ($_COOKIE['languagecookie'] == 'uk') { $_SESSION['language_selected']='uk'; }
if ($_COOKIE['languagecookie'] == 'd') { $_SESSION['language_selected']='d'; }
}
// EINDE LANGUAGE SELECT
if ($_SESSION['language_selected'] == 'nl'){$TAAL = "Nederlands";}
if ($_SESSION['language_selected'] == 'uk'){$TAAL = "Engels";}
if ($_SESSION['language_selected'] == 'd' ){$TAAL = "Duits";}
// De taal is nu geselecteerd uit je cookie of je selectie
echo"Geselecteerde taal: $TAAL";
?>
// LANGUAGE SELECT
session_start();
if (isset($_GET['language'])) {
$_SESSION['language_selected'] = $_GET['language'];
setcookie ("languagecookie", $_GET['language'],time()+60*60*24*365);
} else {
if (empty($_COOKIE['languagecookie'])) { $_SESSION['language_selected']='nl'; }
if ($_COOKIE['languagecookie'] == 'nl') { $_SESSION['language_selected']='nl'; }
if ($_COOKIE['languagecookie'] == 'uk') { $_SESSION['language_selected']='uk'; }
if ($_COOKIE['languagecookie'] == 'd') { $_SESSION['language_selected']='d'; }
}
// EINDE LANGUAGE SELECT
if ($_SESSION['language_selected'] == 'nl'){$TAAL = "Nederlands";}
if ($_SESSION['language_selected'] == 'uk'){$TAAL = "Engels";}
if ($_SESSION['language_selected'] == 'd' ){$TAAL = "Duits";}
// De taal is nu geselecteerd uit je cookie of je selectie
echo"Geselecteerde taal: $TAAL";
?>
@Blanche, zou je mij uit kunnen leggen wat er zo gevaarlijk is aan gewoon $language? en waarom het toch werkt als ik geen $_GET gebruik? En of mijn script hierboven proper is? :)
Gewijzigd op 01/01/1970 01:00:00 door Bram
Stel dus dat jij een formulier hebt dat gebruik maakt van de POST methode, dan heb jij in het script waarmee je je formulier verwerkt dus te maken met POST variabelen. Stel nu ook dat jij niet controleert of er daadwerlijk wel wat gepost is ($_SERVER['REQUEST_METHOD'] == POST).
Wat zich nu kan voordoen is dat een gebruiker jouw verwerkingsscript aanroept met een aantal GET variabelen (die gelijk zijn aan de post variabelen uit jouw formulier). Deze zullen door jouw script gewoon geaccepteerd worden. Dit kan omdat register_globals aan staat er en dus standaard geen onderscheid gemaakt wordt tusen POST en GET variabelen.
Een ander voorbeeld is dat je een variabele (stel $check = true) op je index.php gebruikt om op een pagina die geïnclude moet worden te controleren of die pagina wel degelijk geinclude wordt. Die variabele staat op index.php en is dus niet beschikbaar als de te includen pagina direct aangeroepen wordt. Maar met register_globals aan kan ik die te includen pagina wel direct aanroepen door ?check=true achter de link te plaatsen. Er is immers geen onderscheid meer tussen variabele uit een script en GET variabelen uit de link.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Een swtich is ook erg handig en is sneller:)
ah kijk eens aan dat snap ik! is inderdaad ook wel logisch. Wat ik mezelf alleen heb aangeleerd is dat ik altijd de variabel bijvoorbeeld $test altijd uit de url haal met $test. Maar als ik een post maak doe ik dit wel altijd via $_POST. Kortom mijn get maak ik altijd met een losse variabel en mijn post altijd via $_POST.
Niet echt consistent maar ik heb er nog niet veel problemen mee gehad. Het lijkt me inderdaad wel handig om dit wel voortaan te handhaven ja.
Heb je overigens nog iets raars kunnen ontdekken aan men nieuwe script? If zit deze nu wel goed dicht? (als in: geen dubbelgebruikte variabelen).
@mebus:
Zou je me uit kunnen leggen waarom een switch handiger en sneller is? Zou je ook een voorbeeld kunnen geven over waarom en hoe?
Gewijzigd op 01/01/1970 01:00:00 door Bram