Ir ao conteúdo

PHP Atualização de tabela por ID


Ir à solução Resolvido por Vagner Paes,

Posts recomendados

Postado

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.

Postado

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
Postado

@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. 

  • Solução
Postado

@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
Postado

@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

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...