Multi talen script
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
}
$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)
1
2
3
4
5
6
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.
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.
Hopelijk weet iemand een oplossing ben al tijdje mee bezig maar kom er niet uit.
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 -
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 -
lang.nl.php:
lang.eng.php:
lang.ger.php:
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 -
Code (php)
1
2
2
$lang1 = $mysqli->query("SELECT * FROM `[users]` WHERE `login`='{$man->login}' AND `lang`='{$man->lang}'");
$lang = $lang1->fetch_object();
$lang = $lang1->fetch_object();
Code (php)
1
2
3
4
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";
$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
Gewijzigd op 28/02/2020 16:40:02 door robin .
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 -
Oke dat wist ik niet dat array`s sneller waren dan objecten bedankt ga ik dat aanpassen.
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 -
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)
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)
Code (php)
1
2
3
4
5
6
7
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;
?>
$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 -
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 .
De reden dat je de eerste letter zag, was omdat je waarschijnlijk een string als een array aanriep.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$string = "De snelle bruine vos sprong over de luie hond!";
$eersteKarakter = $string[0];
echo $eersteKarakter; // geeft D van 'De ....'
?>
$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 -
Code (php)
1
2
3
4
5
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]')");
$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)
1
2
2
lang1 = $mysqli->query("SELECT * FROM `[users]` WHERE `login`='{$man->login}'");
$lang = $lang1->fetch_assoc();
$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 - op 28/02/2020 17:05:44:
Houd ook de indexen in de array tussen single quote:
Dus: $variabele['index'].
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 -
Dus de $lang veranderen in $variabele? sorry begrijp deze niet echt
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 -
Kom alleen hier niet uit hoe ik dit het beste kan opvragen.
De $ was verkeerd gegaan met kopieren.
Code (php)
1
2
3
4
5
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]')");
$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 .
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)
1
2
3
4
5
6
7
8
9
10
11
12
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);
?>
$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 -
Maar hij haald alleen nog steeds niet de taal van de ontvanger op, hij pakt nog steeds de taal van de verzender.
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.
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 -