View Full Version : Ajuda PHP - apagar entrada em base de dados


bmccruz
07-04-2008, 17:12
Boas!

É o seguinte estava a tentar escrever um código em php para apagar determinada entrada na base de dados.
Funciona da seguinte forma: tenho uma tabela com todas as entradas e depois um botão de delete para cada uma delas que abre delete.php, que terá um parte de confirmação antes de proceder a remoção dessa entrada.
É ai que tenho problemas em fazer isto funcionar, deixo aqui o código do delete.php para que alguém me possa ajudar. Obrigado desde já.

<?php
include 'library/config.php';
include 'library/opendb.php';
$id = $_GET['id'];


if(isset($_POST['submit'])){

$sql = "DELETE FROM content WHERE id=$id";
$result = mysql_query($sql) or die(mysql_error());
header("Location: teste.php");
}

else
{
header("Location: teste2.php");
}


print "<form method='post'>";

print "<input type='hidden' name='id' value='$id'>";

print "Tem a certeza?";

print "<input type='submit' name='submit' value='Remover'></form>"

include 'library/closedb.php';
?>

anjo2
07-04-2008, 17:19
Tens um parêntesis a mais. Podias explicar o que faz cada include e como tens isso configurado.

bmccruz
07-04-2008, 17:57
o config.php tem os dados para aceder a base de dados como: o server, login,....
o opendg.php faz a ligação
o closedb.php fecha a ligação


O link traz o $id que ele vai buscar e vai fazer o delete desse id. É suposto é ter essa cena de confirmação para segurança antes de os dados serem apagados aparecer essa form e que ao submeter então ai sim vai apagar naquela table o id que já vem detrás.



Qual é o ( que está a mais?

Serrot
07-04-2008, 19:03
Tens que ser um pouco mais específico.
Qual é o erro que está a dar ??


Parece-me que te falta as plicas em $sql = "DELETE FROM content WHERE id=$id";
devia estar:

$sql = "DELETE FROM content WHERE id='$id'";
ou
$sql = "DELETE FROM content WHERE id='" . $id . "'";

para alem disto só dizendo qual é o erro.


Tb convem utilizares algo mais seguro que
$id = $_GET['id'];
penso que assim estás sujeito a mysql injection

bmccruz
08-04-2008, 11:27
o problema é que a página fica em branco

como posso pôr isto a mostrar os erros?

hostmake
08-04-2008, 11:45
mas apagou?

mete isto no inicio da página: error_reporting(E_ALL);


faz um echo ao POST.
faz um if dps do delete para verificar se o mysql_affected_rows é maior que 0, tens que ir fazendo testes.
não sei bem qual é o problema

nosf
08-04-2008, 13:52
Boas!

É o seguinte estava a tentar escrever um código em php para apagar determinada entrada na base de dados.
Funciona da seguinte forma: tenho uma tabela com todas as entradas e depois um botão de delete para cada uma delas que abre delete.php, que terá um parte de confirmação antes de proceder a remoção dessa entrada.
É ai que tenho problemas em fazer isto funcionar, deixo aqui o código do delete.php para que alguém me possa ajudar. Obrigado desde já.

<?php
include 'library/config.php';
include 'library/opendb.php';
$id = $_GET['id'];


if(isset($_POST['submit'])){

$sql = "DELETE FROM content WHERE id=$id";
$result = mysql_query($sql) or die(mysql_error());
header("Location: teste.php");
}

else
{
header("Location: teste2.php");
}


print "<form method='post'>";

print "<input type='hidden' name='id' value='$id'>";

print "Tem a certeza?";

print "<input type='submit' name='submit' value='Remover'></form>"

include 'library/closedb.php';
?>

1º Atenção ao metodo q usas para passa valores da form para a pagina...

Na form:
print "<form method='post'>"; <--------- Estas a usar o POST

Quando tentas receber o valor da form:
$id = $_GET['id']; <------- Estas a usar o GET

Tens que usar POST nos 2 sitios...

2º Falta-te o action na form...

hostmake
08-04-2008, 13:59
o action não é necessário, ele faz POST no SELF.

agora $_GET e $_POST também é possível, mas não nesse caso.
corrige o que o nosf disse.

nosf
08-04-2008, 14:05
o action não é necessário, ele faz POST no SELF.

agora $_GET e $_POST também é possível, mas não nesse caso.
corrige o que o nosf disse.

Não gosto de deixar parametros omitidos, porque na maior parte das vezes em que reutilizares o código, já lá estão prontos a ser utilizados. :P

hostmake
08-04-2008, 15:32
Não estamos a desenvolver as nossas plataformas aqui, até porque eu não faço sempre os mesmos passos, crio classes e ponto final :P