Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Big-D

Checkbox categorias {Resolvido}

Mensagens Recomendadas

Big-D

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado
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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

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')") ;}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Então que me sugeres fazer? Isto sempre deu bem porque eu utilizava um Select Option, mas o bossman lembrou-se de pedir checkboxs.

Qual o ciclo que tenho de fazer?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado
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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

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'.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
infopc

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Mas eu no meu caso uso o seguinte para me gerar a checkbox:

while($myrow = mysql_fetch_array($result))
{

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
infopc

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

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

mas e aonde teria eu de por isto?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
infopc

quando submetes o form vais para uma pagina php certo? nesse script percorres o array $_POST['checkbox'];


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
infopc

no inicio do teu script poen o seguinte:

var_dump($_POST);

e poem aqui o resultado


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Já tenho e continua a não dar. Continua na base de dados a adicionar ou array ou vazio e ja reparei que aparece o seguinte:

array(2) { [0]=> "CAT1 [1]=> string(9) "CAT2""}

mas não faz mais nada.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
infopc

isso quer dizer que esta vazio, o que é muito estranho posta ai o teu código que recebe o form


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Página onde insiro as informações:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
#apDiv1 {
position:absolute;
left:14px;
top:67px;
width:353px;
height:446px;
z-index:1;
}
#apDiv2 {
position:absolute;
left:35px;
top:574px;
width:73px;
height:22px;
z-index:2;
}
#apDiv3 {
position:absolute;
left:21px;
top:3px;
width:258px;
height:66px;
z-index:3;
}
#apDiv4 {	position:absolute;
left:31px;
top:16px;
width:236px;
height:63px;
z-index:2;
font-family: Tahoma, Geneva, sans-serif;
}
-->
</style>
</head>
<body>
<div id="apDiv1" style="border:groove; width:937px" align="center">
<form action="registonewsletters2.php" method="post" enctype="multipart/form-data" name="form1">
      <p>Titulo(*):
        <input name="titulo" type="text" id="username" size="50">
      </p>
      <p>Texto(*):
        <label>
          <textarea name="texto" cols="100" rows="10" id="textfield"></textarea>
        </label>
      </p>
      <p> </p>
      <p>Imagem(*):
        <label>
          <input type="file" name="imagem"/>
        </label>
      </p>
<p>Categoria(*):
  <?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']."";
  } 
}
?>
  <label>
   
  </label>
</p>
      <p>
        <input type="submit" name="upload" id="enviar" value="Registar" />
      </p>
<p> </p>
</form>
</div>
<div id="apDiv2"><a href="mostrarnewsletter.php"> « Voltar </a></div>
<div id="apDiv3">
  <h2>Nova Newsletter</h2>
</div>
</body>
</html>

Página que irá fazer a validação e inserção dos dados:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Registo Newsletters</title>

<body>
<?php 
include ("connection.inc");
require 'confignewsletters.php';  
require 'functionsnewsletters.php';  
var_dump($checkbox);
if($_FILES['imagem']['size'] > 10000000) {
die ("Introduza uma imagem com um tamanho mximo de 4mb");
}
//This gets all the other information from the form
$titulo=$_POST['titulo'];
$texto=$_POST['texto'];
$pic=($_FILES['imagem']['name']);
$categoria = $_POST['checkbox'];


// If the button of form is clicked then we will insert all the stuff in our DataBase
if (isset($_POST['upload'])) {

		// Here we verify that requireds textfields aren't emptys
if (empty($_POST['titulo']) || empty($_POST['texto'])) {

// If they're empty, then we put a message to alert the user	
	echo "<script>alert('Por favor preencha todos os campos obrigatrios(*)'); window.location=\"registonewsletters.php\"</script>";
// Verifying if exists user or not
	 }else{
$titulo2 = $_POST['titulo'];
$userCheck = mysql_query("SELECT titulon FROM newsletter WHERE titulon='$titulo'");
if(mysql_num_rows($userCheck) !== 0) {
echo "<script>alert('Já existe o titulo dessa newsletter, por favor escolha outro!'); window.location=\"registonewsletters.php\"</script>";
}else{

array ( $_POST['checkbox']);

  

// Setting up a blank variable to be used in the coming loop.
  $allStyles = "";

  // For every checkbox value sent to the form.
  if (is_array($_POST['checkbox'])){
  foreach ($_POST['checkbox'] as $style) {
    // Append the string with the current array element, and then add a comma and a space at the end.
    $allStyles .= $style . ", ";
  }
  }

mysql_query("INSERT INTO newsletter (titulon, texton, imagemn, categorian)
VALUES ('$titulo', '$texto', '$pic', '$categoria')") ;}
echo "<script>alert('Registado com sucesso!'); window.location=\"registonewsletters.php\"</script>";


//Writes the photo to the server
if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['imagem']['name'])) {  
        $filename = $pic;  
        $source = $_FILES['imagem']['tmp_name'];  
        $target = $path_to_image_directory . $filename;  
  
        move_uploaded_file($source, $target);  
  
        createThumbnail($filename);  
    }  

else {

//Gives and error if its not
echo "Sorry, there was a problem uploading your file.";
}

}
}
?>
</head></html>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.