Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zmiana języków na stronie
Forum PHP.pl > Forum > Przedszkole
KrzysiekKCN
Witam.

Otóż znalazłem skrypt do zmiany języków poprzez SESJE i wyskakuje mi błąd, którego nie potrafię wyjaśnić.
A drugim pytaniem jest jak wywołać zmianę tej sesji poprzez hiperłącze?
  1. <?php
  2. error_reporting( E_ALL );
  3. ini_set( 'display_errors', 1 );
  4. // config
  5. require_once ('config.php');
  6. // language
  7.  
  8. if ($_GET['lang'] == 'eng') {
  9. $_SESSION['lang'] = 'english';
  10. }
  11.  
  12. if($_SESSION['lang'] = 'english'); {
  13. include('languages/eng.ini');
  14. } else {
  15. include('languages/pl.ini');
  16. }
  17.  
  18. if($_SESSION['lang'] = 'spanish'); {
  19. include('languages/sp.ini');
  20. } else {
  21. include('languages/pl.ini');
  22. }
  23. ?>


A błąd który wyskakuje to:
  1. Parse error: syntax error, unexpected T_ELSE in C:\xampp\htdocs\jull\index.php on line 15


Więc tak, linki które powinny odpowiadać za języki:
  1. <div class="flags">
  2. <a href="index.php?lang=polish" class="logo"><img src="images/pl.png" border="0"></a>
  3. <a href="index.php?lang=english" class="logo"><img src="images/eng.png" border="0"></a>
  4. <a href="index.php?lang=spanish" class="logo"><img src="images/spain.png" border="0"></a>
  5. </div>


Serdecznie proszę o pomoc, i z góry dzięki.
nospor
nie:$_SESSION['lang'] = 'english'
a: $_SESSION['lang'] == 'english'
Odrozniak przypisanie od porownania

Co do bledu to nie:
if($_SESSION['lang'] = 'english');
a
if($_SESSION['lang'] = 'english')

Odrozniaj srednik od braku srednika
KrzysiekKCN
Teraz mój kod wygląda tak:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
  3. <?php
  4. error_reporting( E_ALL );
  5. ini_set( 'display_errors', 1 );
  6. // config
  7. require_once ('config.php');
  8. // language
  9. if ($_GET['lang'] == 'eng') {
  10. $_SESSION['lang'] = 'english';
  11. }
  12.  
  13. if($_SESSION['lang'] == 'english') {
  14. include('languages/eng.ini');
  15. } else {
  16. include('languages/pl.ini');
  17. }
  18.  
  19. if($_SESSION['lang'] == 'spanish') {
  20. include('languages/sp.ini');
  21. } else {
  22. include('languages/pl.ini');
  23. }
  24. ?>

A błędy są takie:
  1. Notice: Undefined variable: HTTP_SERVER_VARS in C:\xampp\htdocs\jull\online.php on line 5
  2.  
  3. Notice: Undefined index: body in C:\xampp\htdocs\jull\config.php on line 9
  4.  
  5. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 9
  6.  
  7. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 9
  8.  
  9. Notice: Undefined index: lang in C:\xampp\htdocs\jull\index.php on line 10
  10.  
  11. Notice: Undefined index: lang in C:\xampp\htdocs\jull\index.php on line 14
  12.  
  13. Notice: Undefined index: lang in C:\xampp\htdocs\jull\index.php on line 20
nospor
Czego nie rozumiesz w bledzie:
"Undefined variable: HTTP_SERVER_VARS in C:\xampp\htdocs\jull\online.php on line 5"
?
Tlumacze: nieokreslona zmienna HTTP_SERVER_VARS w pliku online.php w linii 5

Zanim uzyjesz jakiejs zmiennej to sprawdzaj najpierw czy ona istnieje

Analogicznie tutaj:
"Notice: Undefined index: lang in C:\xampp\htdocs\jull\index.php on line 10"
Zanim odwolasz sie do jakiegos indeksu w tablicy, to sprawdz najpierw czy on instnieje
KrzysiekKCN
No niby tak, ale plik online.php działał poprawnie, popsuło się dopiero po naprawieniu funkcji IF, a jeden skrypt z drugim nie ma nic wspólnego
  1. <?php
  2. $plik = "online.txt"; // Plik z data
  3. $czas = 30; // Czas
  4. $t = time();
  5. $ip = $HTTP_SERVER_VARS['REMOTE_ADDR']; // IP
  6. $u = explode("\n", str_replace("\r", "", @join("", @file($plik))));
  7. foreach($u as $i => $v)
  8. {
  9. $e = explode("|", $v);
  10. if($e[0] == $ip || $e[1] < $t) unset($u[$i]);
  11. }
  12. $u[] = $ip . "|" . ($t + $czas);
  13. $fp = fopen($plik, "w");
  14. flock($fp, 2);
  15. fputs($fp, join("\n", $u));
  16. flock($fp, 3);
  17. fclose($fp);
  18. echo 'Użytkowników online: <b>'.count($u);
  19. ?>


A co do tych indeksów, to co mam zrobić? dodać $lang = "eng"; ?
Nic nie zrobiłem a błędy już mam inne.
  1.  
  2. Notice: Undefined index: body in C:\xampp\htdocs\jull\config.php on line 9
  3.  
  4. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 9
  5.  
  6. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 9
  7.  
  8. Notice: Undefined index: lang in C:\xampp\htdocs\jull\index.php on line 14
  9.  
  10. Notice: Undefined index: lang in C:\xampp\htdocs\jull\index.php on line 20
nospor
Cytat
No niby tak, ale plik online.php działał poprawnie,
Jak dziala poprawnie, skoro pluje bledem NOTICE? ....
poza tym nie: $ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
a: $ip = $_SERVER['REMOTE_ADDR'];

Cytat
Notice: Undefined index: body in C:\xampp\htdocs\jull\config.php on line 9
Ok, czego nie zrozumiales w napisanej po polsku instrukcji obslugi:
Cytat
Zanim odwolasz sie do jakiegos indeksu w tablicy, to sprawdz najpierw czy on instnieje

Do sprawdzania czy index istnieje mozesz uzyc isset()
KrzysiekKCN
Okey, online działa, mógł byś mi powiedzieć co dała twoja zmiana? Skoro jeszcze niedawno nie miałem tego błędu?

I teraz mam tak:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
  3. <?php
  4. error_reporting( E_ALL );
  5. ini_set( 'display_errors', 1 );
  6. // config
  7. require_once ('config.php');
  8. // language
  9. if (isset($_GET['lang'])) {
  10.  
  11. if ($_GET['lang'] == 'eng') {
  12. $_SESSION['lang'] = 'english';
  13. }
  14. } else {
  15. echo "Zmienna lang nie zdefiniowana";
  16. }
  17.  
  18. if(isset($_SESSION['lang']))
  19. {
  20. if($_SESSION['lang'] == 'english') {
  21. include('languages/eng.ini');
  22. } else {
  23. include('languages/pl.ini');
  24. }
  25.  
  26. if($_SESSION['lang'] == 'spanish') {
  27. include('languages/sp.ini');
  28. } else {
  29. include('languages/pl.ini');
  30. }
  31. } else {
  32. echo "brak sesji lang";
  33. }


  1.  
  2. Notice: Undefined index: body in C:\xampp\htdocs\jull\config.php on line 9
  3.  
  4. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 9
  5.  
  6. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 9
  7. Zmienna lang nie zdefiniowanabrak sesji lang


A po kliknięciu flagi, zmienna lang się definiuje jedank plik nie jest wczytany.
nospor
Cytat
Okey, online działa, mógł byś mi powiedzieć co dała twoja zmiana?
Chociazby zmiana wersji php czy jego ustawien

Cytat
Notice: Undefined index: body in C:\xampp\htdocs\jull\config.php on line 9
Ile jeszcze razy mam ci pisac, bys najpierw sprawdzil czy jest indeks czy nie? Jak to wkoncu zrobisz to zacznie ci dzialac. Ostatnio jest jakaś fala uzytkownikow, którym proste informacje trzeba pisac po 10 razy by ci wkoncu raczyli sie do nich ustosunkowac

rety.... odwolujesz sie do indeksu BODY w jakiejs tablicy. NIe wiem w jakiej, bo nie podales kodu pliku config.php

Ogolnie to sie robi tak
  1. if (isset($tablica['jakisindkex'])){
  2. //i dopiero tutaj moge cos robic z $tablica['jakisindkex']
  3. }


albo
  1. if (isset($tablica['jakisindkex']) && $tablica['jakisindkex']=='blavbla' ){
  2. //blabla
  3. }


edit: no i skasowal swojego posta na ktorego napisalem odpowiedz....
KrzysiekKCN
Sory, tak właśnie dostałem olśnienia że nie użyłem BODY ;/ Sorki.
Po prostu zapomniałem o tym że skasowałem
  1. <?php
  2.  
  3. if ($body=="")
  4. {
  5. include("sub.php");
  6. }
  7. else {
  8. if (is_file("$body.php"))
  9. {
  10. include("$body.php");
  11. }
  12. else
  13. {
  14. include("error.php");
  15. }
  16. }
  17. ?>


Zostały jeszcze:
  1. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 9
  2.  
  3. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 9


Próbowałem dodać ob_start() i ob_end_flush() ale błędy nie znikają.

Nie chciałem skasować tylko lekko i mi się przeglądarka zawiesiła.
nospor
Cytat
Próbowałem dodać ob_start() i ob_end_flush() ale błędy nie znikają.
Gdzie probowales? Bo ob_start nalezy dac na samym poczatku wszystkiego. Zaznaczam slowo "wszystkiego"
KrzysiekKCN
Tak, na początku skryptu, ale przed doctype.
nospor
Pokaz kod po zmianach, pokaz komunikaty bledow po zmianach, bo gwarantuje ci ze komunikat juz nie bedzie dokladnie taki sam, gdy dasz ob_start na początku winksmiley.jpg
KrzysiekKCN
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
  3. <?php
  4. error_reporting( E_ALL );
  5. ini_set( 'display_errors', 1 );
  6. // config
  7. require_once ('config.php');
  8. // language
  9. if (isset($_GET['lang'])) {
  10.  
  11. if ($_GET['lang'] == 'eng') {
  12. $_SESSION['lang'] = 'english';
  13. }
  14. } else {
  15. echo "Zmienna lang nie zdefiniowana";
  16. }
  17.  
  18. if(isset($_SESSION['lang']))
  19. {
  20. if($_SESSION['lang'] == 'english') {
  21. include('languages/eng.ini');
  22. } else {
  23. include('languages/pl.ini');
  24. }
  25.  
  26. if($_SESSION['lang'] == 'spanish') {
  27. include('languages/sp.ini');
  28. } else {
  29. include('languages/pl.ini');
  30. }
  31. } else {
  32. echo "brak sesji lang";
  33. }
  34. echo $lang;
  35. ?>



  1.  
  2. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 10
  3.  
  4. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\jull\index.php:3) in C:\xampp\htdocs\jull\index.php on line 10
  5. Zmienna lang nie zdefiniowanabrak sesji langpl
nospor
Mowiac na samym poczatku mam na mysli na samym poczatku. Tu naprawdę nie ma ukrytej logiki.,..
  1. <?php
  2. ?>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
  5. <?php
  6. //blabla reszta kodu
KrzysiekKCN
Ok, ale błędy i tak te same.
  1.  
  2. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\jull\index.php:1) in C:\xampp\htdocs\jull\index.php on line 12
  3.  
  4. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\jull\index.php:1) in C:\xampp\htdocs\jull\index.php on line 12
nospor
No wlasnie nie. Bledy juz nie są takie same. Tam była linia 3 a tu jest linia 1

Albo masz plik z BOMem, albo dales enter/spacje na początku smile.gif
KrzysiekKCN


Już błędów brak, ale i tak zmiana języków nie działa, jeżeli wywołam gdzieś coś co jest w kazdym z tych plików pl.ini eng.ini sp.ini

  1. Notice: Undefined variable: mywebadres in C:\xampp\htdocs\jull\index.php on line 60
  2. Użytkowników online: 1
nospor
Aj jak ty nie czytasz tego co się pisze winksmiley.jpg

No wlasnie masz miec opcję BEZ BOM
KrzysiekKCN
omg ^^

Zmieniłem i błędy zniknęły ale nie działa zmiana języków.
nospor
1) Po czym stwierdzasz ze nie dziala?
2) Sprawdz co zawiera sesja
3)
  1. if($_SESSION['lang'] == 'english') {
  2. include('languages/eng.ini');
  3. } else {
  4. include('languages/pl.ini');
  5. }
  6.  
  7. if($_SESSION['lang'] == 'spanish') {
  8. include('languages/sp.ini');
  9. } else {
  10. include('languages/pl.ini');
  11. }

Tym kodem dla angielskiego zawsze ladujesz polski smile.gif
KrzysiekKCN
  1. <a href="index.php?lang=polish" class="logo"><img src="images/pl.png" border="0"></a>
  2. <a href="index.php?lang=english" class="logo"><img src="images/eng.png" border="0"></a>
  3. <a href="index.php?lang=spanish" class="logo"><img src="images/spain.png" border="0"></a>


jeżeli lang = eng to wczytuje eng.ini, jeżeli nie to domyślny pl.ini

Tak ja to rozumiem, tylko on nawet pl.ini nie wczytuje. Błąd już jest na samym początku, mimo że wywołałem na końcu
$lang który wyświetla się jako "pl", jednak po klikaniu linków nie zmienia się nic oprócz adresu.
nospor
Ponowie pytanie: na jakiej postawie stwierdzasz ze ci nie dziala.
Ja tu nigdzie nie widzę, bys gdzieś korzystał z jezyka.

Jak wyglada plik
languages/pl.ini
?
KrzysiekKCN
  1. <?php
  2. $mywebadres = "www.juliakropacz.pl";
  3. $loginbreak = "Wprowadzono nieprawidłową nazwę użytkownika lub hasło.<br>";
  4. $logout = "Wylogowano.<br>";
  5. $back_index = "Powrót...";
  6. $logout_txt = "Wyloguj się!";
  7. $loginas = "Użytkownik zalogowany jako: ";
  8. ?>


Później będe definiował to za pomocą DEFINE ale jak na razie używam tylko jednej zmiennej $mywebadres bo systemu logowania jeszcze nie podczepiłem.

W kodzie używam to tak:
<div class="webadres"><a class="webadres" href="http://<?php echo $mywebadres;?>/"><?php echo $mywebadres; ?></a></div>

PL jest wyżej
SP $mywebadres = "www.juliakropacz.sp";
ENG $mywebadres = "www.juliakropacz.com";


Temat do zamknięcia.
Dziękuję za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.