Ir para conteúdo

Arquivado

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

SrTunes

[Resolvido] Formulário de alteração no banco SQL

Recommended Posts

Amigos, preciso de uma ajudinha. Meu conhecimento em php é muito inicial e por isso necessito de uma grande ajuda de vocês.

tenho 4 tabelas em um banco de dados SQL: usuarios, cargo, coordenacao e termo.

A tabela principal é a de usuarios, onde tem os campos: nome, cpf, email, ramal, cargo, coordenacao, tipoToken, situacao, nTermo, data

 

Fiz uma pagina onde exibe alguns dados da tabela usuario, nesta pagina, em cada usuário tem um link para editar, quando clico em editar, sou redirecionado para um formulário que recebe todos os dados da tabela usuários, onde eu posso alterar qualquer, depois que faço a alteração clico em alterar e ele exibe uma mensagem dizendo que foi alterado ou não.

 

Aqui esta o código do meu formulario de alteração:

 

<?php
require_once("codigos/conexao.php");

//pego a ID da url
$id = (int) 0 + $_GET["id"];

//verifico se a ID ainda é numérica, pois caso não seja pode ser
//uma tentativa de SQL Injection
if (!is_numeric($id)) {
   die("Tentativa de SQL Injection.");
}

//verifico se clicaram no botão atualizar, ou seja, foi feito um POST
if (getenv("REQUEST_METHOD") == "POST") {
   //irei utilizar um método mais manual para evitar sql inject
   //Levaremos em consideração que alguns caracteres não devem ser
   //cadastrados no banco, vamos criar um array para isto
   $invalidos = (array) array("'", "\"", ";", "--");
   //verificamos se no POST não tem nenhum desses dados em nenhum dos campos
   foreach ($_POST as $valor) {
       foreach ($invalidos as $invalido) {
           if(strpos($valor, $invalido) !== false){
               die("Tentativa de SQL Inject. Não utilize nenhum desses caracteres: <strong>" . implode(" ", $invalidos) . "</strong>");
           }
       }
   }

   //se chegou aqui, os dados foram validados, agora faço a consulta de atualizar no banco
   $qry_atualizacao = "UPDATE usuarios SET nome = '{$_POST["nome"]}', cpf = '{$_POST["cpf"]}', email = '{$_POST["email"]}', ramal = {$_POST["ramal"]}, coordenacao = {$_POST["coordenacao"]}, tipoToken = {$_POST["tipoToken"]}, situacao = {$_POST["situacao"]}, nTermo = {$_POST["nTermo"]}, data = {$_POST["data"]} WHERE id = {$id};";

   //apenas executo a query
   if(mysql_query($qry_atualizacao)){
       $status_atualizacao = "Usuário atualizado com sucesso.";
   }else{
       $status_atualizacao = "O cadastro não foi atualizado. Informe o administrador do sistema sobre este erro e como fez para chegar até ele.";
   }

}

//caso contrário, faço a consulta no banco normalmente e exibo os dados
//em um formulário HTML
//Crio a string da query, observe que não estou juntando a tabela de classes
//pois desta vez me interessa o número e não o nome
$qry_usuario = "SELECT * FROM usuarios WHERE id = {$id};";
$exe_usuarios = mysql_query($qry_usuario);

//verifico se houve 1 e apenas um usuário, caso isso não seja verdade, gero um erro
if (mysql_num_rows($exe_usuarios) != 1) {
   die("Erro ao consultar. Itens retornado: " . mysql_num_rows($exe_usuarios) . ". Deve ser apenas 1.");
}

//se cheguei aqui, está tudo ok, agora faço a form e 
$usuario = mysql_fetch_array($exe_usuarios, MYSQL_ASSOC);

//agora eu busco todas as coordenações, vou fazer um combo box para que possa editar a coordenação também
$qry_coordenacao = "SELECT * FROM coordenacao ORDER BY coordenacao ASC;";
$exe_coordenacao = mysql_query($qry_coordenacao);

//agora eu busco todas os cargos, vou fazer um combo box para que possa editar os cargos também
$qry_cargo = "SELECT * FROM cargo ORDER BY cargo ASC;";
$exe_cargo = mysql_query($qry_cargo);
?>

<html>
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <title>Listagem de usuários</title>
   </head>
   <body>

       <!-- VERIFICO SE EXISTE UMA VARIAVEL CHAMADA ATUALIZADO E EXIBO A MENSAGEM -->
       <?php if(isset($status_atualizacao)): echo $status_atualizacao; endif; ?>

       <!-- AQUI CRIAREMOS UMA TABELA E UM FORM COM OS DADOS DO USUÁRIO JÁ PREENCHIDOS -->

       <!-- é importante que o método seja o post -->
       <!-- o action é em para qual página passaremos os dados, será para ela mesmo -->
       <form name="frmEdicao" method="post" action="editar_usuario.php?id=<?php echo $id; ?>">
           <table width="592" height="380" border="1">
     			<tr>
       			<td colspan="3"><p>   Nome:<br />
                   	<label for="nome"></label>
         				 
                   	<input name="nome" type="text" value="<?php echo $usuario["nome"]; ?>" size="90" />
                   </p></td>
               </tr>
               <tr>
       			<td width="160"><p>   CPF:<br />
                   	<label for="cpf"></label>
         				 
                   	<input name="cpf" type="text" value="<?php echo $usuario["cpf"]; ?>" size="20" />
                   </p></td>
                   <td colspan="2">   e-mail:<br />
                   	<label for="email"></label>
         				 
                       <input name="email" type="text" value="<?php echo $usuario["email"]; ?>" size="62,5" />
                   </td>
               </tr>
               <tr>
               	<td><p>   Coordenação:<br />
                   	<select name="coordenacao">
                       	<?php
                           while($coordenacao = mysql_fetch_array($exe_coordenacao)){
                           ?>
                       <option <?php if($usuario["coordenacao"] == $coordenacao["coordenacao"]): ?>selected="selected"<?php endif; ?> value="<?php echo $coordenacao["id"]; ?>"><?php echo $coordenacao["coordenacao"]; ?>
                       </option>
                       <?php
                           }
                           ?>
                       </select>
                   </p></td>
                   <td width="284"><p>  Cargo:<br />
                   	<select name="cargo">
                       	<?php
                           while($cargo = mysql_fetch_array($exe_cargo)){
                           ?>
                       <option <?php if($usuario["cargo"] == $cargo["cargo"]): ?>selected="selected"<?php endif; ?> value="<?php echo $cargo["id"]; ?>"><?php echo $cargo["cargo"]; ?>
                       </option>
                       <?php
                           }
                           ?>
                       </select>
                   </p></td>
                   <td>  Ramal:<br />
                   <label for="ramal"></label>
	  			 
                   <input name="ramal" type="text" value="<?php echo $usuario["ramal"]; ?>" size="13" />
                   </td>
               </tr>
               <tr>
               	<td><p>   Mídia:<br />
         			<label for="tipoToken"></label>
                    
                   <input name="tipoToken" type="text" value="<?php echo $usuario["tipoToken"]; ?>" size="20" />
                   </p></td>
                   <td colspan="2">  N série:<br />
                   <label for="nSerie"></label>
	 			 
                   <input name="nSerie" type="text" value="<?php echo $usuario["nSerie"]; ?>" size="40" />
                   </td>
               </tr>
               <tr>
               	<td colspan="3"><p>   Termo:<br />
                   <label for="nTermo"></label>
         			 
                   <input name="nTermo" type="text" value="<?php echo $usuario["nTermo"]; ?>" size="30" />
                   </p></td>
               </tr>
     			<tr>
               <td height="50" colspan="2"><p>   Situação:<br />
               	<label for="situacao"></label>
         			 
                   <input name="situacao" type="text" value="<?php echo $usuario["situacao"]; ?>" size="35" />
                   </p>
                   </td>
                   <td width="126"><p>  Data:<br />
                   <label for="data"></label>
   	  			 
                   <input name="data" type="text" value="<?php echo $usuario["data"]; ?>" size="13" />
                   </p></td>
               </tr>
               <tr>
                   <td colspan="2"><input type="submit" value="Alterar dados" /></td>
               </tr>
           </table>
       </form>

       <!-- FIM DA TABELA E DO FORM -->

   </body>
</html>

 

Problema 1 (mais grave): esse código não é meu, pequei um modelo e adaptei, por isso não consigo encontrar o erro. O formulário abre normalmente, coleta os dados, mas na hora que eu faço a atualização e clico em atualizar eu caio na mensagemdo if: O cadastro não foi atualizado. Informe o administrador do sistema sobre este erro e como fez para chegar até ele. E os dados não são atualizados.

 

Por favor me ajudem!

Desde já agradeço. Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara da uma olhada nessa parte do codigo:

 $qry_atualizacao = "UPDATE usuarios SET nome = '{$_POST["nome"]}', cpf = '{$_POST["cpf"]}', email = '{$_POST["email"]}', ramal = {$_POST["ramal"]}, coordenacao = {$_POST["coordenacao"]}, tipoToken = {$_POST["tipoToken"]}, situacao = {$_POST["situacao"]}, nTermo = {$_POST["nTermo"]}, data = {$_POST["data"]} WHERE id = {$id};";

 

tenta por assim:

 

 

 $qry_atualizacao = "UPDATE usuarios SET nome = ".$_POST["nome"].", cpf = ".$_POST["cpf"].", email = ".$_POST["email"].", ramal = ". $_POST["ramal"].", coordenacao = ". $_POST["coordenacao"].", tipoToken = ". $_POST["tipoToken"].", situacao = ".$_POST["situacao"].", nTermo = ".$_POST["nTermo"].", data = ".$_POST["data"]." WHERE id = ".$id.";";

 

Se o erro permanecer tenta exibir o erro do mysql, ou usando mysql_error(), ou dando echo na variavel $qry_atualizacao e jogando o codigo no seu SGBD para exibir o erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara da uma olhada nessa parte do codigo:

 $qry_atualizacao = "UPDATE usuarios SET nome = '{$_POST["nome"]}', cpf = '{$_POST["cpf"]}', email = '{$_POST["email"]}', ramal = {$_POST["ramal"]}, coordenacao = {$_POST["coordenacao"]}, tipoToken = {$_POST["tipoToken"]}, situacao = {$_POST["situacao"]}, nTermo = {$_POST["nTermo"]}, data = {$_POST["data"]} WHERE id = {$id};";

 

tenta por assim:

 

 

 $qry_atualizacao = "UPDATE usuarios SET nome = ".$_POST["nome"].", cpf = ".$_POST["cpf"].", email = ".$_POST["email"].", ramal = ". $_POST["ramal"].", coordenacao = ". $_POST["coordenacao"].", tipoToken = ". $_POST["tipoToken"].", situacao = ".$_POST["situacao"].", nTermo = ".$_POST["nTermo"].", data = ".$_POST["data"]." WHERE id = ".$id.";";

 

Se o erro permanecer tenta exibir o erro do mysql, ou usando mysql_error(), ou dando echo na variavel $qry_atualizacao e jogando o codigo no seu SGBD para exibir o erro...

 

Obrigado pela tentativa de me ajudar, fico muito grato, mas não funcionou também... continua a mesma. O que será que pode ser??

 

Desculpe-me pela ignorância, mas onde eu uso o mysql_error()? eu acho que estou colocando a função de forma errada, pois sempre me da uma erro: Warning: mysql_error() expects parameter 1 to be resource, null given in C:\wamp\www\CD\editar_usuario.php on line 30

 

Cara da uma olhada nessa parte do codigo:

 $qry_atualizacao = "UPDATE usuarios SET nome = '{$_POST["nome"]}', cpf = '{$_POST["cpf"]}', email = '{$_POST["email"]}', ramal = {$_POST["ramal"]}, coordenacao = {$_POST["coordenacao"]}, tipoToken = {$_POST["tipoToken"]}, situacao = {$_POST["situacao"]}, nTermo = {$_POST["nTermo"]}, data = {$_POST["data"]} WHERE id = {$id};";

 

tenta por assim:

 

 

 $qry_atualizacao = "UPDATE usuarios SET nome = ".$_POST["nome"].", cpf = ".$_POST["cpf"].", email = ".$_POST["email"].", ramal = ". $_POST["ramal"].", coordenacao = ". $_POST["coordenacao"].", tipoToken = ". $_POST["tipoToken"].", situacao = ".$_POST["situacao"].", nTermo = ".$_POST["nTermo"].", data = ".$_POST["data"]." WHERE id = ".$id.";";

 

Se o erro permanecer tenta exibir o erro do mysql, ou usando mysql_error(), ou dando echo na variavel $qry_atualizacao e jogando o codigo no seu SGBD para exibir o erro...

 

Acho que consegui colocar o mysql_error() e se coloquei certo ele retornou isso: 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 '.897-55, email = teste@teste.com.br, ramal = 1252, cargo = Tercerizado, coordena' at line 1

 

O problema é que não sei que erro é esse.

 

Wingdings agradeço muito sua ajuda! enfim consegui atualizar os dados, o meu codigo da variavel $qry_atualizacao realmente precisava de ajuste, ficou assim:

$qry_atualizacao = "UPDATE usuarios SET nome = '".$_POST["nome"]."', cpf = '".$_POST["cpf"]."', email = '".$_POST["email"]."', ramal = '".$_POST["ramal"]."', cargo = '".$_POST["cargo"]."', coordenacao = '".$_POST["coordenacao"]."', tipoToken = '".$_POST["tipoToken"]."', situacao = '".$_POST["situacao"]."', nTermo = '".$_POST["nTermo"]."', data = '".$_POST["data"]."' WHERE id = '".$id."';";

 

Tive que usar aspas simples antes das aspas duplas

 

Agora preciso de uma ajuda no segundo probleminha:

 

Problema 2 (menos relevante): No meu codigo da tabela eu criei dois links para cada linha, onde posso editar, ou excluir o usuário, só que quando clico em editar ele vai para o formulário de edição na mesma página. Gostaria que ele abrisse uma janela com as dimensões do formulário e mantivesse a pagina da tabela e quando eu clicasse em alterar no formulário, automaticamente a tabela se atualizaria também. Como pode ser feito?

 

O codigo dos links na pagina da tabela é esse:

<?php
		include "codigos/conexao.php";
           $res = mysql_query("select * from usuarios"); /*Executa o comando SQL, no caso para pegar todos os usuarios do sistema e retorna o valor da 						consulta em uma variavel ($res)  */
		/*Enquanto houver dados na tabela para serem mostrados será executado tudo que esta dentro do while */
		while($escrever=mysql_fetch_array($res)){
              echo '<tr>
                   <td class="tabela-coluna0"><span>' . $escrever['nome'] . '</span></td>
                   <td class="tabela-coluna1"><span>' . $escrever['cpf'] . '</span></td>
                   <td class="tabela-coluna2"><span>' . $escrever['email'] . '</span></td>
				<td class="tabela-coluna3"><span>' . $escrever['ramal'] . '</span></td>
				<td class="tabela-coluna4"><span>' . $escrever['coordenacao'] . '</span></td>
				<td class="tabela-coluna5"><span>' . $escrever['tipoToken'] . '</span></td>
				<td class="tabela-coluna6"><span>' . $escrever['situacao'] . '</span></td>
				<td class="tabela-coluna7"><span>' . $escrever['nTermo'] . '</span></td>
				<td class="tabela-coluna8"><span>' . $escrever['data'] . '</span></td>
				<td class="tabela-coluna9"><span>
                       <a href="editar_usuario.php?id=' . $escrever["id"] . '">Editar</a>
                       <a href="deletar_usuario.php?id=' . $escrever["id"] . '"></span>Deletar</a>
                   </td>
               </tr>';
		}
		mysql_close($conexao);
		?>

 

Podem me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, resolvi este problema usando javascript com ajax.

 

Fiz a função no head:

<link rel="stylesheet" href="css/jquery.superbox.css" type="text/css" media="all" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="jquery.superbox-min.js"></script>

<script type="text/javascript">
$(function(){
$.superbox.settings = {
	closeTxt: "Fechar",
	loadTxt: "Carregando...",
	overlayOpacity: .8, 
	boxWidth: "600",
	boxHeight: "400",
};
$.superbox();
});
</script>

E depois coloquei o link assim:

 

<a href= "editar_usuario.php" rel="superbox[ajax][form_editar.php?id=' . $escrever["id"] . '">Editar</a>

 

E ficou legal! Obrigado a todos. Pode colocar resolvido.

 

fonte: http://pierrebertet.net/projects/jquery_superbox/

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.