Ir ao conteúdo
  • Cadastre-se

PHP Atualização de tabela por ID


Ir à solução Resolvido por Vagner Paes,

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.

Link para o comentário
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
Link para o comentário
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. 

Link para o comentário
Compartilhar em outros sites

  • Solução

@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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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...