Multi talen script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Robin .

robin .

28/02/2020 05:30:34
Quote Anchor link
Hallo,

Ben bezig voor me site met multi talen script.
Loop alleen vast op 1 probleem.

Even korte uitleg:

Haal de taal op via de browser met deze code
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
if (empty($lang)) {
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
switch ($lang)
    {
    case "nl" :
    include("lang/nl.php");
    break;
    case "en" :
    include("lang/en.php");
    break;
 case "de" :
    include("lang/de.php");
    break;
    default :
    include("lang/en.php");
    break;
}


En dan via $title $naam haal ik het op in het script.
Dat werkt allemaal goed.
Maar nu wil ik als iemand een uitnodiging naar een andere gebruiker stuurt hij dan de taal van de persoon pakt waar die uitnodiging heen gaat nu is het de taal van de persoon die hem verstuurd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$mysqli->query("INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) values(NOW(),'{$_SERVER['REMOTE_ADDR']}','afzender','{$man->login}','0','uitnodiging',' $verstuurd')");

nl.php
$verstuurd = Je uitnodiging is verstuurd.
en.php
$verstuurd = Your invitation has been sent.


Dus hij zou bij $man->login moeten checken welke taal de persoon is.

In de database wordt ook de taal omgeslagen waneer iemand inlogt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$mysqli->query("UPDATE `[users]` SET `lang`='$lang' WHERE `login`='$data->login'");


Hopelijk weet iemand een oplossing ben al tijdje mee bezig maar kom er niet uit.
 
PHP hulp

PHP hulp

01/06/2020 22:01:19
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 08:21:50
Quote Anchor link
Moet je niet kijken wat er in de database staat, waarna je het includeert? Het kiezen van de taal om die in de database bekend te maken, en het juiste taal bestand inladen zijn twee verschillende stappen.

Zelf ben ik geen voorstander van een automatische detectie. Stel je voor dat ik in Duitsland op vakantie ben, en jouw site bezoek op een lokale computer daar. Dan staat die meteen op de Duitse taal. Gebruik liever vlaggetjes in je design waarmee je de taal kan kiezen.

Of zoals de meeste grote sites doen: Toon een overlay met de vraag of je de taal wilt aanpassen in de gedetecteerde taal.
Gewijzigd op 28/02/2020 08:28:06 door - Ariën -
 
Robin .

robin .

28/02/2020 16:24:36
Quote Anchor link
**quoteknip**
Dankjewel voor je reactie, Kan altijd later nog aanpassen dat de persoon zelf de taal kan veranderen, zoek eerst oplossing voor dit dat het werkt dan kan ik weer verder.

Edit:
Het is niet nodig om het voorlaatse bericht integraal te quoten.
Gewijzigd op 28/02/2020 16:25:58 door - Ariën -
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 16:27:56
Quote Anchor link
Dan moet je de juiste taal die bij de gebruiker hoort via SELECT ophalen, en de juiste variabele die erbij hoort gebruiken. Persoonlijk raad ik aan om een array te gebruiken in je talenbestand:

lang.nl.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$lang['invitation_sent'] = "De uitnodiging is verzonden!";


lang.eng.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$lang['invitation_sent'] = "The invitatiation has been sent";


lang.ger.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$lang['invitation_sent'] = "Die Einladung wurde gesendet";


Dan heb je meer controle over je vertaal-variabelen, en kan je later makkelijk kijken of je mogelijk iets mist.
Gewijzigd op 28/02/2020 16:31:49 door - Ariën -
 
Robin .

robin .

28/02/2020 16:37:17
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$lang1   = $mysqli->query("SELECT * FROM `[users]` WHERE `login`='{$man->login}' AND `lang`='{$man->lang}'");
      $lang     = $lang1->fetch_object();

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$mysqli->query("INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) values(NOW(),'{$_SERVER['REMOTE_ADDR']}','afzender','{$man->login}','0','$test',' $test1 $data->login ')");

$test = "Invite";
$test1 = "You have been invited by";

Als ik dat zo doe dan hoe vraag ik het op dan bij $test dat die eerst de taal checkt.

Ik heb het zo staan in de lang file
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$test
= "Invite";
$test1 = "Sent";

?>
Gewijzigd op 28/02/2020 16:40:02 door robin .
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 16:43:12
Quote Anchor link
Waar komt $man->lang vandaan?
En een array-gebaseerde opslag van je vertalingen werkt makkelijk in het onderhoud :-)

$lang1 is ook geen lekker duidelijke variabele.

PS: array's zijn sneller dan objecten ;-)
Dus waarom gebruik je geen mysqli->fetch_assoc() ?
Gewijzigd op 28/02/2020 16:44:29 door - Ariën -
 
Robin .

robin .

28/02/2020 16:48:26
Quote Anchor link
Hij haald de $man->lang vandaan bij het klikken op de button waar ook de persoon vandaan wordt gehaald.

Oke dat wist ik niet dat array`s sneller waren dan objecten bedankt ga ik dat aanpassen.
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 16:51:46
Quote Anchor link
De taal is toch opgeslagen in de database bij de gebruiker zelf?
Dan kan je die toch ophalen?

Onthoud wel dat je met fetch_assoc() array's gebruikt i.p.v. objecten:
$man['lang']

Verder raad ik aan om de AND `lang`='{$man->lang} eruit te halen.
Gewijzigd op 28/02/2020 16:52:01 door - Ariën -
 
Robin .

robin .

28/02/2020 17:01:13
Quote Anchor link
Ik was met het stukje van boven aan het testen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$lang['invitation_sent'] = "De uitnodiging is verzonden!";


Dan haald die wel de goede taal op als ik deze uitvoer alleen dan krijg je in bericht alleen de eerste letter dus bij nl krijg je dan D als bericht en in EN T ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$mysqli->query("INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) values(NOW(),'{$_SERVER['REMOTE_ADDR']}','afzender','{$man->login}','0','$test',' $lang[invitation_sent]')");


En als ik tussen de [ '' ] boven comma`s zet krijg ik een fout PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 17:05:44
Quote Anchor link
Basislesje in PHP: Houd variabelen buiten de quotes.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$variabele
['bla'] = "<b>een variabele</b>";
$inhoud = "Een stukje tekst met ".$variabele['bla']." die buiten quotes staan";

// even echo'en om te laten zien.
echo $inhoud;
?>


Ook raad ik aan om alle invoer in de query te escapen met mysqli->real_escape_string(), tegen SQL-injection.
Houd ook de indexen in de array tussen single quote:
Dus: $variabele['index'].

Ik zie dat dit afgeleid is van een Criminals-script? Die zijn in veel gevallen niet bepaald efficiënt gescript.
Gewijzigd op 28/02/2020 17:09:04 door - Ariën -
 
Robin .

robin .

28/02/2020 17:10:41
Quote Anchor link
Dankjewel voor je hulp ik ga even kijken of het nu lukt met dit.
Anders kom ik wel even terug in deze topic.


Klopt ben het helemaal opnieuw aan het schrijven in mysqli.
Gewijzigd op 28/02/2020 17:12:02 door robin .
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 17:12:42
Quote Anchor link
Oke, succes :)

De reden dat je de eerste letter zag, was omdat je waarschijnlijk een string als een array aanriep.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$string
= "De snelle bruine vos sprong over de luie hond!";
$eersteKarakter = $string[0];
echo $eersteKarakter; // geeft D van 'De ....'
?>
Gewijzigd op 28/02/2020 17:15:47 door - Ariën -
 
Robin .

robin .

28/02/2020 18:55:12
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
lang1   = $mysqli->query("SELECT * FROM `[users]` WHERE `login`='{$man->login}'");
      $lang     = $lang1->fetch_assoc();
      
      $mysqli->query("INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) values(NOW(),'{$_SERVER['REMOTE_ADDR']}','afzender','{$man->login}','0','invite','$lang[invitation_sent]')");
      


Heb nu dit maar hij geeft nu lege tekst? wat gaat er fout.

Want als ik dit stukje
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
lang1   = $mysqli->query("SELECT * FROM `[users]` WHERE `login`='{$man->login}'");
      $lang     = $lang1->fetch_assoc();

weg laat dan verstuurd die in de taal van de persoon van de afzender en niet van de ontvanger.
Gewijzigd op 28/02/2020 18:58:38 door robin .
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 19:11:29
Quote Anchor link
Om mijzelf nog even aan te halen ;-)
- Ariën - op 28/02/2020 17:05:44:
Houd ook de indexen in de array tussen single quote:
Dus: $variabele['index'].


Verder mist er een $ voor lang1
(waarom zulke onduidelijke variabelen? Vermeld liever WAT ze doen.)

En wat heeft login te maken met de persoon waarvan je de gegevens wilt opvragen?
Ik verwacht meer een ID-nummer van diegene.
Gewijzigd op 28/02/2020 19:14:25 door - Ariën -
 
Robin .

robin .

28/02/2020 19:15:16
Quote Anchor link
Dus de $lang veranderen in $variabele? sorry begrijp deze niet echt
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 19:16:04
Quote Anchor link
Misschien moet je voorbeelden en de praktijk even gescheiden houden. ;-)
Wat is je kennis met PHP tot nu toe? Ik merk dat je een hoop dingen niet echt begrijpt.
Gewijzigd op 28/02/2020 19:16:25 door - Ariën -
 
Robin .

robin .

28/02/2020 19:21:30
Quote Anchor link
Het is meer een hobby van me PHP begin het wel steeds meer te leren.
Kom alleen hier niet uit hoe ik dit het beste kan opvragen.


De $ was verkeerd gegaan met kopieren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$lang1   = $mysqli->query("SELECT * FROM `[users]` WHERE `id`='$id'");
      $lang     = $lang1->fetch_assoc();
      
      $mysqli->query("INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) values(NOW(),'{$_SERVER['REMOTE_ADDR']}','afzender','{$man->login}','0','invite','$lang[invitation_sent]')");
      


Heb nu als ID die wordt opgevraagd met GET bij het klikken op de link.
$id = $_GET['id'];
Gewijzigd op 28/02/2020 19:22:07 door robin .
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 19:25:35
Quote Anchor link
Ja, en dan zou ik als ik jouw was die $_GET['id'] zeker gaan escapen met mysqli->real_escape_string().
Anders kan iedereen je query manipuleren met SQL-injection, of jijzelf onwetend.

En om het af te maken kan het geen kwaad om variabelen buiten quotes te halen, en de query in een aparte variabele te zetten. Dan kan je die makkelijk echo'en als je deze wilt debuggen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql
= "INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) VALUES (
    NOW(),
    '"
.$mysqli->real_escape_string($_SERVER['REMOTE_ADDR'])."',
    'afzender',
    '"
.$man->login."',
    '0',
    'invite',
    '"
.$mysqli->real_escape_string($lang['invitation_sent'])."'
)"
;
$mysqli->query($sql);
?>

En voila, meer overzicht, en minder spaghetti-code. :-)
Gewijzigd op 28/02/2020 19:31:07 door - Ariën -
 
Robin .

robin .

28/02/2020 19:42:26
Quote Anchor link
Bedankt dat ziet er stuk netter uit ja haha.

Maar hij haald alleen nog steeds niet de taal van de ontvanger op, hij pakt nog steeds de taal van de verzender.
 
Thomas van den Heuvel

Thomas van den Heuvel

28/02/2020 19:48:38
 
- Ariën -
Beheerder

- Ariën -

28/02/2020 19:50:51
Quote Anchor link
Robin Putten op 28/02/2020 19:42:26:
Bedankt dat ziet er stuk netter uit ja haha.

Maar hij haald alleen nog steeds niet de taal van de ontvanger op, hij pakt nog steeds de taal van de verzender.

Dan moet je even de query echo'en, en nakijken.
Dan gaat daar wat fout.
Gewijzigd op 28/02/2020 19:52:26 door - Ariën -
 

Pagina: 1 2 3 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.