Jump to content
Fórum Script Brasil
  • 0

o que está errado? Excluir com PHP PDO


Edilson Santiago

Question

Olá amigos, tenho uma página "usuarios.php" que me retorna todos os registros da tabela do BD.

No fim de cada linha, tenho dois links, um para "editar" e outro para "excluir". O "Excluir" chama a página "usu_excluir.php" acrescida da "id" do usuário daquela linha. O link do "excluir" é esse:

<a href="usu_excluir.php?<?php echo $row['id']?>">Excluir</a>

Aí, se eu estiver tentando excluir o regsitro de id 10, por exemplo, ele abre a página usu_excluir com o link:

https://meu_site/paginas/usu_excluir.php?10

Só que a página não abre. Retorna "essa página não está funcionando. Erro 500". 

 

No arquivo "classes/usuarios.php" fiz o seguinte:

 public function excluir($id){
                if($this->existeID($id)){
                    $sql = "DELETE FROM usuarios WHERE id = :id";
                    $sql = $this->pdo->prepare($sql);
                    $sql->bindValue(':id', $id);
                    $sql->execute();

                    return true;
                } else {
                    return false;
                }
            }

E minha página "usu_excluir.php, fiz assim:

<?php
session_start();
if(!isset($_SESSION['id']))
 {
    header("location: ../login.php");
    exit;
 }

   require_once '../classes/usuarios.php';
   $u = new Usuario;
   
$id = $_SERVER['QUERY_STRING'];

                $u->conectar("Meu banco de dados","localhost","usuário","senha"); 
                   if($u->msgErro == "")
                   {
                        if(confirm("Atenção. O Usuário será deletado.Tem certeza?"))
                        {
                        $u->excluir($id);
                        } else {
                                header("location ../paginas/painel.php"); 
                               }
                    }        
                
?>

Onde está o erro? 

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 1

Ok, esse é o código completo do usuarios.php:

<?php 
 
Class Usuario
{   
    private $pdo;
    public $msgErro = "";
     
    public function conectar($nome, $host, $usuario, $senha) {
        global $pdo;
        try
    {
        $dsn = 'mysql:host=' . $host . '; dbname=' . $nome;
        $options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'];
        $pdo = new PDO($dsn, $usuario, $senha, $options);
         
    } catch(PDOException $e) {
        $msgErro = $e->getMessage();
    }
    }
     
    public function cadastrar($nome, $email, $senha)//, $situacoe_id, $niveis_acesso_id, $created, $modified)
    {
        global $pdo;
        $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e");
        $sql->bindValue(":e",$email);
        $sql->execute();
        if($sql->rowCount() > 0)
        {
            return false;
        }
        else
        {
            $created = date('d/m/y');
            $modified = date('d/m/y');
            $sql = $pdo->prepare("INSERT INTO usuarios (nome, email, senha, situacoe_id, niveis_acesso_id, created, modified) VALUES (:y, :a, :p, :s, :n, :c, :m)");
                $sql->bindValue(":y",$nome);
                $sql->bindValue(":a",$email);
                $sql->bindValue(":p",password_hash($senha, PASSWORD_BCRYPT,['cost=>12']));
                $sql->bindValue(":s",1);
                $sql->bindValue(":n",1);
                $sql->bindValue(":c",$created);
                $sql->bindValue(":m",$modified);
                $sql->execute();
                return true;
        }
    }
    
    public function excluir($id){
                global $pdo;
                $sql = $pdo->prepare("DELETE FROM usuarios WHERE id = :e");
                $sql->bindValue(":e",$id);
                $sql->execute();
                return true;
                }
    
     
    public function logar($email, $senha)
    {
        global $pdo;      
        $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :a AND senha = :p");
        $sql->bindValue(":a",$email);
        $sql->bindValue(":z",$senhacorreta);
        $sql->bindValue(":p",password_hash($senha, PASSWORD_BCRYPT,['cost=>12']));
        if(password_verify(":z"==":p")){
             $sql->execute();
        if($sql->rowCount() > 0)
        {
            $dado = $sql->fetch();
            session_start();
            $_SESSION["id"] = $dado["id"];
            return true;
        }
        else
        {
            return false;
        }
            
        }
       
    }

}
?>

E esse é o print da página de erro:

 

erro.png

Descobri que o problema está na confirmação. Eliminei o trecho

if(confirm("Atenção. O Usuário será deletado.Tem certeza?"))
                        {

e deletou o registro. Contudo preciso dessa confirmação, e também que redirecione de volta para  a página de registros depois da exclusão. 

Link to comment
Share on other sites

  • 1

Resolvi o problema, colocando a confirmação na página dos usuários:

<a href=usu_excluir.php?<?php echo $row['id']?> onclick="javascript:return confirm('Atenção! O usuário <?php echo $row['nome']?> será excluído permanentemente. Você tem certeza disso?')" >Excluir</a>
                    </td>

E na página "usu_excluir.php", acrescentei:

 $u->conectar("meu banco de dados","localhost","meu usuario","minha senha"); 
                   if($u->msgErro == "")
                   {
                        
                        $u->excluir($id);
                        echo "registro excluído com sucesso. Você será redirecionado em 3 segundos...";
                        echo "<meta http-equiv=refresh content='3;URL=painel.php'>";
                        } else {
                                header("location ../paginas/painel.php"); 
                               }

 

Ficou meio que na gambiarra, mas foi o que deu, rsrs.

Link to comment
Share on other sites

  • 0

O meu conhecimento em PHP é bem precário, eu ainda não sei trabalhar com o PDO e muito menos com a programação orientada a objetos. Mas estou grato pelo código usuario.php, com ele improvisei esses códigos:

 

tbusuario
------------------------------
Username,varchar(45),PK,NN
Password,varchar(45)
Email,varchar(45)
id,varchar(45)

astudy.php
------------------------------
<a href="?id=5">listar usuarios</a>
<?php
require_once 'astudy2.php';
$u=new usuario;
if (isset($_GET['id'])){
	$u=new usuario;
	$u->listar("tbusuario");
	echo "<a href='?exc=5'>excluir usuario 5</a>";}
if (isset($_GET['exc'])){
	$exc=$_GET['exc'];
	$u=new usuario;
	$u->excluir($exc,"tbusuario");
	$u->listar("tbusuario");}
?>

astudy2.php
------------------------------------------------
<?php
class usuario {   
    private $mysqli;
    public function conectar() {
		global $mysqli;
		$mysqli=mysqli_connect("localhost","root","","astudy");}
    public function excluir($id,$table){
        global $mysqli;
		$this->conectar();
        $query = $mysqli->query("delete from $table where id = $id");}
	public function listar($table){
		global $mysqli;
		$this->conectar();
		$query=$mysqli->query("select * from $table");
		while ($row=$query->fetch_assoc()){
			var_dump($row);}
		}
}
?>

 

Edited by Frank K Hosaka
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...