Ir para conteúdo

POWERED BY:

Arquivado

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

MBarros

[Resolvido] Atualizar dados referentes ao checkbox selecionado

Recommended Posts

Pessoal,

 

Possuo o seguinte formulário que deveria executar a seguinte ação: ao selecionar o checkbox, faço as alterações nos campos referentes ao checkbox selecionado e clicando no botão submit, ele atualiza os dados no BD e envia as imagens para uma pasta. Mas isso não está acontecendo.

 

Seguem abaixo os códigos:

 

<?php			
			mysql_connect("localhost", "root", "") or die("Não foi possivel conectar ao servidor.");
			mysql_select_db("lab") or die("Não foi possível selecionar o Banco de Dados.");
				
			$sql = "SELECT * FROM trabalhos ORDER BY id ASC";
					
			$resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta.");
			
			echo "<form action='alterar-checkbox.php' method='post' enctype='multipart/formdata'>\n";
			echo "<fieldset>\n";

			while ($linha = mysql_fetch_array($resultado))
			{
				echo "<input type='checkbox' name='op[]' value='{$linha['id']}' /> Editar ID {$linha['id']}\n";
				
				echo "<label for='id'>ID: </label>\n";
				echo "<input type='text' name='id' value='{$linha['id']}' />\n";
				
				echo "<label for='imagens'>Imagens: </label>\n";
				echo "<input type='file' name='imagens[]' />\n
							<input type='file' name='imagens[]' />\n
							<input type='file' name='imagens[]' />\n
							<input type='file' name='imagens[]' />\n";
			
				echo "<label for='titulo'>Título: </label>\n";
				echo "<input type='text' name='titulo'  value='{$linha['titulo']}'/>\n";
				
				echo "<label for='resumo'>Resumo: </label>";
				echo "<input type='text' name='resumo' value='{$linha['resumo']}' />\n";
			
				echo "<label for='producao'>Produção: </label>";
				echo "<textarea name='producao' cols='50' rows='10'>{$linha['producao']}</textarea>\n";	

				echo "<label for='detalhes'>Detalhes: </label>\n";
				echo "<textarea name='detalhes' cols='50' rows='10'>{$linha['detalhes']}</textarea>\n";
			}
			echo "<input type='submit' name='atualizar' value='Atualizar' />";
			echo "</fieldset>\n";
			echo"</form>\n";
		?>

 

 

<?php
	$numeroCampos = 4;
	$caminho = "uploads/";
	$substituir = false;
	
	$id = $_REQUEST['id'];
	$nomeArquivo = $_FILES["imagens"]["name"];	
	$imagens = implode(' ', $nomeArquivo);
	$titulo = $_REQUEST['titulo'];
	$resumo = $_REQUEST['resumo'];
	$producao = $_REQUEST['producao'];
	$detalhes = $_REQUEST['detalhes'];
						
	mysql_connect("localhost","root","") or die ("Não foi possível conectar ao Servidor.");
	mysql_select_db("lab") or die ("Não foi possível selecionar a base de dados");
	
	@$select = $_POST['op'];
	
	if (!empty($_POST['op']))
	{
		if ($select == 'op[]')
  	{
			if (count(@$_POST['op']) > 0)
			{
				foreach ($_POST['op'] AS $id)
				{
				for ($i = 0; $i < $numeroCampos; $i++)
				{
					$nomeArquivo = $_FILES["imagens"]["name"][$i];
					$nomeTemporario = $_FILES["imagens"]["tmp_name"][$i];	
					
					if (!empty($nomeArquivo)) 
					{
						$erro = false;
						
						if (file_exists($caminho . $nomeArquivo) AND !$substituir)
						{
							$erro = "O arquivo <strong>".$nomeArquivo."</strong> já existe";
						}
						
						if (!$erro) 
						{				
							move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo));
						}
					}
					else
					{
						echo "Problema";
					}
				}
				$sql = "UPDATE `trabalhos` SET id='".$id."', imagens='".$imagens."', titulo='".$titulo."', resumo='".$resumo."', producao='".$producao."', detalhes='".$detalhes."' WHERE id=".$op;
				
				$resultado = mysql_query($sql) or die ("Erro ao alterar os dados.");
			
				header("Location: areausuario.php");
				exit();	
				}
			}
	 	}
	}
	else
	{
		echo "<h2>Erro!</h2>";
  	echo "<p>Selecione uma das entradas antes de clicar na opção desejada.</p>";
  	echo "Clique <a href='areausuario.php'>aqui</a> para voltar.";
	}
?>

 

Quero atualizar os dados referentes ao checkbox selecionado, mas não estou obtendo êxito. Podem me ajudar?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao selecionar o checkbox, faço as alterações nos campos referentes ao checkbox selecionado e clicando no botão submit, ele atualiza os dados no BD e envia as imagens para uma pasta. Mas isso não está acontecendo.

 

Isto o que? As alterações nos campos ou a atualização dos dados no BD? Aparece algum erro? Que erro?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nenhum dos dois, se não seleciono nenhum checkbox aparece um erro informando que não selecionei, até ai correto. Mas, se efetuo as alterações nos campos e clico no submit, ele aparentemente executa todo o processo e ao ir para a pagina que quero, é possível notar que nada foi alterado. Nem as imagens no BD muito menos as alterações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um debug básico:

  if (!empty($_POST['op']))
     echo 'entrei no primeiro if <br/>';
        {
                if ($select == 'op[]')
                echo 'entrei no segundo if <br/> ';
        {
Veja se aparece alguma das mensagens. Provavelmente não está entrando no segundo IF.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos,

 

Fiz o debug e, como você disse, não está mesmo entrando no segundo if.

 

A mensagem de erro:

 

entrei no primeiro ifProblemaProblemaProblemaProblema

Notice: Undefined variable: op in M:\Sites\mbarros\admin\alterar-checkbox.php on line 53

Erro ao alterar os dados.

A linha 53:

 

$sql = "UPDATE `trabalhos` SET id='".$id."', imagens='".$imagens."', titulo='".$titulo."', resumo='".$resumo."', producao='".$producao."', detalhes='".$detalhes."' WHERE id=".$op;

<?php
	$numeroCampos = 4;
	$caminho = "uploads/";
	$substituir = false;
	
	$id = $_REQUEST['id'];
	$nomeArquivo = $_FILES["imagens"]["name"];	
	$imagens = implode(' ', $nomeArquivo);
	$titulo = $_REQUEST['titulo'];
	$resumo = $_REQUEST['resumo'];
	$producao = $_REQUEST['producao'];
	$detalhes = $_REQUEST['detalhes'];
						
	mysql_connect("localhost","root","") or die ("Não foi possível conectar ao Servidor.");
	mysql_select_db("lab") or die ("Não foi possível selecionar a base de dados");
	
	@$select = $_POST['op'];
	
	if (!empty($_POST['op']))
	echo "entrei no primeiro if";
	{
		if ($select == 'op[]')
		echo "entrei no primeiro if";
  	{
			if (count(@$_POST['op']) > 0)
			{
				foreach ($_POST['op'] AS $id)
				{
				for ($i = 0; $i < $numeroCampos; $i++)
				{
					$nomeArquivo = $_FILES["imagens"]["name"][$i];
					$nomeTemporario = $_FILES["imagens"]["tmp_name"][$i];	
					
					if (!empty($nomeArquivo)) 
					{
						$erro = false;
						
						if (file_exists($caminho . $nomeArquivo) AND !$substituir)
						{
							$erro = "O arquivo <strong>".$nomeArquivo."</strong> já existe";
						}
						
						if (!$erro) 
						{				
							move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo));
						}
					}
					else
					{
						echo "Problema";
					}
				}
				$sql = "UPDATE `trabalhos` SET id='".$id."', imagens='".$imagens."', titulo='".$titulo."', resumo='".$resumo."', producao='".$producao."', detalhes='".$detalhes."' WHERE id=".$op;
				
				$resultado = mysql_query($sql) or die ("Erro ao alterar os dados.");
			
				header("Location: areausuario.php");
				exit();	
				}
			}
	 	}
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, eu troquei absolutamente tudo, visto que a outra forma eu não obtinha resultado. Nesta também não MAS, meu unico problema está sendo na linha 65:

 

Notice: Undefined index: id in M:\Sites\mbarros\admin\alterar-checkbox.php on line 65

Erro ao alterar os dados.

 

A linha 65:

$sql = "UPDATE `trabalhos` SET id='".$id."', imagens='".$imagens."', titulo='".$titulo."', resumo='".$resumo."', producao='".$producao."', detalhes='".$detalhes."' WHERE id=".$_GET['id'];

 

O que eu pude notar é que as ações dos dois submits estão corretas. O que não estou conseguindo fazer é pegar o valor do checkbox para realizar as alterações.

 

Segue o novo formulário, agora com dois submits, um para enviar o formulario e continuar editando e o outro para enviar o formulário e voltar para a página principal

 

<form action="alterar-checkbox.php" method="post" enctype="multipart/formdata">
			<fieldset>
				<?php			
					mysql_connect("localhost", "root", "") or die("Não foi possivel conectar ao servidor.");
					mysql_select_db("lab") or die("Não foi possível selecionar o Banco de Dados.");
						
					$sql = "SELECT * FROM trabalhos ORDER BY id ASC";
							
					$resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta.");
		
					while ($linha = mysql_fetch_array($resultado))
					{
						echo "<input type='checkbox' name='op[]' /> Editar ID {$linha['id']}\n";
						
						echo "<label for='id'>ID: </label>\n";
						echo "<input type='text' name='id' value='{$linha['id']}' />\n";
						
						echo "<label for='imagens'>Imagens: </label>\n";
						echo "<input type='file' name='imagens[]' />\n
									<input type='file' name='imagens[]' />\n
									<input type='file' name='imagens[]' />\n
									<input type='file' name='imagens[]' />\n";
					
						echo "<label for='titulo'>Título: </label>\n";
						echo "<input type='text' name='titulo'  value='{$linha['titulo']}'/>\n";
						
						echo "<label for='resumo'>Resumo: </label>";
						echo "<input type='text' name='resumo' value='{$linha['resumo']}' />\n";
					
						echo "<label for='producao'>Produção: </label>";
						echo "<textarea name='producao' cols='50' rows='10'>{$linha['producao']}</textarea>\n";	
		
						echo "<label for='detalhes'>Detalhes: </label>\n";
						echo "<textarea name='detalhes' cols='50' rows='10'>{$linha['detalhes']}</textarea>\n";
					}
					echo "<input type='submit' name='continuar' value='Salvar e Continuar Editando'>";
					echo "<input type='submit' name='salvar' value='Salvar' />";
					
					echo "</fieldset>\n";
				?>
			</fieldset>
		</form>

E o arquivo alterar-checkbox.php:

 

 

<?php
	switch (get_post_action('continuar', 'salvar')) {
		case 'salvar':
		// save the work and redirect
		if (!empty($_POST['op']))
		{
		foreach ($_POST['op'] AS $id)
		{
			$ida = $_POST['op'];
			$numeroCampos = 4;
			$caminho = "uploads/";
			$substituir = false;
			
			$id = $_REQUEST['id'];
			$nomeArquivo = $_FILES["imagens"]["name"];	
			$imagens = implode(' ', $nomeArquivo);
			$titulo = $_REQUEST['titulo'];
			$resumo = $_REQUEST['resumo'];
			$producao = $_REQUEST['producao'];
			$detalhes = $_REQUEST['detalhes'];
			
			mysql_connect("localhost","root","") or die ("Não foi possível conectar ao Servidor.");
			mysql_select_db("portfolio") or die ("Não foi possível selecionar a base de dados");
			
			for ($i = 0; $i < $numeroCampos; $i++)
			{
				$nomeArquivo = $_FILES["imagens"]["name"][$i];
				$nomeTemporario = $_FILES["imagens"]["tmp_name"][$i];	
				
				if (!empty($nomeArquivo)) 
				{
					$erro = false;
					
					if (file_exists($caminho . $nomeArquivo) AND !$substituir)
					{
						$erro = "O arquivo <strong>".$nomeArquivo."</strong> já existe";
					}
					
					if (!$erro) 
					{				
						move_uploaded_file($nomeTemporario, ($caminho . $nomeArquivo));
					}
				}
				else
				{
					echo "Problema";
				}
			}
			$sql = "UPDATE `trabalhos` SET id='".$id."', imagens='".$imagens."', titulo='".$titulo."', resumo='".$resumo."', producao='".$producao."', detalhes='".$detalhes."' WHERE id=".$_GET['id'];
			
			$resultado = mysql_query($sql) or die ("Erro ao alterar os dados.");
			header("Location: alterar-trab.php");
		}
		}
		else
		{
  	//não pode enviar o form
  	echo "<h2>Erro!</h2>";
  	echo "<p>Selecione uma das entradas antes de clicar na opção desejada.</p>";
  	echo "Clique <a href='areausuario.php'>aqui</a> para voltar.";
		}
		break;
	
		case 'continuar':
		// save the work and keep editing
		break;
		
		default:
		// no action sent
		echo "Erro!";
	}
	
?>

<?php
	function get_post_action($name)
	{
		$params = func_get_args();
		
		foreach ($params AS $name)
		{
			if (isset($_POST[$name]))
			{
				return $name;
			}
		}
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O method do formulário está definido como POST, e na linha 65 você está trazendo como $_GET['id'] e no outro arquivo você está puxando $id com REQUEST. Como está dizendo o erro undefined index, no caso esse índice indefinido é no GET. Verifica essa passagem de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada feito até agora, o que estou querendo fazer e não estou conseguindo é pegar o valor do checkbox selecionado, no caso, um id por exemplo, e ao efetuar as alterações e clicar no submit, o script realizar as alterações apenas do checkbox selecionado. Não estou obtendo êxito, ou seja, não consigo com que o script pegue o valor do checkbox como ID para que as alterações sejam feitas. :(

 

 

<?php
  mysql_connect("localhost", "root", "") or die ("Não foi possível conectar-se ao Servidor.");
  mysql_select_db("lab") or die ("Não foi possível conectar-se o Banco de Dados.");
		
  $dados = mysql_query("SELECT * FROM empregados") or die ("Não foi possível realizar a consulta.");
	
  echo "<form method='POST' action='alterar-bd.php' enctype='multipart/formdata'>"; 	
  while($info = mysql_fetch_array($dados))
  {
    echo "<input type='checkbox' name='op[]' id='op' value='$info[id]'>Editar ID: $info[id]\n<br />";
    echo "Nome: <input type='text' name='nome' value='$info[nome]' /><br />";
    echo "Email: <input type='text' name='email' value='$info[email]' /><br />";
    echo "Telefone: <input type='text' name='telefone' value='$info[telefone]' /><br />";
    echo "Foto: <input type='file' name='foto' /><br /><br />";
  }
  echo "<input type='submit' name='alterar' value='Alterar'>";
  echo "</form>";
?>

 

<?php
  if (isset($_POST['op']))
  {
    foreach ($_POST['op'] AS $op)
    {
      $alvo = "imagens/";
      $alvo = $alvo . basename($_FILES['foto']['name']);
		
      @$id = $_REQUEST['id'];
      $nome = $_REQUEST['nome'];
      $telefone = $_REQUEST['telefone'];
      $email = $_REQUEST['email'];
      $foto = $_FILES['foto']['name'];
				
      mysql_connect("localhost", "root", "") or die ("Não foi possível conectar-se ao Servidor.");
      mysql_select_db("lab") or die ("Não foi possível conectar-se o Banco de Dados.");
				
      mysql_query("UPDATE `empregados` SET '$id', '$nome', '$email', '$telefone', '$foto' WHERE id =".$_GET['id']);
				
      if (move_uploaded_file($_FILES['foto']['tmp_name'], $alvo))
      {
        echo "O arquivo foi enviado para o Servidor e suas informações foram inseridas no Banco de Dados.";
      }
      else
      {
        echo "Desculpe, houve um problema ao enviar o arquivo para o Servidor.";
      }
    }
  }
  else
  {
    echo "Você não selecionou nenhum checkbox.";
  }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

foreach ($_POST['op'] AS $op)
Aqui é AS com letras minusculas 'as'.

 

E outra:

mysql_query("UPDATE `empregados` SET '$id', '$nome', '$email', '$telefone', '$foto' WHERE id =".$_GET['id']);
Esse $_GET['id'], ta valendo o que ? Não era pra ser $op ali ? Porque ele que é o código do usuário.

E nao use $_REQUEST. Use $_POST

 

Mas tipo cara, você ta querendo alterar tudo de uma vez ?

Nao eh mais facil você colocar um link do lado de cada linha, registro, mandando pra uma página que edite somente o que foi clicado mandando o ID do usuário ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado à todos que me auxiliaram,

 

Segui a dica do @Dee e ao invés de utilizar um checkbox para cada entrada numa mesma página, criei links para alteração! Simples, e o melhor, funciona! HUAHUAHUAHUAHUA http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

 

As festividades de fim de ano e o ato necessário de ainda ter mais alguns dias de 'trabalho' não me deixaram pensar!

 

Obrigado a todos e ótimo fim de ano!

 

 

Evoco os poderes do Tópico Resolvido pelos poderes dos Moderadores!

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.