Session script voor taalkeuze

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Bram

Bram

22/02/2007 12:01:00
Quote Anchor link
Hoi mensen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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";}

?>


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.
 
PHP hulp

PHP hulp

07/11/2024 17:28:12
 
Thijs X

Thijs X

22/02/2007 12:20:00
Quote Anchor link
Niks op aan te merken ziet er gewoon goed uit.
 
Joren de Wit

Joren de Wit

22/02/2007 12:22:00
Quote Anchor link
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.
 
Patrick

patrick

22/02/2007 12:23:00
Quote Anchor link
Bram, ik ben toevallig ook met iets bezig waar bezoekers kunnen aangeven uit welk land ze komen en vervolgens is het de bedoeling dat de teksten op de website zich aanpassen naar we keuze gemaakt door de klant.

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.
 
Frank

frank

22/02/2007 13:19:00
Quote Anchor link
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 ;) )
 
Bram

Bram

22/02/2007 13:39:00
Quote Anchor link
@frank
$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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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]";



?>



@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?
 
Frank

frank

22/02/2007 13:49:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
if ($_SESSION['language'] == 'nl'){$TAAL = "Nederlands";}
if ($_SESSION['language'] == 'uk'){$TAAL = "Engels";}
if ($_SESSION['language'] == 'd'){$TAAL = "Duits";}

?>


? (klopt mijn veronderstelling?)
 
Joren de Wit

Joren de Wit

22/02/2007 13:49:00
 
Frank

frank

22/02/2007 13:51:00
Quote Anchor link
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 bedoel je hier precies mee?
 
Bram

Bram

22/02/2007 14:01:00
Quote Anchor link
Nou een beveiligde pagina waar een admin kan inloggen. En op die manier de database kan vullen met 3 verschillende talen. Je zorgt er daarna voor dat de $_POST van elk taalvakje in de juist databasetabel word weggeschreven.

@Blanche
Bedankt ^^ ik ga op onderzoek uit en post een oplossing wanneer ik deze heb voor een simpel cookie script.
 
Bram

Bram

22/02/2007 14:04:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
if ($_SESSION['language'] == 'nl'){$TAAL = "Nederlands";}
if ($_SESSION['language'] == 'uk'){$TAAL = "Engels";}
if ($_SESSION['language'] == 'd'){$TAAL = "Duits";}

?>


? (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.
 
Bram

Bram

22/02/2007 14:55:00
Quote Anchor link
HEBBES

@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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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";

?>
Gewijzigd op 01/01/1970 01:00:00 door Bram
 
Joren de Wit

Joren de Wit

22/02/2007 15:00:00
Quote Anchor link
Je controleert nu of $languagecookie een waarde heeft, maar hoe kom je aan die variabele?
 
Bram

Bram

22/02/2007 15:05:00
Quote Anchor link
Die schrijf ik weg in:

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
 
Joren de Wit

Joren de Wit

22/02/2007 15:12:00
Quote Anchor link
Ja het wegschrijven doe je wel goed, maar het uitlezen van de cookie doe je dan met $_COOKIE['languagecookie']. En dan vraag ik me ook af hoe je aan $language komt. Moet dat dan ook niet $_SESSION['language'] zijn?

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.
 
Bram

Bram

22/02/2007 15:20:00
Quote Anchor link
oooowww, okee. Probeer ik dat inderdaad wel even met $_COOKIE['languagecookie'].

Dat van $language is inderdaad misschien onduidelijk. Die schrijf ik mee onder een button:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?PHP
                    echo"
                    <a href=index.php?language=nl&page=$page class=menutop>nl</a> &nbsp;&nbsp;
                    <a href=index.php?language=uk&page=$page class=menutop>uk</a> &nbsp;&nbsp;
                    <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.
 
Joren de Wit

Joren de Wit

22/02/2007 15:23:00
Quote Anchor link
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...
 
Bram

Bram

22/02/2007 15:35:00
Quote Anchor link
Uhm ok.... ik heb het ff anders geprobeerd en zo werkt het ook:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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";

?>


@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
 
Joren de Wit

Joren de Wit

22/02/2007 15:44:00
Quote Anchor link
Als register_globals aan staat, betekent dat bijvoorbeeld $_POST['test'] en $_GET['test'] allebei op te halen zijn met de variabele $test. Om kort te zijn, je hebt dus geen controle of het een variabele uit je script is, dat het een GET variabele is of dat $test een POST variabele is.

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
 
Mebus  Hackintosh

Mebus Hackintosh

22/02/2007 15:47:00
Quote Anchor link
Een swtich is ook erg handig en is sneller:)
 
Bram

Bram

22/02/2007 15:57:00
Quote Anchor link
@blanche:
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
 

Pagina: 1 2 volgende »



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.