Jump to content

Checkbox categorias {Resolvido}


Big-D
 Share

Recommended Posts

Utilizo o seguinte código para registar na base de dados a categoria, mas não consigo adcionar mais do que uma categoria por registo.

<?php
include "connection.inc";
$result=mysql_query("SELECT nomecn FROM categoriasn");
if($result)
{ 
while($myrow = mysql_fetch_array($result))
{
echo "<input type='checkbox' name='checkbox' value='".$myrow['nomecn']."'/>".$myrow['nomecn'].""; 
} 
}
?>

Sugestões? Obrigado

Link to comment
Share on other sites

Utilizo o seguinte código para registar na base de dados a categoria, mas não consigo adcionar mais do que uma categoria por registo.

O name do input tem de ser no formato array, assim:

echo "<input type='checkbox' name='checkbox[]' value='".$myrow['nomecn']."'/>".$myrow['nomecn'].""; 

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Bom dia,

A situação é a seguinte, após meter a linha de código como disseste ele apenas guarda na base de dados a categoria com o nome de Array, e na parte em que deveria listar as newsletters ele não mostra, porque não existe nenhuma categoria chamada Array.

Link to comment
Share on other sites

A situação é a seguinte, após meter a linha de código como disseste ele apenas guarda na base de dados a categoria com o nome de Array, e na parte em que deveria listar as newsletters ele não mostra, porque não existe nenhuma categoria chamada Array.

Quê? Não percebi puto...

Mostra lá o código...

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

O código que tu me deste serve para listar com um ciclo While todas as categorias existentes na BD em checkboxs.

Depois, quando eu selecciono a(s) checkbox(s) ele tem de inserir na BD as categorias seleccionadas, ou seja, na página de inserção tenho o seguinte:

$categoria=$_POST['checkbox'];

mysql_query("INSERT INTO newsletter (titulon, texton, imagemn, categorian)
VALUES ('$titulo', '$texto', '$pic', '$categoria')") ;}
Link to comment
Share on other sites

E como queres que ele insira múltiplos valores (se escolher várias categorias) apenas com uma instrução SQL? Tens que ter, também, um ciclo para inserir as várias categorias.

Mas, para isso, já tens a estrutura da BD mal feita, visto que a entidade newsletter pode ter várias propriedades categorian, certo? Isso tinha que ser desviado para uma tabela auxiliar.

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Qual o ciclo que tenho de fazer?

O que quiseres, um while ou um for ou um foreach...

Mas tens problemas mais graves, lê o resto da minha resposta anterior.

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Que queres dizer com isto? Que tenho que criar uma outra tabela?

Aparentemente, mas tu é que sabes, não conheço a BD nem o seu propósito para te dar uma resposta definitiva.

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Ora muito bem, as 3 principais tabelas para esta parte das newsletters funcionarem são:

categoriasn

idcn  int  null  auto_increment

nomecn  text  null

email

idemail  int  null  auto_increment

email  text  null

categorian  text  null

data  timestamp  null  current_timestamp

newsletter

idn  int  auto_increment

titulon  text  null

texton  text  null

imagemn  text  null

data  timestamp  null  current_timestamp

categorian  text  null

status  text  null

Agora, as categorias podem ter vários emails associados - está funcionando;

E os email podem estar associados a mais do que uma categoria (e.g. omeu.email@teste.pt pode receber newsletter das categorias teste 1 e teste2) - isto não está a funcionar, pois como já disse metendo aquilo que me deste ele adciona na BD a categoria com o nome de array, em vez de guardar ou o nome das categorias seleccionadas ou um valor numérico associado.

Estou vendo (no link abaixo) se encontro maneira de por isto a dar...

http://www.daniweb.com/forums/thread165648.html

Eu agora vou experimentar pelo exemplo que vi e já dou um reply.

Desde já obrigado pela ajuda.

Link to comment
Share on other sites

Tu não tens um problema com o PHP, tens, antes de mais nada, um problema de arquitectura da BD...

Uma categoria pode ter vários e-mails e um e-mail pode pertencer a várias categorias. Isto configura uma relação de muitos para muitos, cuja implementação prática requer uma tabela auxiliar intermédia.

[ categoriasn ] >-----------< [ email ]

é equivalente, na prática, a

[ categoriasn ] >---|- [ AUX_categoriasn_email ] -|---< [ email ]

Sendo as propriedades das tabelas (os '*' são chaves primárias):

[ categoriasn ]
idcn*
nomecn

[ email ]
idemail*
email
data

[ AUX_categoriasn_email]
idcn*
idemail*

Quando queres actualizar as relações (com as checkboxes), mexendo na tabela auxiliar, tens de:

1. limpar as ligações antigas associadas ao e-mail;

2. inserir as novas ligações das checkboxes setadas;

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Embora tenha lido com bastante atenção o que disseste ainda não o pus em prática, pois estava ainda a tentar pelo outro exemplo...e cheguei a conclusão que funciona em parte, ele ao registar a newsletter e seleccionar mais do que uma checkbox ele adiciona na BD com o nome de array e isto porque na checkbox name eu pus "name='checkbox[]", caso os parênteses rectos não estejam e eu seleccionar mais do que uma categoria ele regista sempre a ultima e se eu seleccionar por exemplo para registar na CAT 'A' ele regista na 'A' se for na 'B' ele regista na 'B'.

Link to comment
Share on other sites

no que diz respeito a html

<input type="checkbox" name="checkbox" value="1" />
<input type="checkbox" name="checkbox" value="2" />
<input type="checkbox" name="checkbox" value="3" />

vais ter sempre o valor 3 no index checkbox do array $_GET

se queres varios valores tens que passar vários index

assim

<input type="checkbox" name="checkbox1" value="1" />
<input type="checkbox" name="checkbox2" value="2" />
<input type="checkbox" name="checkbox3" value="3" />

assim no php tens

echo $_GET['checkbox1']; //1
echo $_GET['checkbox2']; //2
echo $_GET['checkbox3']; //3

depois é só percorrer o array $_get e tratar a info

Fica bem

O que não tem solução, solucionado esta...

Link to comment
Share on other sites

sim e qual é a dificuldade?

$n = 1;
while($myrow = mysql_fetch_array($result))
{
       
echo "<input type='checkbox' name='checkbox".$n."' value='".$myrow['nomecn']."'/>".$myrow['nomecn']."";
$n++;
  }
}

checkboxes diferentes ou melhor ainda

while($myrow = mysql_fetch_array($result))
{
       
echo "<input type='checkbox' name='checkbox[]' value='".$myrow['nomecn']."'/>".$myrow['nomecn']."";
  }
}

e depois tratas assim

$_POST['checkbox'][0];
$_POST['checkbox'][1];
$_POST['checkbox'][2];
//...
$_POST['checkbox'][$n];

assim até se torna um pouco mias simples (acho eu)

Fica bem

O que não tem solução, solucionado esta...

Link to comment
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
 Share

×
×
  • 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.