Ir ao conteúdo
  • Cadastre-se
Glouk

PHP RESOLVIDO Atualização de tabela por ID

Posts recomendados

Boa tarde,

Eu tenho uma pagina administrativa que lista todos os usuários do site, bem como a opção de alterar o status de cada um deles.

porém estou tendo problemas em colocar qual usuário especifico deve ser editado. 

Eu fiz a tabela com do while, sendo assim fica sendo repetida até terminar de imprimir todos os usuários do banco. E em uma coluna eu coloquei um form para a alteração do status dele (desativado, ativado e admin). porém não sei como fazer para especificar qual usuário deve ser alterado. Quando o formulario roda, ele altera o status de todos do banco.

 

Segue os codigos:

 

Cabeçalho:

<?php
include "verifyadm.php";
include "conexao.php";

$id = $_SESSION["idUser"];
$query = sprintf("SELECT * FROM registro ");
$dados = mysqli_query($con, $query) or die(mysqli_error());
$linha_d = mysqli_fetch_assoc($dados);
$total = mysqli_num_rows($dados);


?>

Tabela:

<table id="table-3" class="display" style="width:100%">
        <thead>
            <tr>
                <th>ID   </th>
                <th>Nome</th>
                <th>E-mail</th>
                <th>Sala</th>
                <th>Unidade</th>
                <th>CPF</th>
                <th>Status</th>
                <th>Alterar</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
          <? if($total > 0) {
            do {?>
            <tr>
                <th><?=$linha_d['id']?></th>
                <td><?=$linha_d['nome']?> <?=$linha_d['sobrenome']?></td>
                <td><?=$linha_d['email']?></td>
                <td>M9</td>
                <td>Bauru</td>
                <td><?=$linha_d['cpf']?></td>
                <td>
                  <? if($linha_d['status'] == 1){?>
                    <span class="role user">desativado</span>
                  <?}elseif ($linha_d['status'] == 2){?>
                    <span class="role member">ativado</span>
                  <?}elseif ($linha_d['status'] == 3){?>
                    <span class="role admin">admin</span>
                  <?}?>
                </td>
                <td>
                    <div class="rs-select2--trans rs-select2--sm">
                      <form method="post">
                          <select name="update" onchange="this.form.submit()">
                            <option selected="selected">Status</option>
                            <option value="3">Admin</option>
                            <option value="2">Ativo</option>
                            <option value="1">Desativado</option>
                          </select>
                      </form>
                        <div class="dropDownSelect2"></div>
                    </div>
                </td>
                <td>
<form method="post"><button type="button" class="btn btn-danger btn-sm" name="exclui" id="exclui"><i class="faz fa-trash"></i></button></form>

                </td>
            </tr>

            <?}while($linha_d = mysqli_fetch_assoc($dados));
          }?>

          </tbody>
      <tfoot>
          <tr>
              <th>ID   </th>
              <th>Nome</th>
              <th>E-mail</th>
              <th>Sala</th>
              <th>Unidade</th>
              <th>CPF</th>
              <th>Status</th>
              <th>Alterar</th>
              <th></th>
          </tr>
      </tfoot>
  </table>

 

Formulário de alteração: 

<?php
                                    if(isset($_POST['update'])){
                                        $sts  = $_POST["update"];


                                        $atualizar = mysqli_query($con, "UPDATE registro SET status='$sts' WHERE id=");


                                        if($atualizar):

                                            echo '<div class="alert alert-success">
                                                  <strong>Sucesso!</strong> Usuario alterado com sucesso!.
                                                </div>';
                                        else:

                                            echo '<div class="alert alert-danger">
                                                  <strong>Opa!</strong> Tivemos um problema, contate o administrador!.
                                                </div>';
                                        endif;


                                    }?>

 

Desde ja agradeço qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, uma solução seria passar o ID pelo formulário, assim:

<form method="post" action="?id=<?php echo $linha_d[id]; ?>">
  <select name="update" onchange="this.form.submit()">
    <option selected="selected">Status</option>
    <option value="3">Admin</option>
    <option value="2">Ativo</option>
    <option value="1">Desativado</option>
  </select>
</form>

E no formulário de alteração pegar ele por $_GET['id'];
 

<?php
if (isset($_POST['update'])) {
    $sts  = $_POST["update"];
    $idAlteracao = $_GET['id'] ?? 0;

    // Validar $idAlteracao > 0

    $atualizar = mysqli_query($con, "UPDATE registro SET status='$sts' WHERE id=$idAlteracao");
    if ($atualizar) :
        echo '<div class="alert alert-success">
                                                  <strong>Sucesso!</strong> Usuario alterado com sucesso!.
                                                </div>';
    else :
        echo '<div class="alert alert-danger">
                                                  <strong>Opa!</strong> Tivemos um problema, contate o administrador!.
                                                </div>';
    endif;
} ?>

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Vagner Paes

Entendi seu raciocínio, acredito que deve funcionar.

Mas agora me deparei com algo inusitado. 

Ficou desta forma:

  <?php
                                    if(isset($_POST['update'])){
                                        $sts  = $_POST["update"];
                                        $ida = $_GET['id'] ?? 0;

                                        $atualizar2 = mysqli_query($con, "UPDATE registro SET status='$sts' WHERE id=$ida ");


                                        if($atualizar2):

                                            echo '<div class="alert alert-success">
                                                  <strong>Sucesso!</strong> Usuario alterado com sucesso!.
                                                </div>';
                                        else:

                                            echo '<div class="alert alert-danger">
                                                  <strong>Opa!</strong> Tivemos um problema, contate o administrador!.
                                                </div>';
                                        endif;


                                    }?>

Eu testei as variáveis com print, pra ver se a informação imprimida estava correta, e realmente estava. 

porém acho que deu algum bug no banco de dados.

$atualizar2 = mysqli_query($con, "UPDATE registro SET status='$sts' WHERE id=$ida ");

Se eu deixar a linha desta forma, ele retorna a mensagem para contatar um administrador.

porém se eu coloco $ida com apóstrofos ele retorna a mensagem de sucesso, porém não atualiza no banco de dados. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Glouk, teste dessa forma o update:
 

$atualizar2 = mysqli_query($con, "UPDATE registro SET status='{$sts}' WHERE id='{$ida}' ");

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Vagner Paes  Retorna mensagem de sucesso, entretanto não ocorre a atualização do banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Glouk, vamos tentar concatenando a string. Aparentemente está tudo certo com o código.

$atualizar2 = mysqli_query($con, "UPDATE registro SET status='" . $sts . "' WHERE id='" . $ida . "' ");

Se não der, tente dar um echo na query e executar manualmente no banco.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Vagner Paes  Pronto, dessa forma consegui. Funcionou

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Glouk Cara tenta usar o PSR, isso pode ajudar a você a entender o seu código melhor.

 

Notei um erro no html

 

Isso está errado!

 <option selected="selected">Status</option>

O correto é.

 <option selected>Status</option>

 

Você também pode passar o id usando um input com o tipo hidden(type="hidden")

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
		<input type="hidden" name="id" value="<?php echo $linha_d[id]; ?>">
	 	<select name="update" onchange="this.form.submit()">
	    	<option selected>Status</option>
	    	<option value="3">Admin</option>
	    	<option value="2">Ativo</option>
	    	<option value="1">Desativado</option>
	  	</select>
</form>

 

Também recomendo o uso do require em vez do include, já que a aplicação só vai funcionar se os verifyadm.php e conexao.php estiverem incluídos.

 

Uma exemplo do seu código usando o PSR.

if(isset($_POST["update"]) and isset($_POST["id"])) 
{
	$erro = 0;
	
	if($_POST["update"] < 1 and $_POST["update"] > 3 and !is_int($_POST["update"])){
		$erro++;
	}
	else
	{
		$status = $_POST["update"];
	}

	if($_POST["id"] < 0 and !is_int($_POST["id"])){
		$erro++;
	}
	else
	{
		$id = $_POST["id"];
	}

   	if ($erro == 0)
   	{  
   		$query = "UPDATE `registro` SET `status` = '".$status."' WHERE `id` = ".$id.";";
	    if (mysqli_query($con, $query))
	    {
	        echo '<div class="alert alert-success">
			      	<strong>Sucesso!</strong> Usuario alterado com sucesso!.
			      </div>';
	    }
	    else
	    {
	    	$erro++;
		}
	}
    
    if ($erro > 0)
    {
    	echo '<div class="alert alert-danger">
    		  	<strong>Opa!</strong> Tivemos um problema, contate o administrador!.
    		  </div>';
    }
}

Nesse exemplo eu passo o id no método POST

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@GabrielSennaMs Obrigado pelas citações, achei importante e vou alterar. Agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!