<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>Update de foreach aninhado</title>
        <description>Boa tarde galera,
A pouco tempo eu postei aqui uma duvida sobre dados dinamicos de um formulario, que o Jayme me ajudou a resolver usando foreach aninhado (link do post: http://phpbrasil.com/phorum/read.php?1,184677,184677#msg-184677 ).
Até então tudo funcionou na parte de inserir os dados, mas agora estou tentanto fazer um update nesses dados e não estou conseguindo, esse é o código que estou tentando fazer o update:

if($id) {
			
			if(isset($_POST[&amp;quot;responsavel_acao&amp;quot;])) {
			// Faz um loop no Array dos campos da tabela 5

			foreach($_POST[&amp;quot;responsavel_acao&amp;quot;] as $key =&amp;gt; $responsavel_acao) {
			$acao_tomada = isset($_POST['acao_tomada'][$key])? $_POST['acao_tomada'][$key] :null;
			$data_realizacao = isset($_POST['data_realizacao'][$key])? $_POST['data_realizacao'][$key] :null;
					
			$sql_update = &amp;quot;UPDATE acao_corretiva SET responsavel_acao='$responsavel_acao',acao_tomada='$acao_tomada',data_realizacao='$data_realizacao';&amp;quot;;
			
			$retorno = mysql_query($sql_update);
				
					}
				}
			}
	if($retorno)
	{
		echo &amp;quot;&amp;lt;script&amp;gt;alert('Alteração realizada com sucesso!'); window.location='exibir_nc.php?id=$id' &amp;lt;/script&amp;gt;&amp;quot;;
	}else
		{
			echo &amp;quot;Nao foi possivel concluir a alteracao!&amp;lt;br&amp;gt;&amp;quot;;
			echo mysql_error();
		}
		
}

Eu usei a mesma lógica do insert e não funcionou, quando clico no botão alterar no meu form os dados que estão na tabela acao_corretiva são todos substituidos pelo o ultimo dado listado da mesma tabela, ou seja, se eu tenho 3 informações diferentes referentes ao mesmo cadastro, essas informações são todas alteradas para a ultima informação digitada e no fim o window.location retorna para uma pagina de id não cadastrado.

Muito obrigado pela atenção!</description>
        <link>http://phpbrasil.com/phorum/read.php?1,184787,184787#msg-184787</link>
        <lastBuildDate>Wed, 19 Jun 2013 13:09:44 -0500</lastBuildDate>
        <generator>Phorum 5.2.10</generator>
        <item>
            <guid>http://phpbrasil.com/phorum/read.php?1,184787,184917#msg-184917</guid>
            <title>Re: Update de foreach aninhado</title>
            <link>http://phpbrasil.com/phorum/read.php?1,184787,184917#msg-184917</link>
            <description><![CDATA[Bom dia!<br />
Então Jayme fiz o teste e realmente o ID do segundo item não estava aparecendo corretamente e por esse motivo acontecia o erro.<br />
Após analizar meu código percebi onde estava o erro, é um erro bem básico e um pouco dificil de perceber:<br />
<br />
&lt;input type=&quot;hidden&quot; name=&quot;id_corretiva&quot; value=&quot;&lt;?php echo $linha['id_acao'] ?&gt;<br />
<br />
O problema está no name=&quot;id_corretiva&quot;, como ele faz parte do foreach o correto seria name=&quot;id_corretiva[]&quot;, por causa da falta do [] ele não mostrava o id corretamente.<br />
<br />
Muito obrigado pela ajuda e pela atenção!]]></description>
            <dc:creator>Thiago Henrique</dc:creator>
            <category>Iniciantes ao PHP</category>
            <pubDate>Fri, 04 May 2012 09:05:41 -0500</pubDate>
        </item>
        <item>
            <guid>http://phpbrasil.com/phorum/read.php?1,184787,184902#msg-184902</guid>
            <title>Re: Update de foreach aninhado</title>
            <link>http://phpbrasil.com/phorum/read.php?1,184787,184902#msg-184902</link>
            <description><![CDATA[Loops sempre nos causam alguma confusão, de fato. Não é intuitivo lidar com eles.<br />
<br />
Se você troca o update por um simples echo, os dados aparecem, na tela, corretamente aninhados?<br />
<br />
Tipo:<br />
<br />
if(isset($_POST[&quot;responsavel_acao&quot;])) {<br />
// Faz um loop no Array dos campos da tabela 5<br />
foreach($_POST[&quot;responsavel_acao&quot;] as $key =&gt; $responsavel_acao) {<br />
$acao_tomada = isset($_POST['acao_tomada'][$key])? $_POST['acao_tomada'][$key] :null;<br />
$data_realizacao = isset($_POST['data_realizacao'][$key])? $_POST['data_realizacao'][$key] :null;<br />
$id_corretiva = isset($_POST['id_corretiva'][$key])? $_POST['id_corretiva'][$key] :null;<br />
<br />
<br />
echo $responsavel_acao.&quot;, &quot;.$acao_tomada&quot;, &quot;.$data_realizacao.&quot;, &quot;.$id_corretiva;<br />
echo &quot;&lt;br /&gt;&quot;;<br />
<br />
}<br />
}<br />
<br />
Em cada uma das linhas de um echo desse tipo, estão os dados certos? Não estão trocados? Poste os resultados de um echo desse tipo para vermos.]]></description>
            <dc:creator>Jayme A. C. Gimenez</dc:creator>
            <category>Iniciantes ao PHP</category>
            <pubDate>Thu, 03 May 2012 14:52:21 -0500</pubDate>
        </item>
        <item>
            <guid>http://phpbrasil.com/phorum/read.php?1,184787,184901#msg-184901</guid>
            <title>Re: Update de foreach aninhado</title>
            <link>http://phpbrasil.com/phorum/read.php?1,184787,184901#msg-184901</link>
            <description><![CDATA[Erro de sintaxe? Ele nao retorna nenhuma mensagem de erro aqui.<br />
O $id_corretiva esta sendo gerado corretamente, ja feriquei isso, a cada ação que ele retorna vem o id correspondente.<br />
O erro que acontece é assim:<br />
Tem 2 ações listadas;<br />
E altero as informações da primeira ação e clico em alterar;<br />
Não aparece nenhum erro, apenas a mensagem de alteração realizada com sucesso;<br />
Quando os dados são listados de novo o primeiro dado que alterei continua o mesmo, porém o segundo o qual eu nao havia mexido, agora ele contém as informações que eu tinha alterado na primeira ação.<br />
Eu achei que o erro seria no foreach, porque ja verifiquei se ele retorna o id correto, ja troquei a parte where id_acao = '$id_corretiva pelo id da tabela vinculada a ação e também não funcionou.<br />
<br />
Teria mais algum outro palpite? Se quiser posto um print, ou mando um e-mail com o código para visualizar melhor.<br />
<br />
Obrigado pela atenção!]]></description>
            <dc:creator>Thiago Henrique</dc:creator>
            <category>Iniciantes ao PHP</category>
            <pubDate>Thu, 03 May 2012 14:26:08 -0500</pubDate>
        </item>
        <item>
            <guid>http://phpbrasil.com/phorum/read.php?1,184787,184900#msg-184900</guid>
            <title>Re: Update de foreach aninhado</title>
            <link>http://phpbrasil.com/phorum/read.php?1,184787,184900#msg-184900</link>
            <description><![CDATA[Se este é o original, não está dando erro de sintaxe?<br />
<br />
$sql_update = &quot;UPDATE acao_corretiva SET responsavel_acao='$responsavel_acao',acao_tomada='$acao_tomada',data_realizacao='$data_realizacao' where id_acao = '$id_corretiva';&quot;;<br />
<br />
Não entendi bem o problema, agora. Mas arrisco um palpite: o $id_corretiva está correto no form? Está seguro de que cada grupo de campos do form, gerados dinamicamente, está atrelado ao seu respectivo $id_corretiva ?]]></description>
            <dc:creator>Jayme A. C. Gimenez</dc:creator>
            <category>Iniciantes ao PHP</category>
            <pubDate>Thu, 03 May 2012 14:01:47 -0500</pubDate>
        </item>
        <item>
            <guid>http://phpbrasil.com/phorum/read.php?1,184787,184891#msg-184891</guid>
            <title>Re: Update de foreach aninhado</title>
            <link>http://phpbrasil.com/phorum/read.php?1,184787,184891#msg-184891</link>
            <description><![CDATA[Ainda não consegui resolver o problema acima, alguém tem alguma ideia de como resolver?<br />
<br />
<br />
Obrigado!]]></description>
            <dc:creator>Thiago Henrique</dc:creator>
            <category>Iniciantes ao PHP</category>
            <pubDate>Thu, 03 May 2012 06:46:54 -0500</pubDate>
        </item>
        <item>
            <guid>http://phpbrasil.com/phorum/read.php?1,184787,184847#msg-184847</guid>
            <title>Re: Update de foreach aninhado</title>
            <link>http://phpbrasil.com/phorum/read.php?1,184787,184847#msg-184847</link>
            <description><![CDATA[Então Jayme eu acabei postando apenas parte do código, mas a parte original tem sim o WHERE id = $id<br />
e esse ID vem de um campo hidden passado no form. Todo o meu formulario funciona a parte de alteração e inserção, porém apenas a parte do foreach é que não está 100%.<br />
<br />
if(isset($_POST[&quot;responsavel_acao&quot;])) {<br />
			// Faz um loop no Array dos campos da tabela 5<br />
			foreach($_POST[&quot;responsavel_acao&quot;] as $key =&gt; $responsavel_acao) {<br />
			$acao_tomada = isset($_POST['acao_tomada'][$key])? $_POST['acao_tomada'][$key] :null;<br />
			$data_realizacao = isset($_POST['data_realizacao'][$key])? $_POST['data_realizacao'][$key] :null;<br />
			$id_corretiva = isset($_POST['id_corretiva'][$key])? $_POST['id_corretiva'][$key] :null;<br />
					<br />
			$sql_update = &quot;UPDATE acao_corretiva SET responsavel_acao='$responsavel_acao',acao_tomada='$acao_tomada',data_realizacao='$data_realizacao' where id_acao = '$id_corretiva';&quot;;<br />
			<br />
			$retorno = mysql_query($sql_update);<br />
<br />
Esse é o original seguindo o modelo do insert que vc havia me mostrado da ultima vez.Deixa eu explicar a situação: O $id_corretiva é referente ao id passado no form, na tela de exibição todos os dados da acao_corretiva são mostrados normalmente.Na hora da alteração apenas o primeiro dado dessa lista é alterado e esse dado é copiado para as demais linhas.<br />
<br />
esse é o código de exibição:<br />
<br />
&lt;table&gt;<br />
	&lt;tr&gt;<br />
		&lt;td colspan=&quot;4&quot;&gt;5 - Ação Corretiva&lt;/td&gt;<br />
	&lt;/tr&gt;<br />
	&lt;?php<br />
	while($linha = mysql_fetch_array($resultado2))<br />
	{<br />
	?&gt;<br />
	&lt;input type=&quot;hidden&quot; name=&quot;id_corretiva&quot; value=&quot;&lt;?php echo $linha['id_acao'] ?&gt;&quot;&gt;<br />
<br />
	&lt;tr&gt;<br />
		&lt;td&gt;Responsável&lt;/td&gt;<br />
		&lt;td colspan=&quot;2&quot;&gt;Ação tomada&lt;/td&gt;<br />
		&lt;td&gt;Data Realização&lt;/td&gt;<br />
	&lt;/tr&gt;<br />
	&lt;tr&gt;<br />
		&lt;td align=&quot;center&quot;&gt;<br />
			&lt;select name=&quot;responsavel_acao[]&quot;&gt;<br />
				&lt;option value=&quot;&lt;?php echo $linha['responsavel_acao'] ?&gt;&quot; selected&gt;&lt;?php echo $linha['nome'] ?&gt;&lt;/option&gt;<br />
				&lt;option value=&quot;&quot;&gt;Selecione...&lt;/option&gt;<br />
<br />
				&lt;?php $query = mysql_query('SELECT id_login, nome FROM login WHERE situacao = &quot;Ativo&quot; order by nome');<br />
				while($login = mysql_fetch_array($query)) { ?&gt;<br />
				&lt;option value=&quot;&lt;?php echo $login[&quot;id_login&quot;] ?&gt;&quot;&gt;&lt;?php echo $login['nome'] ?&gt;&lt;/option&gt;<br />
				&lt;?php } ?&gt;<br />
			&lt;/select&gt;<br />
		&lt;/td&gt;<br />
		<br />
		&lt;td colspan=&quot;2&quot; align=&quot;center&quot;&gt;&lt;textarea name=&quot;acao_tomada[]&quot; rows=&quot;2&quot; cols=&quot;35&quot;&gt;&lt;?php echo $linha['acao_tomada'] ?&gt;&lt;/textarea&gt;&lt;/td&gt;<br />
		&lt;td align=&quot;center&quot;&gt;&lt;input type=&quot;text&quot; name=&quot;data_realizacao[]&quot; size=&quot;10&quot; value=&quot;&lt;?php echo $linha['data_realizacao'] ?&gt;&quot;&gt;&lt;/td&gt;<br />
	&lt;/tr&gt;<br />
	&lt;?php<br />
	}<br />
	?&gt;<br />
&lt;/table&gt;<br />
<br />
Além dele exibir os dados da acao_corretiva, ele também lista em um combobox os usuarios disponiveis(isso funciona normalmente) para seleção. Eu acredito que o erro esteja no meu foreach de update, pois todo o resto do form funciona, apenas o foreach que não está 100%, o while $resultado2 vem de um SELECT do banco.Eu acredito que o erro esteja no meu foreach, pois eu nunca tinha usando ele dessa forma, então nao sei a forma correta de passar os parametros.<br />
<br />
<br />
<br />
Muito obrigado pela atenção!]]></description>
            <dc:creator>Thiago Henrique</dc:creator>
            <category>Iniciantes ao PHP</category>
            <pubDate>Mon, 30 Apr 2012 09:14:49 -0500</pubDate>
        </item>
        <item>
            <guid>http://phpbrasil.com/phorum/read.php?1,184787,184797#msg-184797</guid>
            <title>Re: Update de foreach aninhado</title>
            <link>http://phpbrasil.com/phorum/read.php?1,184787,184797#msg-184797</link>
            <description><![CDATA[Sua dificuldade, agora, está no SQL (a query que faz o update).<br />
<br />
E é um erro bem, bem básico...<br />
<br />
Você não está especificando a linha do bd em que o update será feito. Isso é feito com uma cláusula WHERE na query, geralmente usando o id da linha a ser atualizada.<br />
<br />
Tipo:<br />
<br />
$sql_update = &quot;UPDATE acao_corretiva SET responsavel_acao='$responsavel_acao',acao_tomada='$acao_tomada',data_realizacao='$data_realizacao' WHERE tabela_id = '$id'; (claro que, para isso, o id de cada linha tem que estar no form - geralmente como um campo hidden, e ser capturado pelo foreach aninhado).<br />
<br />
Mas, olha, deixa eu dizer uma coisa: sem saber um mínimo de SQL não tem como sequer pensar em se meter a fazer sistemas que usam bancos de dados.]]></description>
            <dc:creator>Jayme A. C. Gimenez</dc:creator>
            <category>Iniciantes ao PHP</category>
            <pubDate>Fri, 27 Apr 2012 15:03:33 -0500</pubDate>
        </item>
        <item>
            <guid>http://phpbrasil.com/phorum/read.php?1,184787,184787#msg-184787</guid>
            <title>Update de foreach aninhado</title>
            <link>http://phpbrasil.com/phorum/read.php?1,184787,184787#msg-184787</link>
            <description><![CDATA[Boa tarde galera,<br />
A pouco tempo eu postei aqui uma duvida sobre dados dinamicos de um formulario, que o Jayme me ajudou a resolver usando foreach aninhado (link do post: http://phpbrasil.com/phorum/read.php?1,184677,184677#msg-184677 ).<br />
Até então tudo funcionou na parte de inserir os dados, mas agora estou tentanto fazer um update nesses dados e não estou conseguindo, esse é o código que estou tentando fazer o update:<br />
<br />
if($id) {<br />
			<br />
			if(isset($_POST[&quot;responsavel_acao&quot;])) {<br />
			// Faz um loop no Array dos campos da tabela 5<br />
<br />
			foreach($_POST[&quot;responsavel_acao&quot;] as $key =&gt; $responsavel_acao) {<br />
			$acao_tomada = isset($_POST['acao_tomada'][$key])? $_POST['acao_tomada'][$key] :null;<br />
			$data_realizacao = isset($_POST['data_realizacao'][$key])? $_POST['data_realizacao'][$key] :null;<br />
					<br />
			$sql_update = &quot;UPDATE acao_corretiva SET responsavel_acao='$responsavel_acao',acao_tomada='$acao_tomada',data_realizacao='$data_realizacao';&quot;;<br />
			<br />
			$retorno = mysql_query($sql_update);<br />
				<br />
					}<br />
				}<br />
			}<br />
	if($retorno)<br />
	{<br />
		echo &quot;&lt;script&gt;alert('Alteração realizada com sucesso!'); window.location='exibir_nc.php?id=$id' &lt;/script&gt;&quot;;<br />
	}else<br />
		{<br />
			echo &quot;Nao foi possivel concluir a alteracao!&lt;br&gt;&quot;;<br />
			echo mysql_error();<br />
		}<br />
		<br />
}<br />
<br />
Eu usei a mesma lógica do insert e não funcionou, quando clico no botão alterar no meu form os dados que estão na tabela acao_corretiva são todos substituidos pelo o ultimo dado listado da mesma tabela, ou seja, se eu tenho 3 informações diferentes referentes ao mesmo cadastro, essas informações são todas alteradas para a ultima informação digitada e no fim o window.location retorna para uma pagina de id não cadastrado.<br />
<br />
Muito obrigado pela atenção!]]></description>
            <dc:creator>Thiago Henrique</dc:creator>
            <category>Iniciantes ao PHP</category>
            <pubDate>Fri, 27 Apr 2012 12:11:14 -0500</pubDate>
        </item>
    </channel>
</rss>
