Ir para conteúdo

POWERED BY:

Arquivado

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

marceloquinze

[Resolvido] Como atualizar dados que vêm do banco de dados?

Recommended Posts

Estou com um problema que é o seguinte. Tenho um script que traz dados de emissoras de rádio cadastrados no meu banco de dados mysql. Ao lado de cada registro, tem um checkbox que eu uso para atualizar o registro inteiro, mudando de um status de não aprovado para aprovado, tipo ("UPDATE am SET aprovado ='1' where id=$id[$i]");

Até aí está funcionando legal. Só que eu quero fazer o seguinte: mudar alguns dos dados que vêm do meu banco (por exemplo, a sigla da UF) e, ao clicar no checkbox, atualizar o status (de 0 para 1) e atualizar a sigla da UF (por exemplo, de SP para PR). Esse é o primeiro passo para poder conseguir alterar qualquer dado que o select me apresenta e alterá-lo no banco ao clicar no checkbox.

Com o código que eu tenho agora, eu até consigo mudar a sigla da UF, só que o script não está pegando a sigla que eu digito no textbox, mas a primeira sigla do primeiro registro que tenho carregado na tela.

 

Os códigos são estes:

 

moderadores.php

  <fieldset>
  <legend>Somente para moderadores</legend>
  <h3><img src="../imagens/icones/om_aprovar.png" />Aprovar Contribuições</h3>
<?
include "config.php";
$sql = mysql_query("SELECT * FROM `am` WHERE aprovado ='0' order by frequencia");
?>
<form action="aprovar.php" method="POST">

<?php
echo "<table border=0>";
echo "<tr>
  <td><b></b></td>
  <td><b>Frequência</b></td>
  <td><b>Call</b></td>
  <td><b>UF</b></td>
  <td><b>kW</b></td>
  <td><b>Emissora</b></td>
  <td><b>Cidade</b></td>
  <td><b>Rede</b></td>
  <td><b>Detalhes</b></td>
</tr>";
while ($resultado = mysql_fetch_array($sql))
{
?>
<tr>
<td><input type="checkbox" name="aprovar[]" id="aprov" value="<? echo $resultado['id']?>"><input type="submit" name="botaoaprovar" value="Aprovar!!!" id="aprove"></td>
<td><input type="text" value="<? echo $resultado['frequencia']?>"></input></td>
<td><input type="text" value="<? echo $resultado['call']?>"></input></td>
<td><input type="text" name="uf[]" value="<? echo $resultado['uf']?>"></input></td>
<td><input type="text" value="<? echo $resultado['kw']?>"></input></td>
<td><input type="text" value="<? echo $resultado['emissora']?>"></input></td>
<td><input type="text" value="<? echo $resultado['cidade']?>"></input></td>
<td><input type="text" value="<? echo $resultado['rede']?>"></input></td>
<td><input type="text" value="<? echo $resultado['detalhes']?>"></input></td>
</tr>
<?
}
?>
</table>
</form> 

 

aprovar.php

 
<?php
include "config.php";

$uf = $_POST[uf];
$id = $_POST[aprovar];
$conta = count($id); 
if($_POST['botaoaprovar'])
{
for ($i=0; $i<$conta; $i++)
{
$sql = mysql_query("UPDATE am SET uf='".$uf[$i]."', aprovado ='1' where id=$id[$i]");
}
if ($sql)
{
echo "Deu certo. Aprovou!";
}
else{
echo "Ocorreu algum erro.";
}
}
?>

 

Alguém pode me dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, você precisa passar em cada linha da tabela moderados o id de cada registro em seus respectivos atributos name, exemplo: <input type="text" name="uf[<?php echo $resultado['id']; ?>]" value="<? echo $resultado['uf']?>"></input></td>.

 

e depois é só dar um foreach e pronto

 

foreach($_POST['uf'] as $idUf => $novoValor) {

echo "{$idUf} = {$novoValor} <br>";

}

 

espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e depois é só dar um foreach e pronto

 

foreach($_POST['uf'] as $idUf => $novoValor) {

echo "{$idUf} = {$novoValor} <br>";

}

 

espero ter ajudado.

 

Alex, obrigado pela resposta. Andei pesquisando o meu problema em outros lugares e também tentei fazer o que me disse. Deu certo colocando o foreach na página que recebe os valores das variáveis (aprovar.php), no lugar do loop for que estou fazendo.

Então, no arquivo moderadores.php, depois do laço while ficou assim:

 

<?php
//................... 
while ($resultado = mysql_fetch_array($sql))
{
?>
<tr>
<td><input type="checkbox" name="aprovar[]" id="aprov" value="<? echo $resultado['id'];?>"></td>
<td><input type="text" name="frequencia[<? echo $resultado['id'];?>]" value="<? echo $resultado['frequencia'];?>"></input></td>
<td><input type="text" name="call[<?php echo $resultado['id']; ?>]" value="<? echo $resultado['call'];?>"></input></td>
<td><input type="text" name="uf[<?php echo $resultado['id']; ?>]" value="<? echo $resultado['uf'];?>"></input></td> // Alterado aqui
<td><input type="text" name="kw[<?php echo $resultado['id']; ?>]" value="<? echo $resultado['kw'];?>"></input></td>
<td><input type="text" name="emissora[<?php echo $resultado['id']; ?>]" value="<? echo $resultado['emissora'];?>"></input></td>
<td><input type="text" name="cidade[<?php echo $resultado['id']; ?>]" value="<? echo $resultado['cidade'];?>"></input></td>
<td><input type="text" name="rede[<?php echo $resultado['id']; ?>]" value="<? echo $resultado['rede'];?>"></input></td>
<td><input type="text" name="detalhes[<?php echo $resultado['id']; ?>]" value="<? echo $resultado['detalhes'];?>"></input></td>
<td><input type="hidden" name="aprovado[<?php echo $resultado['id']; ?>]" value="0" /></td>
</tr>
<?
}
?>

 

A ideia era usar o mesmo processo para atualizar os demais valores do formulário da página moderadores. Então, para testar a alteração de um segundo campo, fiz assim:

 

aprovar.php

 

<?php  
include "config.php";  

$uf = $_POST[uf];  
$cidade = $_POST[cidade]; // Usei esta nova variável 
$id = $_POST[aprovar];  

if($_POST['botaoaprovar']){

foreach($_POST['uf'] as $idUf => $novoValor) {
echo "{$idUf} = {$novoValor} <br>";
$sql = mysql_query("UPDATE am SET uf='{$novoValor}', aprovado ='0' where id=$idUf");
}
foreach($_POST['cidade'] as $idCidade => $novoValor) { // Novo foreach
echo "{$idCidade} = {$novoValor} <br>";
$sql = mysql_query("UPDATE am SET cidade='{$novoValor}', aprovado ='0' where id=$idCidade");
}
	if ($sql){
			echo "Deu certo. Aprovou!";
		}else{
			echo "Ocorreu algum erro.";
		}
}
?>

Testei e deu certo. Só que daí veio a pergunta: para alterar cada campo eu vou ter que fazer um novo foreach? Não tem como fazer de outra forma? Vai acabar ficando grande demais o código...

Valeu mesmo pela ajuda! Estava ficando com dor de cabeça já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom cara é o seguinte, abaixo segue um código de modelo para você estudar, olhe como eu fiz e tente implementar ^_^

 

Crie uma página a parte e rode o programa abaixo.

<?php 
if ( isset($_POST['dados']) ) {

	$dados = $_POST['dados'];

	echo 'Exibindo os valores do array';
	echo '<pre>';
		var_dump($dados);

	echo '<br>=======================<br>';
	echo 'Extraindo os dados e atualizando o banco de dados<br><br>';	


	foreach ( $dados as $indice => $valores ) {
		$campos[] = "`{$indice}` = '{$valores}'";
	}
	$campos = implode(", ",$campos);	

	// Saída
	printf("UPDATE `am` SET %s WHERE id = %s", $campos, $_POST['id']);
}
?>

<form method="post" action="<?php $_SERVER['PHP_SELF'];?>">
<table cellpadding="0" cellspacing="0">
<tr>
   <td><input type="checkbox" name="dados[aprovar]" id="aprov" value="1"></td>
   <td><input type="text" name="dados[frequencia]" value="Frequencia"></input></td>
   <td><input type="text" name="dados[call]" value="Telefone"></input></td>
   <td><input type="text" name="dados[uf]" value="Estado"></input></td>
   <td><input type="text" name="dados[kw]" value="KW"></input></td>
   <td><input type="text" name="dados[emissora]" value="Emissora"></input></td>
   <td><input type="text" name="dados[cidade]" value="Cidade"></input></td>
   <td><input type="text" name="dados[rede]" value="Rede"></input></td>
   <td>
       <input type="text" name="dados[detalhes]" value="Detalhes da emissora"></input>
       <input type="hidden" name="dados[aprovado]" value="0" />
       <input type="hidden" name="id" value="24" />
   </td>
</tr>
</table>

<button>Alterar dados</button>

</form>

 

Ps.: Agora fica a questão como usar isto com um while? Ele pode resgatar apenas o ultimo registro... De uma estudada pois existe n maneiras para fazer isto. Abraços e até mais, qualquer duvida poste que nós tentamos te ajudar :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

André,

Valeu pela ajuda. Testei aqui construindo um while e, como você mencionou, está pegando somente o último registro. Mudei um pouco o código para pegar o ID do registro clicado. Até que pega, mas não atualiza os dados...

Vou continuar testando a sua ideia, mas por enquanto a saída do Alex atendeu ao que eu queria. Ficou bom porque eu evito de criar uma página separada só para editar os dados que eu quero. Posso fazer tudo de uma vez com um comando só: editar os valores do banco e, no meu caso, aprovar os dados como moderador.mudar

Só tive que mudar uns detalhes no SQL do campo "Call" (prefixo da emissora, depois vou mudar esse nome). Não sei porque ele não estava atualizando, daí coloquei a sintaxe completa do comando e deu certo.

Ainda vou fazer umas validações e tal, mas depois de testar tudo, o código ficou assim:

 

aprovar.php

<?php 
// Este script recebe os dados via POST de um formulário (para quem quiser ver como, o código está na minha resposta anterior) 
include "config.php";  

//Variáveis vindas por POST  
$frequencia = trim($_POST['frequencia']);
$call = trim($_POST['call']);
$uf = trim($_POST['uf']);
$kw = trim($_POST['kw']);
$emissora = trim($_POST['emissora']);
$cidade = trim($_POST['cidade']);
$rede = trim($_POST['rede']);
$detalhes = trim($_POST['detalhes']);
$id = $_POST['aprovar'];  

// Loop para atualizar as contribuições para o valor 1 (=aprovado)
$conta = count($id); //Conta quantos checkbox eu cliquei
if($_POST['botaoaprovar']){
	for ($i=0; $i<$conta; $i++){
	$sql = mysql_query("UPDATE am SET aprovado ='1' where id=$id[$i]");
	}
}

//Loops para atualizar os valores que eu escolher editar. Caso eu não edite nada, os valores vão como estão
if($_POST['botaoaprovar']){
foreach($_POST['frequencia'] as $idFrequencia => $novoValor) {
$sql = mysql_query("UPDATE am SET frequencia='{$novoValor}' where id=$idFrequencia");
}
foreach($_POST['call'] as $idcall => $novoValor) {
$sql = mysql_query("UPDATE am SET `call`='{$novoValor}' WHERE id=$idcall LIMIT 1");
}
foreach($_POST['uf'] as $idUf => $novoValor) {
$sql = mysql_query("UPDATE am SET uf='{$novoValor}' where id=$idUf");
}
foreach($_POST['kw'] as $idkw => $novoValor) {
$sql = mysql_query("UPDATE am SET kw='{$novoValor}' where id=$idkw");
}
foreach($_POST['emissora'] as $idEmissora => $novoValor) {
$sql = mysql_query("UPDATE am SET emissora='{$novoValor}' where id=$idEmissora");
}
foreach($_POST['cidade'] as $idCidade => $novoValor) {
$sql = mysql_query("UPDATE am SET cidade='{$novoValor}' where id=$idCidade");
}
foreach($_POST['rede'] as $idRede => $novoValor) {
$sql = mysql_query("UPDATE am SET rede='{$novoValor}' where id=$idRede");
}
foreach($_POST['detalhes'] as $idDetalhes => $novoValor) {
$sql = mysql_query("UPDATE am SET detalhes='{$novoValor}' where id=$idDetalhes");
}

// Testa se os dados foram inseridos ou não no banco de dados
	if ($sql){
			echo "Dados aprovados com sucesso!";
			echo "<br /><p><a href='javascript: history.go(-1);'>Voltar</a></p></div>";
		}else{
			echo "Ocorreu algum erro.";
			echo "<br /><p><a href='javascript: history.go(-1);'>Voltar</a></p></div>";
		}
}
?>

 

Para mim, resolveu e muito. Agradeço muito a ajuda de vocês dois!

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.