Jump to content
soueu

[Resolvido] Manipular checkbox em PHP sem o submit

Recommended Posts

soueu

Boas amigos,

Então é assim, estou desenvolvendo um Painel de Administração para a minha página e neste momento encontro-me na página de gestão de utilzadores, como tal, vou buscar à base de dados a sua informação e a mostro numa tabela. Nesta tabela existem umas checkboxes, que deverão ser selecionadas para serem posteriormente manipuladas no PHP.

Não estou usando submit porque estou usando um dropdown e não um botão...

Código:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Utilizadores - Administração</title>
<link rel="stylesheet" href="../includes/Messi/messi.min.css" />
<script src="js/jquery/jquery-1.9.1.min.js"></script>
<script src="../includes/Messi/messi.min.js"></script>
</head>
<body>
<?php
if(!isset($_SESSION)) {
session_start();
}

$page = 'adm_users';
$sub_page = 'adm_users_list';

require_once('../includes/basedados.php');

// Se o utilizador não estiver logado, apresentar mensagem de erro.
if(!isset($_SESSION['utilizador_id'])) { ?>
<h2>Não tem permissões para visualizar esta página</h2>
<p>É necessário ter login efetuado para visualizar esta página.
<br>Clique <a href="index.php">aqui</a> e efetue o login.
<?php
// Se o utilizador estiver logado, prosseguir até próxima verificação...
} else {
// Se o utilizador não for Administrador, apresentar mensagem de erro.
if(!$_SESSION['nivel_utilizador'] == 2) { ?>
  <h2>Não tem permissões para visualizar esta página</h2>
	<p>É necessário ter privilégios de Administrador para visualizar o conteúdo desta página.
  <?php
header("refresh: 5; ../index.php");

// Se o utilizador estivar logado e for Administrador, apresentar o conteúdo da página.
} else {
		include 'temas/default/cabecalho.php';
		include 'temas/default/navegacao.php';
?>

<div id="content">

<!--  start page-heading -->
<div id="page-heading">
<h1>Utilizadores</h1>
</div>
<!-- end page-heading -->

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">
<tr>
<th rowspan="3" class="sized"><img src="images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>
<th class="topleft"></th>
<td id="tbl-border-top"> </td>
<th class="topright"></th>
<th rowspan="3" class="sized"><img src="images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>
</tr>
<tr>
<td id="tbl-border-left"></td>
<td>
<!--  start content-table-inner ...................................................................... START -->
<div id="content-table-inner">

<!--  start table-content  -->
<div id="table-content">
<!--  start product-table ..................................................................................... -->
<form id="user_form" action="utilizadores.php" method="POST">
<table border="0" width="100%" cellpadding="0" cellspacing="0" id="product-table">
<tr>
<th class="table-header-check"><a id="toggle-all" ></a> </th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Utilizador</a> </th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Nome</a></th>
<th class="table-header-repeat line-left"><a href="">Email</a></th>
<th class="table-header-repeat line-left"><a href="">Data Registo</a></th>
<th class="table-header-repeat line-left"><a href="">Último Login</a></th>
<th class="table-header-options line-left"><a href="">Ativado</a></th>
</tr>

<?php
$mostrarUtilizadores = $conn->query("SELECT * FROM utilizadores ORDER BY utilizador_id DESC");
while($output = $mostrarUtilizadores->fetch(PDO::FETCH_ASSOC)) { ?>
<tr>
<td><input type="checkbox" value="<?php echo $output['utilizador_id']; ?>" name="selec[]" /></td>
<td><?php echo $output['utilizador']; ?></td>
<td><?php echo $output['nome'].' '.$output['sobrenome']; ?></td>
<td><a href="mailto:<?php echo $output['email']; ?>"><?php echo $output['email']; ?></a></td>
<td><?php echo $output['data_registo']; ?></td>
<td><?php echo $output['data_ultimo_login']; ?></td>
<td><?php if(($output['ativado']) == 1) echo 'Sim'; else echo 'Não'; ?></td>
</tr>
<?php } ?>
</table>
</form>
<!--  end product-table................................... -->
</div>
<!--  end content-table  -->

<!--  start actions-box ............................................... -->
<div id="actions-box">
<a href="" class="action-slider"></a>
<div id="actions-box-slider">
  <a href="?accao=editar" onclick="document.getElementById('user_form').submit(); return false;" class="action-edit">Editar</a>
<a href="?accao=apagar" onclick="document.getElementById('user_form').submit(); return false;" class="action-delete">Apagar</a>
</div>
<div class="clear"></div>
</div>
<!-- end actions-box........... -->

<!--  start paging..................................................... -->
<table border="0" cellpadding="0" cellspacing="0" id="paging-table">
<tr>
<td>
<a href="" class="page-far-left"></a>
<a href="" class="page-left"></a>
<div id="page-info">Página <strong>1</strong> / 15</div>
<a href="" class="page-right"></a>
<a href="" class="page-far-right"></a>
</td>
</tr>
</table>
<!--  end paging................ -->

<div class="clear"></div>

</div>
<!--  end content-table-inner ............................................END  -->
</td>
<td id="tbl-border-right"></td>
</tr>
<tr>
<th class="sized bottomleft"></th>
<td id="tbl-border-bottom"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>

</div>
</body>
<?php

function apagar() {
if(isset($_POST['selec'])) {
	if(sizeof($_POST['selec']) > 1) {
		echo "<script>";
		echo "new Messi('Deverá apenas selecionar um Utilizador.', {title: 'Erro', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});";
		echo "</script>";
	} else {
		foreach($_POST['selec'] as $key => $value) {
  try {
				$sql = $conn->prepare("DELETE * FROM ".TB_USER." WHERE utilizador_id = ?");
  $sql->execute(array($value));
				echo "<script>";
				echo "new Messi('Utilizador apagado com sucesso!', {title: 'Informação', titleClass: 'success', buttons: [{id: 0, label: 'Close', val: 'X'}]});";
				echo "</script>";
   } catch(PDOException $ex) {
  echo 'ERRO: ' . $ex->getMessage();
}
		}
	}
} else {
	echo "<script>";
	echo "new Messi('É necessário selecionar um Utilizador.', {title: 'Erro', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});";
	echo "</script>";
}
}
function editar() {
echo "<script>";
echo "new Messi('Função Editar', {title: 'Informação', titleClass: 'success', buttons: [{id: 0, label: 'Close', val: 'X'}]});";
echo "</script>";
}


if (isset($_GET['accao'])) {
switch($_GET['accao']) {
	case 'apagar': apagar(); break;
	case 'editar': editar(); break;
}
}

include 'temas/default/rodape.php';
} } ?>

Aqui está o que estou falando:

checkboxes.jpg

Alguma ajuda?

Edited by soueu

Share this post


Link to post
Share on other sites
I-NOZex

eu so nao vejo é onde é que ta a duvida...

Nota: no codigo da imagem tens de meter o link directo da imagem (algo tipo www.host.com/imagem.jpg)

  • Vote 1

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
soueu

A dúvida está no Tópico: Manipular checkbox em PHP sem o submit

Sai sempre a mensagem: "É necessário selecionar um Utilizador", o que quer dizer que a função não está a detetar a seleção no checkbox...

Ou seja, as opções da lista dropdown (Editar, Apagar) não estão a interagir com as opções marcadas no checkbox, e eu queria saber como o fazer sem ter que usar um botão Submit. Queria apenas marcar a opção e selecionar lá na lista o Editar ou Apagar...

PS: Hmm...estranho, pensei que o tinha feito, peço desculpa.

Share this post


Link to post
Share on other sites
I-NOZex

a cena é que tu tas a usar um link apenas, nao envia conteudo (post)

mete as checkbox's, alias, a tabela dentro de um form

e adiciona aos links um

[b]onclick="document.getElementById('my_form').submit(); return false;"[/b]

não estou certo se rezolve completamente, mas em parte ja vai funcionar pois ja envia um post ;)

  • Vote 1

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
soueu

Obrigado pela resposta, I-NOZex.

Eu tentei usar antes, mas não consegui pois não tinha a certeza como enviar o conteudo da FORM para o PHP.

Mesmo assim não consigo enviar o formulário...

Código Atual:

<tr>
 <form id="user_form" method="POST">
<td><input type="checkbox" name="selec[]" /></td>
 </form>
</tr>

<div id="actions-box">
 <a href="" class="action-slider"></a>
 <div id="actions-box-slider">
<a href="?accao=editar" onclick="document.getElementById('user_form').submit(); return false;" class="action-edit">Editar</a>
<a href="?accao=apagar" onclick="document.getElementById('user_form').submit(); return false;" class="action-delete">Apagar</a>
 </div>
 <div class="clear"></div>
</div>

:S

Share this post


Link to post
Share on other sites
I-NOZex

espero nao tar em erro, mas o que te falta é adicionares um atributo value as checkbox, nessa value metes o id ao user que se refere, deste genero:

    <td><input type="checkbox" value="1" name="selec[]" /></td>
    <td><input type="checkbox" value="2" name="selec[]" /></td>

ele assim ja envia uma valor correcto no post

se nao tiver nenhuma check selecionada, nao envia nenhum valor no selec[], se tiver ele envia as que tao ;)

se resolver, mete like :D eu testei aqui e pareceu-me ser o que falta

  • Vote 1

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
soueu

Agora fiquei abananado :S

Aqui está o meu código:

<?php
  $mostrarUtilizadores = $conn->query("SELECT * FROM utilizadores ORDER BY utilizador_id DESC");
while($output = $mostrarUtilizadores->fetch(PDO::FETCH_ASSOC)) { ?>
<tr>
  <form id="user_form" method="POST">
  <td><input type="checkbox" value="1" name="selec[]" /></td>
  <td><?php echo $output['utilizador']; ?></td>
  <td><?php echo $output['nome'].' '.$output['sobrenome']; ?></td>
  <td><a href="mailto:<?php echo $output['email']; ?>"><?php echo $output['email']; ?></a></td>
  <td><?php echo $output['data_registo']; ?></td>
  <td><?php echo $output['data_ultimo_login']; ?></td>
  <td><?php if(($output['ativado']) == 1) echo 'Sim'; else echo 'Não'; ?></td>
</form>
</tr>
<?php } ?>
</table>
<!--  end product-table................................... -->
</form>
</div>
<!--  end content-table  -->

<!--  start actions-box ............................................... -->
<div id="actions-box">
<a href="" class="action-slider"></a>
<div id="actions-box-slider">
  <a href="?accao=editar" onclick="document.getElementById('user_form').submit(); return false;" class="action-edit">Editar</a>
<a href="?accao=apagar" onclick="document.getElementById('user_form').submit(); return false;" class="action-delete">Apagar</a>
</div>
<div class="clear"></div>
</div>
<!-- end actions-box........... -->


function apagar() {
if(isset($_POST['selec'])) {
	if(sizeof($_POST['selec']) == 2) {
		echo "<script>";
		echo "Deverá apenas selecionar um Utilizador";
		echo "</script>";
	} else {
		foreach($_POST['selec'] as $key => $value) {
			echo $value;
		}
	}
} else {
	echo "<script>";
	echo "É necessário selecionar um Utilizador";
	echo "</script>";
}
}
function editar() {
echo "<script>";
echo "Função Editar";
echo "</script>";
}


if (isset($_GET['accao'])) {
switch($_GET['accao']) {
	case 'apagar': apagar(); break;
	case 'editar': editar(); break;
}
}

Como ficaria no meu caso?

Share this post


Link to post
Share on other sites
I-NOZex

em vez de

<td><input type="checkbox" value="1" name="selec[]" /></td>

metes

<td><input type="checkbox" value="<?=$output['id']; ?>" name="selec[]" /></td>

presumindo que a chave primaria se chama ID...

e o form deve de englobar a tabela, ou seja, deves de abrir a tag antes do <table> e fechar depois do </table>

Edited by I-NOZex
  • Vote 1

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
soueu

Que rapidez :P

Já está detetando a checkbox, problema resolvido, muito obrigado! :)

Share this post


Link to post
Share on other sites
I-NOZex

eheh, sempre disposto a ajudar, se bem que não o fazia assiduamente mas decidi dar um maior contributo a comunidade, ja por varias vezes me terem solucionado problemas.

Ainda bem que já funciona ;)

na real o teu unico problema era so fazer o submit com um <a> link, ao qual so faltava aquela instrução js no onclick, faltava-te o formulario tambem, mas a solução para fazer um submit sem submit button é por via de js

Boas programações :thumbsup:

  • Vote 1

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
soueu

Peço desculpa por estar reabrindo este tópico, mas depois de algum tempo testando o meu projeto, não consigo colocar a funcionar o checkbox...

Eu penso que o

 $_POST['selec'] 

não está funcionando corretamente, pois sempre que seleciono uma checkbox recebo a mensagem de output "Deverá apenas selecionar um Utilizador".

Deixo aqui o código completo da pagina:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Utilizadores - Administração</title>
<link rel="stylesheet" href="../includes/Messi/messi.min.css" />
<script src="../includes/Messi/messi.min.js"></script>
</head>
<body>
<?php
if(!isset($_SESSION)) {
session_start();
}

$page = 'adm_users';
$sub_page = 'adm_users_list';

require_once('../includes/basedados.php');

// Se o utilizador não estiver logado, apresentar mensagem de erro.
if(!isset($_SESSION['utilizador_id'])) { ?>
<h2>Não tem permissões para visualizar esta página</h2>
<p>É necessário ter login efetuado para visualizar esta página.
<br>Clique <a href="index.php">aqui</a> e efetue o login.
<?php
// Se o utilizador estiver logado, prosseguir até próxima verificação...
} else {
// Se o utilizador não for Administrador, apresentar mensagem de erro.
if(!$_SESSION['nivel_utilizador'] == 2) { ?>
  <h2>Não tem permissões para visualizar esta página</h2>
	<p>É necessário ter privilégios de Administrador para visualizar o conteúdo desta página.
  <?php
header("refresh: 5; ../index.php");

// Se o utilizador estivar logado e for Administrador, apresentar o conteúdo da página.
} else {
		include 'temas/default/cabecalho.php';
		include 'temas/default/navegacao.php';
?>

<div id="content">

<!--  start page-heading -->
<div id="page-heading">
<h1>Utilizadores</h1>
</div>
<!-- end page-heading -->

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">
<tr>
<th rowspan="3" class="sized"><img src="images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>
<th class="topleft"></th>
<td id="tbl-border-top"> </td>
<th class="topright"></th>
<th rowspan="3" class="sized"><img src="images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>
</tr>
<tr>
<td id="tbl-border-left"></td>
<td>
<!--  start content-table-inner ...................................................................... START -->
<div id="content-table-inner">

<!--  start table-content  -->
<div id="table-content">
<!--  start product-table ..................................................................................... -->
<form id="mainform" action="">
<form id="user_form" method="POST">
<table border="0" width="100%" cellpadding="0" cellspacing="0" id="product-table">
<tr>
<th class="table-header-check"><a id="toggle-all" ></a> </th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Utilizador</a> </th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Nome</a></th>
<th class="table-header-repeat line-left"><a href="">Email</a></th>
<th class="table-header-repeat line-left"><a href="">Data Registo</a></th>
<th class="table-header-repeat line-left"><a href="">Último Login</a></th>
<th class="table-header-options line-left"><a href="">Ativado</a></th>
</tr>

<?php
  $mostrarUtilizadores = $conn->query("SELECT * FROM utilizadores ORDER BY utilizador_id DESC");
while($output = $mostrarUtilizadores->fetch(PDO::FETCH_ASSOC)) { ?>
  <tr>
  <td><input type="checkbox" value="<?php echo $output['utilizador_id']; ?>" name="selec[]" /></td>
  <td><?php echo $output['utilizador']; ?></td>
  <td><?php echo $output['nome'].' '.$output['sobrenome']; ?></td>
  <td><a href="mailto:<?php echo $output['email']; ?>"><?php echo $output['email']; ?></a></td>
  <td><?php echo $output['data_registo']; ?></td>
  <td><?php echo $output['data_ultimo_login']; ?></td>
  <td><?php if(($output['ativado']) == 1) echo 'Sim'; else echo 'Não'; ?></td>
  </tr>
<?php } ?>
</table>
</form>
</form>
<!--  end product-table................................... -->
</div>
<!--  end content-table  -->

<!--  start actions-box ............................................... -->
<div id="actions-box">
<a href="" class="action-slider"></a>
<div id="actions-box-slider">
  <a href="?accao=editar" onclick="document.getElementById('user_form').submit(); return false;" class="action-edit">Editar</a>
<a href="?accao=apagar" onclick="document.getElementById('user_form').submit(); return false;" class="action-delete">Apagar</a>
</div>
<div class="clear"></div>
</div>
<!-- end actions-box........... -->

<!--  start paging..................................................... -->
<table border="0" cellpadding="0" cellspacing="0" id="paging-table">
<tr>
<td>
<a href="" class="page-far-left"></a>
<a href="" class="page-left"></a>
<div id="page-info">Página <strong>1</strong> / 15</div>
<a href="" class="page-right"></a>
<a href="" class="page-far-right"></a>
</td>
</tr>
</table>
<!--  end paging................ -->

<div class="clear"></div>

</div>
<!--  end content-table-inner ............................................END  -->
</td>
<td id="tbl-border-right"></td>
</tr>
<tr>
<th class="sized bottomleft"></th>
<td id="tbl-border-bottom"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>

</div>
</body>
<?php

function apagar() {
if(isset($_POST['selec'])) {
	if(sizeof($_POST['selec']) == 2) {
		echo "<script>";
		echo "new Messi('Deverá apenas selecionar um Utilizador.', {title: 'Erro', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});";
		echo "</script>";
	} else {
		foreach($_POST['selec'] as $key => $value) {
  try {
				$sql = $conn->prepare("DELETE * FROM ".TB_USER." WHERE utilizador_id = ?");
  $sql->execute(array($value));
				echo "<script>";
				echo "new Messi('Utilizador apagado com sucesso!', {title: 'Informação', titleClass: 'success', buttons: [{id: 0, label: 'Close', val: 'X'}]});";
				echo "</script>";
   } catch(PDOException $ex) {
  echo 'ERRO: ' . $ex->getMessage();
}
		}
	}
} else {
	echo "<script>";
	echo "new Messi('É necessário selecionar um Utilizador.', {title: 'Erro', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});";
	echo "</script>";
}
}
function editar() {
echo "<script>";
echo "new Messi('Função Editar', {title: 'Informação', titleClass: 'success', buttons: [{id: 0, label: 'Close', val: 'X'}]});";
echo "</script>";
}


if (isset($_GET['accao'])) {
switch($_GET['accao']) {
	case 'apagar': apagar(); break;
	case 'editar': editar(); break;
}
}

include 'temas/default/rodape.php';
} } ?>

Share this post


Link to post
Share on other sites
brunoais

Mostra o HTML de output disso + o javascript (exceto bibliotecas externas), sff.

  • Vote 1

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
I-NOZex

eu fiz aqui uns peqenos testes com base no teu codigo, e se as checkboxs selecionadas, forem apenas 2, é que mostra essa mensagem, se for apenas uma ou 3 ou mais, nao manda mensagem nenhuma, ou seja, precisas de mudar essa condiçao para isto:

if(sizeof($_POST['selec']) > 1)

  • Vote 1

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
soueu

Mostra o HTML de output disso + o javascript (exceto bibliotecas externas), sff.

Não entendi bem... Postei o código completo, só não postei a biblioteca (externa) que estou usando. Messi: http://marcosesperon.es/apps/messi/

As restantes bibliotecas inclusas não têm nada haver, são apenas do tema do site.

eu fiz aqui uns peqenos testes com base no teu codigo, e se as checkboxs selecionadas, forem apenas 2, é que mostra essa mensagem, se for apenas uma ou 3 ou mais, nao manda mensagem nenhuma, ou seja, precisas de mudar essa condiçao para isto:

if(sizeof($_POST['selec']) > 1)

Hum, faz sentido. No entando ainda obtenho o output: "É necessário selecionar um Utilizador." Quando seleciono 1 ou mais checkboxes. Se não selecionar checkbox nenhum = mesmo efeito.

É como se o PHP não reconhece-se o valor do input da form.

Edited by brunoais
removido o quote triplo

Share this post


Link to post
Share on other sites
brunoais

@soueu

Qual é o output do teu programa? O que é que o browser vê?

Edited by brunoais
  • Vote 1

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
soueu

e explica-me porque raio tens um form dentro do outro???

Eu também estava pensando sobre isto, na verdade não sei, por alguma razão o devo ter feito, mas o facto é que se remover o "mainform" o "user_form" deixa de ser detectado.

@soueu

Qual é o output do teu programa? O que é que o browser vê?

Dá o seguinte output:

Não é possível obter a propriedade 'submit' de uma referência não definida ou nula
Edited by soueu

Share this post


Link to post
Share on other sites
I-NOZex

isso é pq o user form n tem uma action... tens de meter o nome do ficheiro!

e depois ja podes eliminar o outro, penso eu de que...

  • Vote 1

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
soueu

Definir uma action vale mais quando queremos manipular uma form por um ficheiro externo. Quando não especificamos uma action o ficheiro atual é automaticamente assumido.

De qualquer das formas, não fez diferença e retirando o primeiro form (mainform) fez com que o submit deixa-se de ter efeito :(

Share this post


Link to post
Share on other sites
I-NOZex

mas deixar em branco nao é correcto de todo!

uhm...

olha faz update do codigo no primeiro post sfv, para ver melhor agora como ta, pode ser?

  • Vote 1

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.