Ir para conteúdo

POWERED BY:

Arquivado

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

jean_c_g

For each repetindo

Recommended Posts

Estou com o seguinte problema.

Tenho um checkbox com categoria e subcategoria

 

Insiro isso através do for each.

O grande problema que se insiro mais de uma opção o foreach não traz correto. ele apenas funciona se selecionar uma categoria e as subcategorias.

se selecionar mais de uma categoria ele não busca todos valores e repete todas subcategorias. porque pelo que vi o foreach não sabe quem pertence a quem

o codigo está assim

 

 

$titulo = $_POST['titulo'];

 

$subsub = $_POST['checkboxsubsub'];

$sub = $_POST['checkboxsub'];

$cat = $_POST['checkboxcat'];

 

if ($_GET["a"] == "enviar_pergunta"){

$adicionar = mysql_query("INSERT INTO pergunta (descricao) VALUES ('{$titulo}')")or die(mysql_error());

$codigo = mysql_insert_id();

 

foreach($cat as $cat_id )

{

echo "id da categoria". $cat_id."</br>";

foreach($sub as $sub_id )

{

echo "id da subcategoria ". $sub_id."</br>";

 

$adicionar2 = mysql_query("INSERT INTO rcategorias (idpergunta, idcategoria, idsubcategoria) VALUES ('{$codigo}','{$cat_id}','{$sub_id}')")or die(mysql_error());

}

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

3 coisas....esse $cat e esse $sub sao arrays neah!?

 

a otra coisa...onde termina a condicao do if???o codigo tah todo aih???

pq n to vendo a outra chave nao

 

e a terceira eh... pq voce tah usando o insert assim???

$adicionar = mysql_query("INSERT INTO pergunta (descricao) VALUES ('{$titulo}')")or die(mysql_error());

Compartilhar este post


Link para o post
Compartilhar em outros sites

3 coisas....esse $cat e esse $sub sao arrays neah!?

 

a otra coisa...onde termina a condicao do if???o codigo tah todo aih???

pq n to vendo a outra chave nao

 

e a terceira eh... pq voce tah usando o insert assim???

$adicionar = mysql_query("INSERT INTO pergunta (descricao) VALUES ('{$titulo}')")or die(mysql_error());

$titulo = $_POST['titulo'];

 

$subsub = $_POST['checkboxsubsub'];

$sub = $_POST['checkboxsub'];

$cat = $_POST['checkboxcat'];

 

if ($_GET["a"] == "enviar_pergunta"){

 

foreach($cat as $cat_id )

{

echo "id da categoria". $cat_id."</br>";

foreach($sub as $sub_id )

{

echo "id da subcategoria ". $sub_id."</br>";

 

$adicionar2 = mysql_query("INSERT INTO rcategorias (idpergunta, idcategoria, idsubcategoria) VALUES ('{$codigo}','{$cat_id}','{$sub_id}')")or die(mysql_error());

}

 

}

 

aquele insert lá pode esquecer o que vale é isso.

O problema seria o seguinte!

 

Se eu seleciono 2 categorias ele repete os valores porque tem um foreach dentro de um foreach.

 

Se eu selecionar assim

 

Categoria: banco de dados

Sub categoria: oracle funciona.

 

Se eu seleciona 2 categorias assim

 

Categoria: banco de dados

Sub categoria: oracle funciona.

 

 

Categoria: sistema operacional

Sub-categoria: windows

 

Se perde no valor ele repete 2 vezes a categoria quando seleciona 2 isso é o problema ai acaba repetindo 2 vezes a categoria porque selecionei 2 subcategorias, o problema é no foreach

Compartilhar este post


Link para o post
Compartilhar em outros sites

mostra ae como voce ta setando as variaveis $cat e $sub pra eu testa aki

otra coisa...voce quer que seja mostrado

tipo:

Categoria1:

Subcategoria 1

Subcategoria 2

 

Categoria2:

Sub...........

........

........

 

eh isso?

:) :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim Batatinha

 

vamos supor que tem o seguinte.

 

Estas variveis vem do banco de dados atraves das checkboxes.

 

o grande problema é se colocar mais um foreach que se perde. se seleciono 2 categorias e 2 subcategoria ele entra no looping 2 vezes sacou?

 

mais facil é te passar meu BD para entender melhor qual seu email?

 

mostra ae como voce ta setando as variaveis $cat e $sub pra eu testa aki

otra coisa...voce quer que seja mostrado

tipo:

Categoria1:

Subcategoria 1

Subcategoria 2

 

Categoria2:

Sub...........

........

........

 

eh isso?

:) :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

mandei meu email por MP

tipo...voce seleciona 2 opcoes na mesma checkbox???

se for isso sempre vai entra no loop 2x a nao ser c voce por um if dentro do loop...

me add aih no msn pq eh + facil pra t ajuda

flwss

 

mandei meu email por MP

tipo...voce seleciona 2 opcoes na mesma checkbox???

se for isso sempre vai entra no loop 2x a nao ser c voce por um if dentro do loop...

me add aih no msn pq eh + facil pra t ajuda

flwss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde jean_c_g,

Poste a estrutura do seu formulário para ficar mais claro. Se você quer somente pegar as informações de diversos Checkboxs, não precisa usar o foreach, pode somente contar quantos checkbox estão selecionado e ir pegando seus valores.

 

Abraços,

Léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde jean_c_g,

Poste a estrutura do seu formulário para ficar mais claro. Se você quer somente pegar as informações de diversos Checkboxs, não precisa usar o foreach, pode somente contar quantos checkbox estão selecionado e ir pegando seus valores.

 

Abraços,

Léo

 

Ta ai leo

 

 

<?php

 

 

require_once("config.php");

require_once("functions.php");

 

 

?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<title>.:| Área de Manutenção |:.</title>

<link href="style.css" rel="stylesheet" type="text/css">

<script language="javascript">

/* função para alterar o conteúdo do editor */

 

/* função chamada pelo select para realizar a consulta dos valores dos campos */

 

function pesquisar_subcategoria(valor) {

/* valor será 0 (zero) se for para adicionar um novo item */

if(valor != 0) {

 

/* apresenta os botões para alterar ou excluir o item selecionada */

 

/* zera os valores dos campos */

/* realiza a consulta dos valores para os campos */

http.open("GET", "consulta_dados.php?area=pergunta&id=" + valor, true);

http.onreadystatechange = handleHttpResponse;

http.send(null);

}

}

 

function verifica(isSelected, valor){

alert(valor);

if(isSelected){

pesquisar_subcategoria(valor);

}else{

var obj = document.getElementById(valor);

obj.innerHTML = "";

 

}

}

/* função chamada ao concluir a consulta dos dados para os campos */

function handleHttpResponse() {

/* se não foi encontrado nenhum erro */

if (http.readyState == 4) {

 

if (http.status == 200) {

 

/* texto recebe a string retornada pela consulta anterior */

texto = http.responseText;

//alert(texto);

/* desfaz o urlencode enviado pelo php para preservar os dados pelo método GET */

texto = texto.replace(/\+/g," ");

texto = unescape(texto);

/* separa a string retornada e a adiciona em uma matriz */

string = texto.split("|");

/* define os valores dos campos de acordo com a consulta */

//document.forms[0].subcategoria.value = string[0];

//var conteudo = eval("conteudo").innerHTML;

eval("conteudo").innerHTML = string;

//eval("conteudo").innerHTML += string[0];

alert(eval("conteudo").innerHTML);

//document.getElementById(conteudo).innerHTML = string;

}

 

}

}

 

 

 

 

/* ************************************** NÃO ALTERAR ************************************** */

function getHTTPObject() {

var xmlhttp;

/*@cc_on

@if (@_jscript_version >= 5)

try {

xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

try {

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e) {

xmlhttp = false;

}

}

@else

xmlhttp = false;

@end @*/

if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {

try {

xmlhttp = new XMLHttpRequest();

} catch (e) {

xmlhttp = false;

}

}

return xmlhttp;

}

 

var http = getHTTPObject();

/* ************************************** NÃO ALTERAR ************************************** */

</script>

<style type="text/css">

<!--

.style1 {

color: #182452;

font-weight: bold;

}

-->

</style>

</head>

<body>

<div class="container" id="container">

<table width="778" height="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">

<tr>

<td height="6" colspan="3"></td>

</tr>

<tr>

<td width="4"> </td>

<td valign="top"><table width="770" border="0" cellspacing="0" cellpadding="0">

<tr>

<td><table width="770" height="71" border="0" cellpadding="0" cellspacing="0">

<tr>

<td width="33" bgcolor="#CE2C10"> </td>

<td width="6"> </td>

<td width="128" bgcolor="#F7F7F7"><img src="../imagem/logo.gif" width="191" height="76"></td>

<td width="436" bgcolor="#F7F7F7"> </td>

<td width="128" bgcolor="#F7F3F7"> </td>

<td width="6"> </td>

<td width="33" bgcolor="#293CA5"> </td>

</tr>

</table></td>

</tr>

<tr>

<td background="imagem/faixa_pontilhado.gif" height="14"></td>

</tr>

<tr>

<td><table width="770" border="0" cellspacing="0" cellpadding="0">

<tr>

<td width="34" bgcolor="#CE2C10"> </td>

<td width="4"> </td>

<td width="320"><a href="index.php"><img src="imagem/area_manutencao_left.gif" border="0"></a></td>

<td class="cliente"><strong>faq-PERGUNTAS</strong></td>

<td width="25" bgcolor="#293CA5"> </td>

<td width="5"> </td>

<td width="170" bgcolor="#293CA5"> </td>

</tr>

</table></td>

</tr>

<tr>

<td height="12"></td>

</tr>

<tr>

<td><table width="770" border="0" cellspacing="0" cellpadding="0">

<tr>

<td width="10"> </td>

<td width="130" valign="top"> </td>

<td width="620" valign="top">

<?php

if ($_GET["a"] == "adicionar" ) {

 

 

 

?>

<form action="?a=enviar_pergunta" method="post" name="noticia">

<table width="600" border="0" cellspacing="0" cellpadding="0">

 

<tr>

<td width="590" height="14" background="imagem/faixa_pontilhado.gif"></td>

</tr>

<tr>

<td class="opcoes"><p class="fonte">Adicionar pergunta:

 

 

</p></td>

</tr>

<tr>

<td><input name="titulo" type="text" class="campos" id="titulo" onFocus="this.className = 'campos_focus';" onBlur="this.className = 'campos';" value="" maxlength="100"></td>

</tr>

<tr>

<td height="14" background="imagem/faixa_pontilhado.gif"> </td>

</tr>

<tr>

<td height="14" class="fonte">Legendas: <span class="fonte" style="color:#000000">Categorias<span class="fonte" style="color:#293CA5"> - Sub-categorias - <span class="fonte" >Sub-sub-categorias </span></span></span></td>

</tr>

 

<tr>

<td height="14" class="fonte">

<?

$sql = "SELECT * FROM categoria";

 

$resultado = mysql_query($sql)or die;

while($linha = mysql_fetch_array($resultado))

{

?>

<table border="0" cellpadding="0" cellspacing="0" class="fonte">

<tr>

<td colspan="2" style="padding-top:10px; padding-bottom:05px; color:#000000"><input type="checkbox" name="checkboxcat[]" value="<?PHP echo $linha['idcategoria']?>" />

<?PHP echo $linha["nome"]; ?></td>

</tr>

<tr>

<?PHP $sql1 = "SELECT* FROM subcategoria WHERE idcategoria = $linha[idcategoria] ";

 

$resultado1 = mysql_query($sql1)or die;

while($linha1 = mysql_fetch_array($resultado1)){ ?>

<td width="300" style="padding-left:20px; color:#293CA5"><input type="checkbox" name="checkboxsub[]" value="<?PHP echo $linha1['idsubcategoria']?>" />

<?PHP echo $linha1["nome"];?></td>

<? $sql2 = mysql_query("SELECT * FROM subsubcategoria WHERE idsubcategoria = $linha1[idsubcategoria]");

while($linha2 = mysql_fetch_array($sql2)){ ?>

<td width="100" class="fonte" ><input type="checkbox" name="checkboxsubsub[]" value="<?PHP echo $linha2['idsubsubcategoria']?>" />

<?PHP echo $linha2["nome"]; ?></td>

<? }?>

</tr>

<?php } ?>

</table>

<?PHP

}?> </td>

</tr>

<tr>

<td height="14" background="imagem/faixa_pontilhado.gif">

<div id="conteudo" > </div> </td>

</tr>

<tr>

<td><div align="center" id="botoes">

<input type="submit" class="campos_submit" value="Adicionar">

</div></td>

</tr>

<tr>

<td height="14" background="imagem/faixa_pontilhado.gif"></td>

</tr>

 

<tr>

<td></td>

</tr>

<tr>

<td height="14" background="imagem/faixa_pontilhado.gif"></td>

</tr>

</table>

 

</form>

<?php

}

$titulo = $_POST['titulo'];

 

$subsub = $_POST['checkboxsubsub'];

$sub = $_POST['checkboxsub'];

$cat = $_POST['checkboxcat'];

 

if ($_GET["a"] == "enviar_pergunta"){

 

$codigo = mysql_insert_id();

 

foreach($cat as $cat_id)

{

foreach($sub as $sub_id)

{

 

 

$adicionar2 = mysql_query("INSERT INTO rcategorias (idpergunta, idcategoria, idsubcategoria) VALUES ('{$codigo}','{$cat_id}','{$sub_id}')")or die(mysql_error());

}

 

 

 

 

 

 

 

/*else {

echo " Seleciona ao menos um campo categoria e sub-categoria. Campo categoria e sub-categoria é obrigatório";

;

}*/

 

 

?>

 

 

<table width="600" border="0" cellspacing="0" cellpadding="0">

<tr>

<td height="14"> </td>

</tr>

<tr>

<td height="14" background="imagem/faixa_pontilhado.gif"></td>

</tr>

</table>

<?php

}

 

if ($_GET["a"] == "excluir" ){

?>

<table width="600" border="0" cellspacing="0" cellpadding="0">

<tr>

<td height="14"><p class="mensagem"><span><strong>Item excluído com sucesso.</strong></span></p></td>

</tr>

<tr>

<td height="14" background="imagem/faixa_pontilhado.gif"></td>

</tr>

</table>

<?php

 

}

 

?>

</td>

<td width="10"> </td>

</tr>

</table></td>

</tr>

</table></td>

<td width="4"> </td>

</tr>

<tr>

<td> </td>

<td height="39" valign="top"><table width="770" border="0" cellspacing="0" cellpadding="0">

<tr>

<td height="12"></td>

</tr>

<tr>

<td height="5" bgcolor="#CE2C10"></td>

</tr>

<tr>

<td height="4"></td>

</tr>

<tr>

<td height="18" bgcolor="#293CA5"></td>

</tr>

</table></td>

<td> </td>

</tr>

</table>

</div>

</body>

</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi mal de novo

nao sei pq mais tah postando 2x quase toda hora...

intaum pra aproveita o duplo post vo posta o codigo

claro c for do jeito k eu falei

<?php
include('config.php');
$qry = mysql_query("select * from categoria");
while($linha = mysql_fetch_array($qry)){
echo $linha['nome'];
echo "<br>";
$qrys = mysql_query("select * from subcategoria where idcategoria='$linha[idcategoria]'");
while($array = mysql_fetch_array($qrys)){
echo " - ";
echo $array['nome'];
echo "<br>";

}}



?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi mal de novo

nao sei pq mais tah postando 2x quase toda hora...

intaum pra aproveita o duplo post vo posta o codigo

claro c for do jeito k eu falei

<?php
include('config.php');
$qry = mysql_query("select * from categoria");
while($linha = mysql_fetch_array($qry)){
echo $linha['nome'];
echo "<br>";
$qrys = mysql_query("select * from subcategoria where idcategoria='$linha[idcategoria]'");
while($array = mysql_fetch_array($qrys)){
echo " - ";
echo $array['nome'];
echo "<br>";

}}



?>

não [é isso batatinha.

 

O grande problema é o uso dos 2 foreach.

Talvez como o Leonardonobre falou de certo.

Vou esperar ele para ver

Compartilhar este post


Link para o post
Compartilhar em outros sites

<table border="0" cellpadding="0" cellspacing="0" class="fonte">

<tr>

<td colspan="2" style="padding-top:10px; padding-bottom:05px; color:#000000"><input type="checkbox" name="checkboxsub[]" value="<?PHP echo $linha['idcategoria']?>" />

<?PHP echo $linha["nome"]; ?></td>

</tr>

<tr>

<?PHP $sql1 = "SELECT* FROM subcategoria WHERE idcategoria = $linha[idcategoria] ";

 

$resultado1 = mysql_query($sql1)or die;

while($linha1 = mysql_fetch_array($resultado1)){ ?>

<td width="300" style="padding-left:20px; color:#293CA5"><input type="checkbox" name="checkboxsub[]" value="<?PHP echo $linha1['idsubcategoria']?>" />

<?PHP echo $linha1["nome"];?></td>

<? $sql2 = mysql_query("SELECT * FROM subsubcategoria WHERE idsubcategoria = $linha1[idsubcategoria]");

while($linha2 = mysql_fetch_array($sql2)){ ?>

<td width="100" class="fonte" ><input type="checkbox" name="checkboxsubsub[]" value="<?PHP echo $linha2['idsubsubcategoria']?>" />

<?PHP echo $linha2["nome"]; ?></td>

<? }?>

</tr>

<?php } ?>

</table>

 

Problema é que tenho 3 checkbox name="checkboxsubsub[]" name="checkboxsub[]" name="checkboxcat[]"

 

então preciso recuperar estes 3 e inserir. ele se perde nisso com os 3 names não sabem quem é de quem selecionando varios.

Só consigo com apenas name="checkboxcat[]" atraves do foreach mas se colocar mais for each um dentro do outro repete os codigos .

um exemplo que está acontecendo

 

Seleciona a categoria sistema operacional

 

categoria 0= 25

Sub-categoria - 0= 38

Sub-categoria - 1= 43

Sub-categoria - 2= 44

Sub-categoria - 3= 45

 

se eu selecionar mais de uma categoria e os valores tipo seleciona sistema operacional e banco de dados.

 

da isso

Categoria Sistema Operacional 0= 25

categoria banco de dados 1= 26

sub categoria windows 0= 38

sub categoria linux 1= 43

sub categoria windows xp 2= 44

subcategoria oracle 3= 45

subcategoria sql 4= 39

subcategoria firebird 5= 40

 

retorna todas subcategoria de banco de dados e sistema operacional. Deveria separar isso entenderam?

 

assim deveria ser o correto só trazer o que selecionei entenderam.

 

 

Categoria Sistema Operacional 0= 25

sub categoria windows 0= 38

sub categoria linux 1= 43

sub categoria windows xp 2= 44

 

categoria banco de dados 1= 26

 

subcategoria oracle 3= 45

subcategoria sql 4= 39

subcategoria firebird 5= 40

 

 

 

 

foreach($cat as $cat_id )

{

echo "id da categoria". $cat_id."</br>";

foreach($sub as $sub_id )

{

echo "id da subcategoria ". $sub_id."</br>";

 

$adicionar2 = mysql_query("INSERT INTO rcategorias (idpergunta, idcategoria, idsubcategoria) VALUES ('{$codigo}','{$cat_id}','{$sub_id}')")or die(mysql_error());

} }

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui um sucesso

 

usei esta função unico problema ainda que não está trrazendo o que eu seleciono na subcategoria

$codigo = mysql_insert_id();

foreach ( $cat as $category ) {

while(list($k, $v) = each ($cat)) {

 

echo "$k ... $v <br />";

$select = mysql_query("SELECT * FROM subcategoria WHERE idcategoria = $v");

while($row = mysql_fetch_assoc($select)) {

echo $row['nome'];

}

}

 

}

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.