Ir para conteúdo

POWERED BY:

Arquivado

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

flavialieggio

Update select multiple

Recommended Posts

Olá pessoal

 

Estou montando juntamente com um amigo meu um sistema para elaborar Formularios.. Na tela onde a pessoa escolherá as perguntas que farao parte do formulario eu trabalho com select multiple... depois que a pessoa gravar o formulario e tera a opção se quiser de alterar as questoes escolhidas.. ai e que ta o problema .. eu nao estou conseguindo fazer a alteração.... montei a query assim a principio:

 

$select = "UPDATE formulario SET cod_questao = $questoes[$i] WHERE cod_formulario = $cd_form";

mas vi que nao e so isso.. dai achei um exemplo assim:

 

$teste = "UPDATE form a SET a.dolar = (SELECT((ip.totnsi-(ip.totnsi*b.pdenst)/100)-((ip.totnsi-(ip.totnsi*b.pdenst/100))*b.podnst/100))/c.valimo from esansi ip
   inner join esanst B on (b.npcnst = ip.npcnsi)
   inner join esaimo c on (c.datimo = b.datnst and c.indimo = 'U$')
   where ip.npcnsi = a.npcnsi and ip.codnsi = a.codnsi)
where a.npcnsi>45925"

so que nao entendi .... como eu montaria esse select dentro desse update no meu caso??

 

como eu montaria esse UPDATE???

 

detalhe: minhas select´s multiplas estão retornando os resultados, capturo como array:

 

//PIMERIA SELECT

<select id="menu_pai" name="menu_pai" size="5" multiple>
	<?PHP 
	$consulta =  "SELECT * from questoes where nivel = $nivel";
	$resultado = mysql_query($consulta,$conexao);
	while ($row = mysql_fetch_array($resultado)){
	echo "<option value='".$row['cod_questao']."'>".$row['descricao']."</option>";
	}
	?>
</select>

//SEGUNDA SELECT QUE RECEBE AS QUESTOES ESCOLHIDAS OU ALTERADAS

<select id="menu" name="menu[]" size="5" multiple>
	 <?
	 if ($_GET['operacao']=='alt') {
		 $consulta =  "SELECT  a.cod_questao, a.descricao, b.cod_formulario, b.cod_questao from questoes a, formulario b where a.cod_questao =b.cod_questao and b.cod_formulario = $cdform";
	 $resultado = mysql_query($consulta,$conexao);
	 while ($row = mysql_fetch_array($resultado))
	{
		echo "<option value='".$row['cod_questao']."'>".$row['descricao']."</option>";
	}
	 }
	 ?> 
</select>

E isso galera!!! Aguardo ajuda ai!!!

Valeu mesmo

Abraços

Flávia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Beraldo

 

E o seguinte: sao tres etapas para a pessoa gerar o Formulario:

 

1- Cadastro das perguntas (em geral)

2- Cadastro do Titulo e inserção das perguntas relacionandas aquele formulario especificamente..

3- Pode ocorrer que o usuario queira Alterar(que onde esta minha dificuldade), essas questoes, entao se isso for verdadeiro na segunda select multiple ele traz as questoes que ja existe daquele formulario que o usuario decidiu alterar e assim permite ele adicionar ou remover questoes.

4- Visualização quando tudo estiver ok!

 

So que quando eu escolho a opção alterar as questoes e modifico tentando adicionar ou remover ele nao ta fazendo UPDATE no banco

 

Tabela do banco:

 

formulario:

cod_formulario -- int(11) -- Não Nulo

cod_nivel -- bigint(20) -- Pode ser Nulo

cod_questao -- bigint(20) -- Não Nulo

 

 

Nessa tablea eu nao tenho uma chave primaria e o cod_formulario é gerado por uma outra tabela formulario_tit, onde gravo o titulo do formulario ai sim nessa table o cod_formulario e uma chave primaria...

 

Mas enfim, e nessa tabela detalhada acima que eu insiro os codigos das questoes que a pessoa cadastrou... e nao consigo fazer o UPDATE e tambem nao entendi bem a estrutura da query que postei acma a qual a pessoa faz um select dentro do update para tratar os resultados....

 

Espero ter esclarecido mais... estou no aguardo e muito obrigada pela atenção e ajuda!

Flávia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então são três tabelas no sistema, certo? A que você postou, outra para os títulos dos formulários e outra para as questões. Você precisa atualizar somente a de questões, pelo que entendi.

 

Passando o ID da questão junto com o texto editado da questão, basta fazer um update normal, sem nenhum select:

Update questão Set conteudo = 'conteudo_vindo_de_POST' Where id = id_vindo_de_POST;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Beraldo pois entao... minha query esta assim:

 

if ($_POST[pagina_nome] == 'alt_formulario')
{
	$nivel = $_SESSION['nivel'];
	$questoes = $_POST['menu'];
	$cd_form = $_POST[cdform];

 	for ($i=0;$i<count($questoes);$i++)
	{	
		$quest = $questoes[$i];
	}
	$select = "UPDATE formulario SET cod_questao = $quest  WHERE cod_formulario = $cd_form";
	$resultado = mysql_query($select,$conexao);
	//echo "<p>".$questoes[$i];
	
	echo('<script>self.location = "'.$_POST[pagina_destino].'?cod_questao='.$quest.'";<//script>');
}

e nao vai mesmo.. ele nao esta alterando

 

e quanto as tabelas sao tres mesmo so que na formulario eu coloco os codigos cadastrados das questoes...

 

o que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta parte está fora do loop for:

 

$select = "UPDATE formulario SET cod_questao = $quest  WHERE cod_formulario = $cd_form";
	$resultado = mysql_query($select,$conexao);
	//echo "<p>".$questoes[$i];

Coloque-a dentro do bloco de repetição. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Beraldo

 

Fiz como voce falou, coloquei ele dentro do FOR, porem ele nao fez o UPDATE!!!

 

/nao sei o que pode ser.. vou disponibilizar meu codigo e voce analise por favor:

 

Página onde ocorre alteração

<?PHP
session_start(); 
if ($_SESSION['login'] == '')
{
  echo('<script>self.location = "../login.php";</script>');
}
	//////////////////////////////////
	// USUARIOS
	//////////////////////////////////
	if (($_SESSION['nivel']!=1) && ($_SESSION['nivel']!=2) && ($_SESSION['nivel']!=10))
	{
		echo('<script>self.location = "../index.php";</script>');
	}

include("../inc/banco_mysql.php");

$nivel = $_SESSION['nivel'];

$cod_formu = $_GET['cod_form'];

if($cod_formu)
{
	$select = "SELECT cod_formulario, titulo  FROM formulario_tit WHERE titulo = '$cod_formu'";
	$resultado = mysql_query($select, $conexao);
	while($linhas = mysql_fetch_array($resultado))
	{
			$cdform = $linhas[cod_formulario];
			$tit_form = $linhas[titulo];
	}
}
?>

<link rel="stylesheet" type="text/css" href="../formato.css" /> 
<html>
<head>
<br>
<script><!--
	function movimento(elemento, direcao) {
		var sel = document.getElementById(elemento);
		var len, i;
		if (!sel) {
			return;
		}
		if (direcao == 'passar' && arguments[2] == undefined) {
			return;
		} else if (direcao == 'passar') {
			var sel_pai = document.getElementById(arguments[2]);
			var selecionados = new Array();
			if (!sel_pai) {
				return;
			}
			len = sel_pai.options.length;
			for (i = 0; i < len; i++) {
				if (sel_pai.options[i].selected) {
					sel.options[sel.options.length] = new Option(sel_pai.options[i].text, sel_pai.options[i].value);
					selecionados.push(i);
				}
			}
			len = selecionados.length;
			for (i = len-1; i >= 0; i--) {
				sel_pai.options[selecionados[i]] = null;
			}
		} else if (direcao == 'cima' || direcao == 'baixo') {
			var selecionado = sel.selectedIndex;
			var comparacao = direcao == 'cima' ? selecionado - 1 : selecionado;
			var opts_values = new Array();
			var opts_texts = new Array();
			var tam = sel.options.length;
			var i;
			if (selecionado == -1) {
				return;
			}
			if (direcao == 'cima' && selecionado == 0) {
				return;
			}
			if (direcao == 'baixo' && selecionado == tam - 1) {
				return;
			}
			selecionado = direcao == 'cima' ? selecionado - 1 : selecionado + 1;
			for (i = 0; i < sel.options.length; i++) {
				if (i == comparacao) {
					opts_values.push(sel.options[i+1].value);
					opts_texts.push(sel.options[i+1].text);
					sel.options[i + 1] = null;
				}
				opts_values.push(sel.options[i].value);
				opts_texts.push(sel.options[i].text);
			}
			for (i = 0; i < tam; i++) {
				sel.options[i] = new Option(opts_texts[i], opts_values[i]);
			}
			sel.selectedIndex = selecionado;
		}
	}
--></script>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<table width="595" border="0">
  <tr>
	<td width="18%"> </td>
	<td width="63%">
<table width="100%" border="0">
  <tr>
	<td bgcolor="#A4A8DB"><div align="center" class="style1"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">MONTANDO SEU FORMULÁRIO:</font></div></td>
  </tr>
</table>
<br>
<form action="send_form.php" name="form1" method="post">	
<table width="100%" border="0">
  <tr>
	<td bgcolor="#F9F9FF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000"><b>Título do Formulário:</b></font>	  <div align="center"></div></td>
	</tr>
  <tr>
	<td><? echo"<center><h4>".$tit_form."</h4></center>"; ?></td>
	</tr>
  <tr>
	<td bgcolor="#F9F9FF"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000"><b>Questões:</b></font></td>
  </tr>
  <tr>
	<td><table width="100%" border="0">
	  <tr>
		<td colspan="2">
		<select id="menu_pai" name="menu_pai" size="5" multiple>
		 <?PHP 
		 $consulta =  "SELECT * from questoes where nivel = $nivel";
		 $resultado = mysql_query($consulta,$conexao);
		 while ($row = mysql_fetch_array($resultado)){
			echo "<option value='".$row['cod_questao']."'>".$row['descricao']."</option>";
		 }
		 ?>
		</select>		</td>
		<tr>
		<td width="29%">
		<a href="#" onClick="movimento('menu', 'passar', 'menu_pai')"><img src="add.gif" width="100" height="20" /></a></td>
		<td width="71%">
		<a href="#" onClick="movimento('menu_pai', 'passar', 'menu')"><img src="remove.gif" width="100" height="20"></a>		</td>
		<tr>
		<td colspan="2">		</td>
		<tr>
		<td colspan="2">
		<select id="menu" name="menu[]" size="5" multiple>
		<?
		if ($_GET['operacao']=='alt') {
		 	$consulta =  "SELECT  a.cod_questao, a.descricao, b.cod_formulario, b.cod_questao from questoes a, formulario b where a.cod_questao =b.cod_questao and b.cod_formulario = $cdform";
		 	$resultado = mysql_query($consulta,$conexao);
		 		while ($row = mysql_fetch_array($resultado))
		 		{
					echo "<option value='".$row['cod_questao']."'>".$row['descricao']."</option>";
		
				}
		}
		?> 
		</select>
		</td>
	  </tr>
		<tr>
		  <td>
		<a href="#" onClick="movimento('menu', 'cima')">Para cima
		<!--<img src="seta-cima.gif" />--></a>		  </td>
		  <td>
		  <a href="#" onClick="movimento('menu', 'baixo')">Para baixo
		<!-- <img src="seta-baixo.gif" />--></a>		  </td>
		</tr>
	</table>
	</td>
  </tr>
  <tr>
	<td>
	  <div align="center">
	  <?PHP 
	  if(isset($_GET['operacao'])){
		echo "<input type='hidden' name='pagina_nome' value='alt_formulario'>";
	  }else{
		echo "<input type='hidden' name='pagina_nome' value='inc_formulario'>";
	  }
	   ?>
		  <input type="hidden" name="pagina_destino" value="tela21.php">
		<input type="hidden" name="cod_formulario" value="<?=$cdform?>">
		<input type="hidden" name="titulo" value="<?=$tit_form?>">
		<input type="submit" value="GRAVAR">
		</div></td></tr>
</table>
</form>
<br>
</td>
  <td width="19%"> </td>
  </tr>
</table>
</body>
</html>

PARTE DO ARQUIVO ONDE MONTAMOS AS QUERYS

 

send_form.php

//////////////////////alt_formulario///////////
if ($_POST[pagina_nome] == 'alt_formulario')
{
	$nivel = $_SESSION['nivel'];
	$questoes = $_POST['menu'];
	$cd_form = $_POST[cdform];

 	for ($i=0;$i<count($questoes);$i++)
	{	
		$quest = $questoes[$i];
		$select = "UPDATE formulario SET cod_questao = $quest WHERE cod_formulario = $cd_form";
		$resultado = mysql_query($select,$conexao);
		//echo "<p>".$questoes[$i];
	}
	
	echo('<script>self.location = "'.$_POST[pagina_destino].'?cod_questao='.$quest.'";</script>');
//echo($select);
}

ele nao da erro, passa a variavel quest pela URL com o valor da questao que deixei para atualizar, porem nao faz....

 

Obrigada mesmo pela ajuda e paciencia

Flávia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta aparecendo o seguinte erro:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

 

isso e grave...rsrssss.... :blink:

 

O que seria isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah e tem outro detalhe que estava vendo, quando mandei mostrar os resultados da variavel $quest, ele esta trazendo apenas um registro de todos que foram escolhidos pra inserir.. agora nao to entendendo o porque mesmo!...

 

:blink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use aspas, assim:

 

SET cod_questao = '$quest'

 

Quanto ao problema com $quest, você, realmente, colocou menu[] no name do select? Se não houver o [], o PHP não interpretará essa variável como um array

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Beraldo

 

Coloquei as aspas continuou o mesmo erro!!! e quanto ao name = menu[] esta sim!!! mas dou echo $quest e ele me traz so o codigo da primeira questao!!!

 

ta assim:

if ($_POST[pagina_nome] == 'alt_formulario')
{
	$nivel = $_SESSION['nivel'];
	$questoes = $_POST['menu'];
	$cd_form = $_POST[cdform];

 	for ($i=0;$i<count($questoes);$i++)
	{	
		$quest = $questoes[$i];
		echo "<br>".$quest."<br>";
		$select = "UPDATE formulario SET cod_questao = '$quest' WHERE cod_formulario = $cd_form";
		$resultado = mysql_query($select,$conexao) or exit(mysql_error());
	}
	
	echo('<script>self.location = "'.$_POST[pagina_destino].'?cod_questao='.$quest.'";</script>');
//echo($select);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma dúvida:

 

quando eu gravo os dados no banco de dados eu gero linhas de inserção na tablea desses resultados

 

Exemplo:

 

Para cod_formulario = 22, temos tres questoes

 

COD |  QUEST  |

22	|   11		|
22	|   7		  |
22	|   12		|

Mais ou menos isso

Quando faço o UPDATE como estamos fazendo ele atualizara todas essas linhas corretamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, eu coloquei o ' ' tambem na variavel $cdform na query e o erro sumiu, mas nao insere e o engraçado ele continua me ttrazendo so indice no array menu[] ... :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho o fato de estar vindo somente a primeira seleção. :unsure: Você usa algum sistema de temnplates? Se sim, apague os arquivos do arquivo de templates compilados (no Smarty, por exemplo, é o templates_c[/b). Tente também limpar o cache do navegador.

 

 

Quanto à dúvida da atualização, sim, todos os campos com o ID informado serào alterados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola Beraldo

 

DEsculpe a demora..

 

Nao to usando templates ... e um sisteminha montado por nos do zero mesmo... ta no "rascunho" ainda, to querendo fazer ele rodar assim e depois ir "sofisticando"....

 

Vou limpar o cache do navegador

 

E mais uma observação:

 

Eu coloquei as '' na $cdform e agora ele me traz o ultimo registo apenas, mas duplica esse registro pelo total de linhas que tinha sido cadastro das perguntas antes da alteração...

 

exemplo: tenho 3 questoes diferentes dai escolho altera - las deixando apenas UMA questao... entao quando confirmo a alteração ele duplica essa questao pelas tres linhas... ta dificil...rsrssss.....

 

O que pode ser?

 

Vou postar como esta o codigo agora:

include("../inc/banco_mysql.php");

echo $_POST['cod_formulario']."<br>";
echo $_POST['titulo']."<br>";
echo $_POST['pagina_destino']."<br>";
echo $_POST['pagina_nome']."<br>";

$quest = $_POST['menu'];
$codigo_form =  $_POST['cod_formulario'];
for ($i=0;$i<count($quest);$i++)
{
	echo $quest[$i];
	$questoes = $quest[$i];
}

	$select = "UPDATE formulario SET cod_questao = $questoes WHERE cod_formulario = $codigo_form";
	$resultado = mysql_query($select,$conexao) or exit(mysql_error());


echo('<script>self.location = "'.$_POST[pagina_destino].'";</script>');

Ah e eu tirei a query do for para ver se parava de duplicar mas nao adiantou muito....

 

:blink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoas

 

continuando meu dilema, rsrss... fiz a segunte alteração para ele me mostrar $resultado

 

<?PHP

include("../inc/banco_mysql.php");

echo $_POST['cod_formulario']."<br>";
echo $_POST['titulo']."<br>";
echo $_POST['pagina_destino']."<br>";
echo $_POST['pagina_nome']."<br>";

$quest = $_POST['menu'];
$codigo_form =  $_POST['cod_formulario'];
for ($i=0;$i<count($quest);$i++)
{
	echo "Indice - ".$i."<br>Variavel quest - ".$quest[$i]."<br>";
	$questoes = $quest[$i];
	
	$select = "UPDATE formulario SET cod_questao = $questoes WHERE cod_formulario = $codigo_form";
	$resultado = mysql_query($select,$conexao);
	echo "<br> RESULTADO -- ".$resultado."<br>";
}

?>

e assim ele ta me mostrando isso:

 

28
TESTE 4
tela21.php
alt_formulario
Indice - 0
Variavel quest - 16

[b]RESULTADO[/b] -- 1
Indice - 1
Variavel quest - 13

[b]RESULTADO[/b] -- 1

Se entendi bem ele esta inserindo mesmo apenas um resultado, uma linha,.. correto?? e voces podem perceber que ele traz o codigo das DUAS questoes que inseri na alteração.... :huh:

 

Como faço pra resolver?? :wacko:

 

To meio sem saber o que fazer!!

help... rsrs..

 

[]´s

flávia

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysql_query(), nesse caso, só retornará TRUE ou FALSE. Se quiser saber o número de linhas afetadas, use mysql_affected_roes().

 

Não vi erro no resultado. Ambas as consultas retornaram TRUE. :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Beraldo e galera

 

A questao e a seguinte: estou trabalhando com o resultado de um grupo na tabela entao ele vai ser TRUE porem nao vai fazer o UPDATE corretamente em todas as linhas. Acontece que eu tenho um grupo de 5 questoes:

 

1 - 2 - 3 - 4 - 5

 

Quando seleciono a 5 por exemplo para fazer o UPDATE mantendo apenas ela no formulario ele atribui essa questao 5 a todas as outras linhas

 

Entao a solução correta que achei foi criar o DELETE desses registro e inseri-los novamente!!!

 

$select = "DELETE FROM form WHERE cod_formulario = $codigo";
$resultado = mysql_query($select,$conexao);


for ($i=0;$i<count($quest);$i++)
{
	$questoes = $quest[$i];
	$query = "INSERT INTO form(cod_formulario, cod_nivel, cod_questao) VALUES ($codigo_form, $nivel, $questoes)";
	$resultado = mysql_query($query,$conexao);
}

Muito obrigada Beraldo pela paciencia e todo auxilio!!! Valeu mesmo!!!!

 

Enorme abraço e ta ai a solução que achei!!!

 

[]´s

Flávia

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.