Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zawartość wybranego elementu jednej tablicy w drugiej
Forum PHP.pl > Forum > PHP > Object-oriented programming
patryk9200
Witam!

Posiadam stronę internetową, którą postanowiłem przerobić na wersje wielojęzyczną.
Uzyłem do tego tablic:

'language' => array('Wybierz język: ', 'Select Language: ', 'Sprache auswählen: ', 'Choisissez la langue: ', 'Selecteer taal: '),
'plogowania' => array('Podaj dane do logowania w systemie', 'Enter details to log on', 'Geben Sie Details um sich über das System', 'Sil vous plaît soumettre votre login', 'Gelieve uw login'),

którą to mam zapisaną w pliku lang.php.

Aby wyświetlić wybrany element po przełączeniu języka wpisuje echo lang('plogowania');
Posiadam również inną tablicę z zaincludowanym plikiem lang.php:

'a8' => array ( 'id' => 10, 'nazwa' => 'Język', 'fieldname' => 'a8', 'pole' => 'listaRP' , 'checked' => 'first' ),

do której to w miejsce 'Język' muszę przekazać dane z tablicy pierwszej po przełączeniu języka. Próbowałem np. tak:

'a8' => array ( 'id' => 10, 'nazwa' => ''.lang('language').'', 'fieldname' => 'a8', 'pole' => 'listaRP' , 'checked' => 'first' ),

ale z jakiegoś powodu zwraca mi puste pole. Jak to rozwiązać? albo jak w inny sposób pobierac wybrane elementy tablicy1 do tablicy2??

Dodam jeszcze, że skrypt jest zrobiony identycznie jak ten na stronie: http://www.webday.pl/viewtopic.php?f=46&p=3542

Wszystko działa poza elementami z tej drugiej tablicy ;/
Crozin
Pokaż Twój dokładny kod PHP. Podejrzewam, że błąd jest w tym, że chcesz się odwołać do tego języka, zanim on jeszcze zostaje zdeklarowany.

PS. Co to ma do OOP?
PS2. Niezbyt wygodna metoda na przechowywanie języków.
patryk9200
ok
A więc tak tak wygląda kod tabeli w której muszę podmienić język:
CODE
include "lang.php";

$panel_komisu = array ( 'Osobowe' => array ( ''.lang("osobowe").'' => array ( 'id' => 1, 'nazwa' => ''.$marka.'', 'fieldname' => 'marka_osobowe', 'pole' => 'lista_marka' , 'checked' => 'first' ),
'model_osobowe' => array ( 'id' => 2, 'nazwa' => 'Model', 'fieldname' => 'model_osobowe', 'pole' => 'lista_model' , 'checked' => 'first' ),
'wersja'=> array ( 'id' => 2, 'nazwa' => 'Wersja modelu, itp...', 'fieldname' => 'wersja', 'pole' => 'input1' , 'maxlength' => 20 ),
'stats' => array ( 'id' => 110, 'nazwa' => 'Liczba wy¶wietleń', 'fieldname' => 'stats', 'pole' => 'input1' , 'maxlength' => 7 ),
'numer' => array ( 'id' => 111, 'nazwa' => 'Numer ogłoszenia', 'pole' => 'input1' ), ), ?>




Z tak wygląda kod odpowiedzialny za podmienianie danych:

CODE
<?php


if ($_GET['lang']){
setcookie('lang', $_GET['lang'], time()+12*2592000);
};


if ($_GET['lang']){ //jeśli wybrano zmianę języka, aktualizuje ciastko.
setcookie('lang', $_GET['lang'], time()+12*2592000);
};

function lang($zm){
if (isset($_COOKIE['lang']) && !isset($_GET['lang'])) { // sprawdzamy czy istnieje ciastko LANG i czy nie wysłano przypadkiem polecenia zmiany języka. Jeśli się zgadza to ustawiamy zmienną na zawartość ciastka.

$tong = $_COOKIE['lang'];
}
elseif($_GET['lang']){ // jeśli zostało wysłane polecenie zmiany języka, aktualizujemy ciastko oraz ustawiamy zmienną na tą wartość. Przez to unikam konieczności odświeżania strony, po każdym kliknięciu zmiany języka
$tong = $_GET['lang'];
}
else { //jeśli ktoś nie dokonał wcześniej wyboru języka
$tong = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
};
//------------czesc II------------------
switch ($tong) {
case 'pl': $tong = 0; break;
case 'en': $tong = 1; break;
case 'de': $tong = 2; break;
case 'fr': $tong = 3; break;
case 'nl': $tong = 4; break;
// tu dodajemy deklaracje kolejnych wersji językowych

default: $tong = 0; break;
}
//------------czesc III------------------

$lang = Array(

//---------------------poprawność wyświetlania różnych wersji językowych---------------------------

'jezykstrony' => array("<head><meta http-equiv='Content-Type' content='text/html; charset=windows-1250' /><meta http-equiv='Content-pl' content='pl' /></head>", "<head><meta http-equiv='Content-Type' content='text/html; charset=windows-1250' /><meta http-equiv='Content-en' content='en' /></head>", "<head><meta http-equiv='Content-Type' content='text/html; charset=windows-1250' /><meta http-equiv='Content-de' content='de' /></head>", "<head><meta http-equiv='Content-Type' content='text/html; charset=windows-1250' /><meta http-equiv='Content-fr' content='fr' /></head>", "<head><meta http-equiv='Content-Type' content='text/html; charset=windows-1250' /><meta http-equiv='Content-nl' content='nl' /></head>"),


//------------------------------------------administracja------------------------------------------

"marka" => array('marka', 'mark', 'ABS', 'ABS', 'ABS'),

'tstatus' => array('Twój status:', 'Type of Account:', 'Art des Kontos:', 'Type de compte:', 'Type account:'),
'menu' => array('Menu', 'Menu', 'Menü', 'Menu', 'Menu'),

);
return $lang[$zm][$tong];

};
?>






A tak wygląda kod odpowiedzialny za wyświetlanie danych na stronie:

CODE

<?

$page = $_GET['page'];
$id = $_GET['id'];

$section = $_POST['section'];
$action = $_POST['action'];
$special = $_POST['special'];

if ($page == 'add' && $action == 'save' && !$special)
{
foreach ($_POST as $key => $value)
$$key = $value;
}


if (!$marka)
$marka = 0;
if (!$model)
$model = 0;


// ================================================================================
=================================================================
// ============================================================== osobowe ===========================================================================
// ================================================================================
=================================================================
if ($section == 1)
{
if ($action == 'save')
{
if (!$errtext)
{
$errtext = CheckVerifyForm($section);
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
{
$errtext = CheckWarrningForm($section);
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
{
$errtext = CheckVerifyDaneKontatkoweForm('BezLogowania');
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
{
$errtext = CheckVerifyTelefonyForm('BezLogowania');
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
{
$errtext = CheckVerifyEmailForm('BezLogowania');
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
$ogloszenie -> Zapamietaj($_POST);
$_SESSION['ogloszenie'] = $ogloszenie;

// if ($_SESSION['panel'] -> lo && $_SESSION['panel'] -> pa && $_SESSION['panel'] -> status != 1 && !$print)
// var_export ($ogloszenie);

}

if (($action == 'save' && $errtext) || ($action == 'create') || ($action == 'edit'))
{
echo '<div id="search">
<form action="?page='.$page.'&id='.$id.'" method="post">
<input type="hidden" name="section" value="'.$section.'">
<input type="hidden" name="action" value="save">
<table width="535" cellpadding=0 cellspacing=0>
<tr>
<td colspan="3" style="border: solid #828282; border-width: 0px 0px 2px 0px;">
<h1>Podstawowe parametry pojazdu</h1>
</td>
</tr>
<tr>
<td width="179">
<b>';
ShowPanelLabel($section, 'marka_osobowe');
echo '</b><br>';
ShowPanel($section, 'marka_osobowe', $marka_osobowe); // pokaz marke



i dalszy ciąg kodu odpowiedzialnego za wyswietlanie danych:
CODE
echo ' </td>
<td width="179">
<b>';
ShowPanelLabel($section, 'model_osobowe');
echo '</b><br>';
ShowPanel($section, 'model_osobowe', $model_osobowe); // pokaz model
echo ' </td>
<td width="179">
<b>';
ShowPanelLabel($section, 'wersja');
echo '</b><br>';
ShowPanel($section, 'wersja', $wersja);
echo ' </td>
<td>
<b>';
ShowPanelLabel($section, 'a17');
echo '</b><br>';
ShowPanel($section, 'a17', $a17);

echo ' </td>
<td>
<table cellpadding=0 cellspacing=0 width=100%><tr><td>';
ShowPanelLabel($section, 'a18');
if ($_SESSION['panel'] -> lo && $_SESSION['panel'] -> pa && $_SESSION['panel'] -> status > 1)
{
echo ' </td><td>';
ShowPanel($section, 'a18a', $a18a);
}
echo ' </td><td>';
ShowPanel_SP($section, 'a18', $a18);

echo ' </td>
<td>';
ShowPanel($section, 'a64', $a64);
ShowPanelLabel($section, 'a64');


CODE
echo ' </td>
</tr>
<tr>
<td>
<table cellpadding=0 cellspacing=0 width=100%><tr><td>';
ShowPanelLabel($section, 'a34');
if ($_SESSION['panel'] -> lo && $_SESSION['panel'] -> pa && $_SESSION['panel'] -> status > 1)
{
echo ' </td><td>';
ShowPanel($section, 'a34a', $a34a);
}
echo ' </td><td>';
ShowPanel_SP($section, 'a34', $a34);

ShowPanel($section, 'a111', $a111);
ShowPanelLabel($section, 'a111');
echo ' </td>
<td>
<table cellpadding=0 cellspacing=0 width=100%><tr><td>';
ShowPanelLabel($section, 'a72');
if ($_SESSION['panel'] -> lo && $_SESSION['panel'] -> pa && $_SESSION['panel'] -> status > 1)
{
echo ' </td><td>';
ShowPanel($section, 'a72a', $a72a);
}
echo ' </td><td>';
ShowPanel_SP($section, 'a72', $a72);

<tr>
<td>';
ShowPanel($section, 'a53', $a53);
ShowPanelLabel($section, 'a53');
echo ' </td>
<td>
<table cellpadding=0 cellspacing=0 width=100%><tr><td>';
ShowPanelLabel($section, 'a15');
if ($_SESSION['panel'] -> lo && $_SESSION['panel'] -> pa && $_SESSION['panel'] -> status > 1)
{
echo ' </td><td>';
ShowPanel($section, 'a15a', $a15a);
}
echo ' </td><td>';
ShowPanel_SP($section, 'a15', $a15);
echo ' </td>
</tr>';

include ('addkontaktkrok2.php3');

echo '</table>
</form>
</div>';
}
}
else


if ($section == 2)
{
if ($action == 'save')
{
if (!$errtext)
{
$errtext = CheckVerifyForm($section);
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
{
$errtext = CheckWarrningForm($section);
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}



CODE
if (!$errtext)
{
$errtext = CheckVerifyDaneKontatkoweForm('BezLogowania');
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
{
$errtext = CheckVerifyTelefonyForm('BezLogowania');
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
{
$errtext = CheckVerifyEmailForm('BezLogowania');
if ($errtext)
echo '<table width="535"><tr><td align="center" class="warrning">'.$errtext.'</td></tr></table>';
}

if (!$errtext)
$ogloszenie -> Zapamietaj($_POST);
$_SESSION['ogloszenie'] = $ogloszenie;
}

if (($action == 'save' && $errtext) || ($action == 'create') || ($action == 'edit'))
{

echo '<div id="search">
<form action="?page='.$page.'&action=save&id='.$id.'" method="post">
<input type="hidden" name="section" value="'.$section.'">
<input type="hidden" name="action" value="save">
<table width="535">
<tr>
<td colspan="3" style="border: solid #828282; border-width: 0px 0px 2px 0px;">
<h1>Podstawowe parametry pojazdu</h1>
</td>
</tr>
<tr>
<td width="179">
<b>';
ShowPanelLabel($section, 'markainput');
echo '</b><br>';
ShowPanel($section, 'markainput', $markainput); // pokaz marke
echo ' </td>
<td width="179">
<b>';
ShowPanelLabel($section, 'modelinput');
echo '</b><br>';
ShowPanel($section, 'modelinput', $modelinput);
echo ' </td>
<td width="179">
<b>';
ShowPanelLabel($section, 'a1');
echo '</b><br>';
ShowPanel($section, 'a1', $a1);


include ('addkontaktkrok2.php3');

echo '</table>
</form>
</div>';
}
}

?>



Zadeklarowałem język strony, dodałem do kodu tablicy oraz panelu dodawania ogłoszeń:
echo lang('jezykstrony'); w której mam zadeklarowane jezyki w zalezności od wybranego.
Z niewiadomych przyczyn zwraca mi teraz wartość "Array" a powinno co innego.
... ;/
Crozin
Proszę wstaw kod w tag [ php ], teraz się go czytać nie da.

Wyświetlanie "Array" spowodowane jest tym, że masz coś takiego (pseudo kod)
  1. <?php
  2.  'abc' => array(
  3.    'def' => 'Hello World'
  4.  )
  5. )
  6.  
  7. //i zamiast wyswietlac jako
  8. echo array[abc][def]
  9.  
  10. //wysiwetlasz
  11. echo array[abc]
  12. ?>
patryk9200
Niestety nie mogę wstawić tagów "[php]" ponieważ wyskakuje mi błąd, ze post jest zbyt długi....

hmm.... w takim razie jak mam się odwołać do wybranego elementu tablicy?

Chodzi mi o to żeby móc "zastąpić" element z tablicy2
elementem z tablicy1 "lang"
Ta 2 jest asocjacyjna a 1 zwykła.....
Crozin
Włącz wyświetlanie błędów - pewnie wywali jakiegoś E_NOTICEa, który rozwieje wątpliwści
  1. <?php
  2. ini_set('display_errors', true);
  3. error_reporting(E_ALL | E_STRICT);
  4. ?>


PS. I co to za zapis:
  1. <?php
  2. ''.lang('...').'';
  3. ?>
Nie można poporstu
  1. <?php
  2. lang('...');
  3. ?>
patryk9200
<wow>
A więc tak... włączyłem wyświetlanie błedów... i mi wyskoczyło ich dość trochę,
oto one:
[b]Notice: Undefined variable: link in /addogloszeniekrok2.php3 on line 592

Notice: Undefined index: in /showaddengine.php3 on line 303
[/b]Notice: Undefined variable: a116 in /addogloszeniekrok2.php3 on line 585
Notice: Undefined property: s15 in /addkontaktkrok2.php3 on line 265
Notice: Undefined variable: a101 in /addogloszeniekrok2.php3 on line 512

Notice: Undefined index: checkedautos in /showaddengine.php3 on line 625

Notice: Undefined index: id in /addogloszeniekrok2.php3 on line 8

Notice: Undefined index: special in /addogloszeniekrok2.php3 on line 12

Potem sie już tylko powtarzają;/
Co mam z tym zrobić?
hmmm....
może to być wina tego że było to kiedyś napisane w php3 a część jest teraz w php5 ?


Zrobiłem tak jak powiedziałeś.
Faktycznie odwoływanie się do elementu tablicy w ten sposób:
''.lang('language').'' jest błędne, jednakże gdu odwołuję się w ten sposób co napisałeś tzn.
lang ('language') wyskakują mi dane w języku polskim które są jako pierwsze w tablicy.
Dlaczego te dane nie zmieniają się gdy przełączę język na np. en, kiedy inne dane się zmieniają?
Tylko te z tej tablicy nie zmieniają sie zgodnie z ustawieniami...
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.