Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Robson Barros da Rocha

Sessão com cookie

Recommended Posts

Olá pessoal.

 

Depois de meu último tópico, fiz um grande progresso em relação ao meu sistema de idioma. Está funcionando perfeitamente, como eu bem queria, porém, a parte dos cookies estão me dando uma certa dor de cabeça, porque, quando eu usei o método usando o include no index para mostrar a tradução de cada variável, eu consegui incluir o cookie. Ou seja, o internauta pode mudar de página que mesmo assim o idioma prevalece, sem mudar para o padrão.

 

Nesta nova versão do SQL, eu fiz isso, mas estou com problemas para refazer isso, até porque, não me recordo bem como eu consegui mantê-lo.

<?php 
			if(!preg_match('/^(fr)|(en)|(pt)$/', $_GET['lang'])) {
			$_SESSION['lang'] = $lang;
				$lng = 'pt';
			}
			else if(isSet($_SESSION['lang'])) {
			$lang = $_SESSION['lang'];
			}
			else if(isSet($_COOKIE['lang'])) {
			$lang = $_COOKIE['lang'];
			}
			else {
				$lng = $_GET['lang'];
			setcookie('lang', $lang, time() + (3600 * 24 * 30));
			}

?>

Eu me recordo de ter colocado o "setcookie('lang', $lang, time() + (3600 * 24 * 30));" para fazer o armazenamento, mas agora eu to enrolado e não consigo fazer o mesmo para este caso, que seleciona a tradução pelo BD.

 

De que maneira poderia usar armazenamento de cookies para este caso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Beraldo. Obrigado por responder. ;)

 

Eu pensei o mesmo ontem pela noite. Passei a madrugada toda tentando e tentando mas ainda não registra os cookies. No modelo antigo, eu tinha este código:

<?php
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
 
// register the session and set the cookie
$_SESSION['lang'] = $lang;
 
setcookie('lang', $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'pt';
}
 
switch ($lang) {
  case 'en':
  $lang_file = 'ingles.php';
  break;
 
  default:
  $lang_file = 'portugues.php';
 
}
 
include_once './languages/'.$lang_file;
?>

Eu até tinha comentado num outro tópico meu a respeito: http://forum.imasters.com.br/topic/537673-como-posso-usar-o-if-e-else-no-sql/ Essa sistema é feito via SQL, e no meu PHP eu só tenho o $lang['nome']; .

 

Bem, como viu eu tive que alterar ele, porque o sistema antigo era feito por um arquivo do FTP pt.php, mas agora com o uso do banco de dados, eu só não consigo registrar no cookie quando o usuário muda o idioma. Ou seja, se ele muda para Inglês, o cookie é registrado neste idioma até ele trocar manualmente ou o navegador se fechar.

 

No código acima que te passei do meu modelo antigo, ele faz exatamente isso que acabo de mencionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu código tem um problema: só salva o cookie no else. Pelo que entendi, você quer salvar o cookie não apenas no else, certo?

 

sua ER também tinha um problema. O "ou" (|) deve estar sempre dentro do grupo ("(" e ")")

 

Tente algo assim:

 

 

$lang = isset( $_GET['lang'] ) ? $_GET['lang'] : 'pt';
 
if ( ! preg_match('/^(fr|en|pt)$/', $lang ) ) {
   $lang = 'pt';
   $_SESSION['lang'] = $lang;
}
else if (isset($_SESSION['lang']) ) {
   $lang = $_SESSION['lang'];
}
else if(isset($_COOKIE['lang'])) {
   $lang = $_COOKIE['lang'];
   }
 
setcookie('lang', $lang, time() + (3600 * 24 * 30));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, isto é muito complicado de entender. A variável "$lng" existe no Select como bem enviei via MP para você. Se eu altero ela para $lang eu recebo o erro em todas as linhas que tem o <?php echo $lang['nome']; ?>. O erro seria o natural:

 

 

Illegal string offset 'nome' in ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se $lang é um array, você não pode tratá-la como string. E usar $lang no cookie não funcionará. Não se pode salvar arrays em cookies, apenas strings. Você pode converter o array para string com serialize() ou json_encode()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu dei uma lida severa no Manual do PHP sobre esta opção do serialize, e... pelo que compreendi eu só preciso adicionar tudo por dentro docódigo... Tipo:

serialize(códigoPHP) etc etc... Pois, eu já tenho uma $lang = array();

Compartilhar este post


Link para o post
Compartilhar em outros sites

É bem simples. Só passar o array como parêmtreo:

 

 

$bebidas = [
    'manhã' => 'café',
    'noite' => 'vinho',
];
 
$serialized = serialize( $bebidas );
$json = json_encode( $bebidas );
 
var_dump( $serialized );
var_dump( $json );
 
$bebidas_unserialized = unserialize( $serialized );
$bebidas_json = json_decode( $json, true );
 
var_dump( $bebidas_unserialized );
var_dump( $bebidas_json );

 

Saída:

 


$ php test.php
string(55) "a:2:{s:6:"manhã";s:5:"café";s:5:"noite";s:5:"vinho";}"
string(42) "{"manh\u00e3":"caf\u00e9","noite":"vinho"}"
array(2) {
'manhã' =>
string(5) "café"
'noite' =>
string(5) "vinho"
}
array(2) {
'manhã' =>
string(5) "café"
'noite' =>
string(5) "vinho"
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.