Ir para conteúdo

Arquivado

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

Evair Gretter

Excluindo Com e Sem PDO

Recommended Posts

Bom dia!

 

Estou tentando fazer uma página de exclusão utilizando PDO (também tentei fazer sem), bom o problema é o seguinte quando clico no botão excluir de determinado cliente, atribuo esse nome para uma variável $nome através da variável global $_GET, mas a página simplesmente atualiza para a página inicial e não exclui o registro no banco. Abaixo estou enviando o código da página de exclusão, a função e também o SQL, se alguem puder me ajudar :D....

 

--------------

Código da página de exclusão

 

<?php
require_once 'funcoes/carregar.php';
$includes = array("paginas/", "funcoes/", "estilos/", "includes/", "email/", "phpmailer/");
try {
CarregaIncludes($includes);
if(isset($_GET['nome'])):
if($_GET['ac']=='del'):
$nome=$_GET['nome'];
if(deletarCli($nome)):
echo "Cliente excluido com sucesso";
else:
throw new Exception('Erro ao excluir o cliente');
endif;
else:
throw new Exception ('É necessário selecionar um cliente');
endif;
endif;
} catch (Exception $e) {
echo "Erro " . $e->getMessage();
exit;
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="text/css" href="CSS/estilos/listagempro.css" rel="stylesheet" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Painel de Controle</title>
</head>

<body>
<div id="geralcad">
<div id="lateralescad"> </div>
<div id="listagem">
<br />
<?php
$dados = listarCli();
$d = new ArrayIterator($dados);
?>
<ul>
<?php while($d->valid()):?>
<li><?php echo $d->current()->nome;?></li>
<li><a href="?nome=<?php echo $d->current()->nome;?>&ac=del">Excluir</a></li>
<?php
$d -> next();
endwhile; ?>
</ul>
</div>
</div>
</body>
</html>

-----

 

Função

 

function deletarCli($nome){
$pdo= conectarBanco();
try{
$deletar= $pdo->prepare("DELETE FROM clientes WHERE nome=:nome");
$deletar->bindValue(":nome",$nome,PDO::PARAM_STR);
$deletar->execute();
if($deletar->rowCount()==1):
return true;
else:
return false;
endif;
}catch(PDOException$e){
echo "Erro". $e->getMessage();
}
}

 

-----

SQL

 

/*
SQLyog Ultimate v11.11 (64 bit)
MySQL - 5.5.8-log
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;

create table `clientes` (
`˜ãÐ` text ,
`ØãÐ` text ,
`(äÐ` text ,
`xäÐ` text ,
`¸äÐ` text ,
`øäÐ` text ,
`HåÐ` text
);
insert into `clientes` (`nome`, `nascimento`, `endereco`, `cidade`, `email`, `telefone`, `celular`) values('teste1','18-11-1989','teste1','teste1','teste1','teste1','teste1');
insert into `clientes` (`nome`, `nascimento`, `endereco`, `cidade`, `email`, `telefone`, `celular`) values('teste2','18-12-1989','teste2','teste2','teste2','teste2','teste2');
insert into `clientes` (`nome`, `nascimento`, `endereco`, `cidade`, `email`, `telefone`, `celular`) values('teste3','18-11-1989','teste3','teste3','teste3','teste3','teste3');
insert into `clientes` (`nome`, `nascimento`, `endereco`, `cidade`, `email`, `telefone`, `celular`) values('teste4','21-10-1989','teste4','teste4','teste4','teste4','teste4');

 

Desde já agradeço a atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

create table `clientes` (
    `˜ãÐ` text ,
    `ØãÐ` text ,
    `(äÐ` text ,
    `xäÐ` text ,
    `¸äÐ` text ,
    `øäÐ` text ,
    `HåÐ` text
);

 

WTF? :upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

WTF? :upset:

Esse ai é o SQl exportado pelo SQLYOG...

 

CREATE TABLE `clientes` (

`nome` TEXT ,

`nascimento` TEXT ,

`endereco` TEXT ,

`cidade` TEXT ,

`email` TEXT ,

`telefone` TEXT ,

`celular` TEXT

);

INSERT INTO `clientes` (`nome`, `nascimento`, `endereco`, `cidade`, `email`, `telefone`, `celular`) VALUES('teste1','18-11-1989','teste1','teste1','teste1','teste1','teste1');

INSERT INTO `clientes` (`nome`, `nascimento`, `endereco`, `cidade`, `email`, `telefone`, `celular`) VALUES('teste2','18-12-1989','teste2','teste2','teste2','teste2','teste2');

INSERT INTO `clientes` (`nome`, `nascimento`, `endereco`, `cidade`, `email`, `telefone`, `celular`) VALUES('teste3','18-11-1989','teste3','teste3','teste3','teste3','teste3');

INSERT INTO `clientes` (`nome`, `nascimento`, `endereco`, `cidade`, `email`, `telefone`, `celular`) VALUES('teste4','21-10-1989','teste4','teste4','teste4','teste4','teste4');

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá.. não entendi mt bem sua duvida, mas d 1 olhada nessas dicas:

http://www.devmedia.com.br/introducao-ao-php-pdo/24973

 

1 obs: p/ excluir/editar, eu normalmente seleciono 1 id (1 chave primária)

e pelo jeito vc n está utilizando; isso pode dar problema em bancos de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá.. qqer coisa retorne.. disponha :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia...

Já tentei fazer de um milhao de jeitos diferentes mas ainda não estou conseguindo excluir os usuários.

Meu código está assim no momento. E parece que ao clicar a variável $_get não é criada sendo assim o código não funciona corretamente. OBS meu form está como post pois se colocar como get, quando clico no botão excluir a página some, como se estivesse chamando ?id=1 (código). Se alguem puder me ajudar...

 

 

Ai está o código...

 

<?php
require_once 'funcoes/carregar.php';
$includes = array("paginas/", "funcoes/", "estilos/", "includes/", "email/", "phpmailer/");
try {
CarregaIncludes($includes);
} catch (Exception $e) {
echo "Erro: " . $e->getMessage();
exit;
}
try{
if (isset($_GET['id'])):
if ($_GET['ac'] == 'del'):
$cod_cli = $_GET['id'];
if (deletarCli($cod_cli)):
echo"Cliente excluido com sucesso";
else:
throw new Exception('Erro ao excluir o cliente');
endif;
else:
throw new Exception('É necessário selecionar um cliente');
endif;
endif;
}catch(Exception $e){
echo "Erro".$e->getMessage();
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="text/css" href="CSS/estilos/listagempro.css" rel="stylesheet" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Painel de Controle</title>
</head>

<body>
<div id="geralcad">
<div id="lateralescad"> </div>
<div id="listagem">
<br />
<form id="form1" name="form1" method="Post" action="">
<?php
$dados = listarCli();
$d = new ArrayIterator($dados);
?>
<ul>
<?php while ($d->valid()): ?>
<li><?php echo $d->current()->codigo; ?></li>
<li><a href="?id=<?php echo $d->current()->codigo;?>&ac=del"><input type="submit" value="excluir" id="excluir"></input></a></li>
<?php
$d->next();
endwhile;
?>
</ul>
</form>
</div>
</div>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo.. não me leve a mal, mas, como eu disse, não entendi seu código.. nem estou vendo a
instrução SQL q efetivamente apaga o registro no banco.. e tem todos esses "includes"..
daqui a gente n tem como saber o q esses includes fazem..

bom, 1 roteirinho simples:


1 - crie no seu banco de dados 1 tabela chamada "lixo" c/ 2 colunas: id (chave primária) e nome (varchar 50);
2 - insira alguns dados na coluna "nome" (pode ser teste1, teste2, etc. como vc já está fazendo)
3 - crie uma pg PHP que recupera esses registros..
(ex: select * from lixo)
4 - (atenção) na linha q exibe os registros selecionados, vc vai misturar html e php, assim:

<a href="ZZZZZZZZ.php?id=<?php echo $row->id; ?>">Excluir<br /></a>

5 - salve e teste essa pg, mas não clique nos links; o importante é q na barra inferior do navegador sejam exibidos corretamente a pagina e o "id" correto ao passar o mouse sobre eles; tipo assim:

http://localhost/ZZZZZZ.php?id=1

6 - crie uma pg PHP q exibe 1 registro selecionado (é a ZZZZZZ.php, acima):
(ex da sql: select * from lixo where id=$idselecionado)

7 - vincule os dados recuperados a 1 form (deixe a action em branco)

 

8 - nesse form insira 2 botões submit; o 1º coloque como "value" o texto "confirmar exclusão";
o 2º "cancelar"; os importante são os nomes; 1 sugestão: chame o 1º "confirmaexclusao" e o 2º "cancela";

 

(acima do form vc pode colocar uma advertência, em texto mesmo, no "body") tipo assim:
"ATENÇÃO: AO CLICAR EM 'CONFIRMAR EXCLUSÃO' OS DADOS SERÃO APAGADOS DEFINITIVAMENTE;
CASO NÃO DESEJE REALMENTE APAGAR ESSE DADOS, CLIQUE EM 'CANCELAR'

9 - crie 1 if para verificar se o submit é o "confirmaexclusao". se sim,

(use isset, por exemplo),

execute a instrução SQL:
"delete from lixo where id=$idselecionado";

 

após o q, use a instrução dispare 1 comando "header location"

p/ 1 pg html simples que exibe a mensagem
"registro excluído com sucesso"
e links p/ outras páginas.

10 - se não (else), instrução "header location" para ir a 1 outra pag
sem apagar nada.

ATENÇÃO: isso é 1 roteirinho simplicíssimo;
o ideal é vc usar tb "sessions" (sessões)
p/ autenticar o usuário, assim, só irá apagar 1 registro quem
realmente tiver poderes p/ isso, ok?

exemplos c/ PDO:

pg seleciona

<?php
$pdo = new PDO("mysql:host=localhost;dbname=XXXXX", "root", "");
$rs = $pdo->query("SELECT * FROM lixo");

while($row = $rs->fetch(PDO::FETCH_OBJ)){
echo $row->id . " - ".$row->nome;
?>
 - <a href="delete-com-pdo.php?id=<?php echo $row->id; ?>">Excluir<br /></a>
<?php
}
?>

pg delete-com-pdo:

<?php
$con = new PDO('mysql:host=localhost;dbname=XXXXXXX', 'root', '');
$id=$_GET['id'];
$stmt = $con->prepare("select * from lixo where id=?");
$stmt->bindParam(1, $id);
$stmt->execute();
while($reg = $stmt->fetch(PDO::FETCH_OBJ)){
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>exibe registro selecionado</title>
</head>

<body>
ATENÇÃO: AO CLICAR EM 'CONFIRMAR EXCLUSÃO' OS DADOS SERÃO APAGADOS DEFINITIVAMENTE;<br />
CASO NÃO DESEJE REALMENTE APAGAR ESSE DADOS, CLIQUE EM 'CANCELAR'<br>

<form name="form1" method="post" action="">
<label>
  <input type="text" name="aniv" value="<?php echo $reg->id;?>">
  </label>
  <br>
  <label>
  <input type="text" name="nome" value="<?php echo $reg->nome;?>">
  </label>
  <br>
  <br>
  <label>
  <input type="submit" name="confirmaexclusao" value="Confirmar exclusão">
  </label>
  <label>
  <input type="submit" name="cancela" value="Cancelar">
  </label>
</form>
<?php
}
$confirma=$_POST['confirmaexclusao'];
$cancela=$_POST['cancela'];
if(isset($confirma))
{
$stmt2 = $con->prepare("delete from lixo where id=?");
$stmt2->bindParam(1, $id);
$stmt2->execute();
header("Location: confirma-exclusao.html");
}

elseif(isset($cancela)){
header("Location: cancelada.html");
}

?>
</body>
</html>

corrija o nome do bd e crie as pgs confirma-exclusao.html e cancelada.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde!

 

Bom galera desculpem a demora em porstar, mas consegui resolver o problema. Bastava trocar essa linha:

 

<a href="?nome=<?php echo $d->current()->nome;?>&ac=del">Excluir

 

por essa:

 

<a href="?pg=Exc_clientes&id=<?php echo $d->current()->codigo ?>&ac=del">Deleta

 

A culpa do nã funcionamento era dos ? (pontos de interrogação) que eu estava utilizando, dessa forma não conseguia concatenar as URL's.

 

Agradeço a ajuda de todos.

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.