Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

kenny

[Resolvido] Botao Delete nao funciona

Mensagens Recomendadas

kenny

Boas a todos.

Sou muito principiante em PHP e resolvi ir a net buscar um código para apagar registo na base de dados através de checkbox.

Não funciona muito bem. Ou seja o botao faz o submit mas nao apaga a linha.

<form action="" method="post" name="form">
TABELA
<?php
 while($row = mysql_fetch_assoc($query)){
 ?>
<?php echo row[1] ?>
<?php echo row[2] ?>
<?php echo row[3] ?>
<?php echo row[4] ?>
<input type="checkbox" name="unban[]" id="checkbox[]" value="<? echo $row['1']; ?>">
<input name="unban" type="submit" id="unban" value="unban">
if(isset($_POST['unban'])){
$checkbox = $_POST['checkbox'];
for($i=0;$i<count($_POST['checkbox']);$i++){
$del_id = $checkbox[$i];
$query = "DELETE FROM table_name WHERE row='$del_id'";
print $query;
$result = dbquery($query);}
if($result){echo "<meta http-equiv=\"refresh\" content=\"0;URL=indext.php\">";}}
?>

</form>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

$query = "DELETE FROM table_name WHERE row='$del_id'";  // ?
print $query;
$result = dbquery($query); // ?

Tens um campo na tabela que se chama row ???


$query = "DELETE FROM table_name WHERE row='$del_id'"; // o campo chama-se row ???

mysql_query($query); // troca o dbquery por isto

Tb sou principiante mas acho esse código muito confuso e mal estruturado (pelo menos para mim)

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kenny

<table bgcolor='#FFFFFF' width='90%' align='center'>
<form action="" method="post" name="form">
<tr align='center' class='font' bgcolor='#0000FF'>
    <td width='1%' style='white-space: nowrap' title='SteamID ou IP'>SteamID ou IP</td>
<td width='1%' style='white-space: nowrap' title='Tempo'>Tempo</td>
<td width='7%' style='white-space: nowrap' title='Data de UnBan'>Data de UnBan</td>
<td width='1%' style='white-space: nowrap' title='Razao'>Razao</td>
<td width='10%' style='white-space: nowrap' title='Admin'>Admin</td>
<td width='1%' style='white-space: nowrap' title='Delete'>Delete</td>

    <?php
while($bans = mysql_fetch_assoc($portfolio)){
?>


    <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['steamid']; ?></b></td>
    <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['banlength']; ?></b></td>
    <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['unbantime']; ?></b></td>
    <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['reason']; ?></b></td>
        <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['admin_name']; ?></b></td>

        <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"><input type="checkbox" name="unban[]" id="checkbox[]" value="<? echo $bans['steamid']; ?>"></td>
        </tr>
if(isset($_POST['unban'])){
$checkbox = $_POST['checkbox'];
for($i=0;$i<count($_POST['checkbox']);$i++){
$del_id = $checkbox[$i];
$query_bans = "DELETE FROM advanced_bans WHERE steamid='$del_id'";
$result = mysql_query($query_bans);}
if($result){echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";}}

tá assim mas mesmo assim nao funcionou

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

tira o $result =

e o form = delete

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Em vez de checkbox coloca via link para testar ...

echo'<td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center">
 <a href="xxx.php?steamid='.$bans['steamid'].'">'.$bans['steamid'].'</a></td>';

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
foreach ($_POST['unban'] as $value) {
 $value = (int)$value;
 if ($value != 0)
   $query_bans = "DELETE FROM advanced_bans WHERE steamid = '{$value}'";
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kenny

Isso aparece o campo steamid com hiperligação e nao faz nada pois nao corre a funçao para apagar.

<table bgcolor='#FFFFFF' width='90%' align='center'>
<form action="" method="post" name="form">
<tr align='center' class='font' bgcolor='#0000FF'>
<td width='1%' style='white-space: nowrap' title='SteamID ou IP'>SteamID ou IP</td>
<td width='1%' style='white-space: nowrap' title='Tempo'>Tempo</td>
<td width='7%' style='white-space: nowrap' title='Data de UnBan'>Data de UnBan</td>
<td width='1%' style='white-space: nowrap' title='Razao'>Razao</td>
<td width='10%' style='white-space: nowrap' title='Admin'>Admin</td>
<td width='1%' style='white-space: nowrap' title='Delete'>Delete</td>
</tr>
<?php
while($bans = mysql_fetch_assoc($portfolio)){
?>
    <tr>
    <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['steamid']; ?></b></td>
    <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['banlength']; ?></b></td>
    <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['unbantime']; ?></b></td>
    <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['reason']; ?></b></td>
        <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['admin_name']; ?></b></td>

        <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"><input type="checkbox" name="unban[]" id="checkbox[]" value="<? echo $bans['steamid']; ?>"></td>
        </tr>
        <?php } ?>
</tr>
</table>

if(isset($_POST['unban'])){
$checkbox = $_POST['checkbox'];
foreach ($_POST['unban'] as $value) {
$value = (int)$value;
if ($value != 0)
$query_bans = "DELETE FROM advanced_bans WHERE steamid = '{$value}'";
}}

Sem sucesso na mesma :(

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

$query_bans = "DELETE FROM advanced_bans WHERE steamid = '{$value}'";

}}

O teu código termina aqui falta-te o mysql_query($x)

* * *

Testaste em forma de link ?

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kenny

Testei com um form para adicionar e ficou assim.

<table bgcolor='#FFFFFF' width='90%' align='center'>
<form action="" method="post" name="form">
<tr align='center' class='font' bgcolor='#0000FF'>
<td width='1%' style='white-space: nowrap' title='SteamID ou IP'>SteamID ou IP</td>
<td width='1%' style='white-space: nowrap' title='Tempo'>Tempo</td>
<td width='7%' style='white-space: nowrap' title='Data de UnBan'>Data de UnBan</td>
<td width='1%' style='white-space: nowrap' title='Razao'>Razao</td>
<td width='10%' style='white-space: nowrap' title='Admin'>Admin</td>
<td width='1%' style='white-space: nowrap' title='Delete'>Delete</td>
</tr>
<?php
while($bans = mysql_fetch_assoc($portfolio)){
?>
 <tr>
 <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['steamid']; ?></b></td>
 <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['banlength']; ?></b></td>
 <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['unbantime']; ?></b></td>
 <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['reason']; ?></b></td>
	 <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"> <b><?php echo $bans['admin_name']; ?></b></td>

	 <td style="border-bottom: 1px solid #000;border-left: 1px solid #000;" align="center"><input type="checkbox" name="unban" id="checkbox" value="<? echo $bans['steamid']; ?>"></td>
	 </tr>
	 <?php } ?>
</tr>
</table>
<table width='1%' style="margin: 0; background: none; border: 0;">

</form>
<form method="post">
<table>
<tr>
<td>Nome:</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td>SteamID ou IP</td>
<td><input type="text" name="steamid" /></td>
</tr>
<tr>
<td>Tempo</td>
<td><input type="text" name="banlength" /></td>
</tr>
<tr>
<td>Razao</td>
<td><input type="text" name="reason" /></td>
</tr>
<tr>
<td>Admin</td>
<td><input type="text" name="admin_name" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="add" value="add" /></td>
</tr>
<tr>
 <td> </td>
 <td><input type="submit" name="unban" value="unban" /></td>
 </tr>
</table>
<?php
if (isset($_POST['add']))
{
 $name=$_POST['name'] ;
 $steamid= $_POST['steamid'] ;
 $tempo=$_POST['banlength'] ;
 $razao=$_POST['reason'] ;
 $admin=$_POST['admin_name'] ;
dbquery("INSERT INTO `advanced_bans`(name,steamid,banlength,reason,admin_name)
VALUES ('$name','$steamid','$tempo','$razao','$admin')");

	 echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
	 }

if(isset($_POST['unban'])){
$checkbox = $_POST['checkbox'];
foreach ($_POST['unban'] as $value) {
$value = (int)$value;
if ($value != 0)
dbquery("DELETE FROM `advanced_bans` WHERE steamid = '{$value}'");
echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
}}
?>
</form>

O add tá a funcionar o unban ainda nao está :/

deu me os seguintes erros:

Invalid argument supplied for foreach()
Undefined index: checkbox

Editado por kenny

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

coloca @ antes da variável

@$checkbox = $_POST['checkbox'];

ou

$checkbox = (isset($_POST['checkbox'])) ? $_POST['checkbox'] : FALSE ;

Mas não percebi a razão do foreach no unban .... e a razão de usares o mesmo form para inserir e eliminar

Pois para a eliminação basta saber o ID (steamID) do objecto a eliminar

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Mas não percebi a razão do foreach no unban ....

ele tem uma tabela (e muito mao código tanto PHP como HTML) co uma lista de checkboxes com o nome "unban[]"

o que ele irá receber será um array com o valor de cada um desses checkboxes.

logo, para eliminar os seleccionados, é necessário uma ciclo de verificação de cada um dos valores.

nota : o código que eu apresentei é um exemplo para resolver o problema, se o OP não quer perceber e fazer copy-paste cego, o problema é dele ...

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kenny

ele tem uma tabela (e muito mao código tanto PHP como HTML) co uma lista de checkboxes com o nome "unban[]"

o que ele irá receber será um array com o valor de cada um desses checkboxes.

logo, para eliminar os seleccionados, é necessário uma ciclo de verificação de cada um dos valores.

nota : o código que eu apresentei é um exemplo para resolver o problema, se o OP não quer perceber e fazer copy-paste cego, o problema é dele ...

Boas como eu disse no primeiro post sou muito iniciante em PHP nao é preciso chamar nomes as pessoas.

Já tentei com o código que mandou e sem efeito na mesma.

nao sei se o problema é do input do checkbox ou da funçao para apagar os dados na BD.

o input estou a tentar desta forma

<input name="checkbox[]" value="<?php echo $bans['steamid']; ?>" type="checkbox" id="checkbox[<?php echo $bans['steamid']; ?>]" />

e a função já tentei de várias maneiras e agora está assim:

if(isset($_POST['unban'])){
$checkbox = $_POST['checkbox'];
foreach ($_POST['checkbox'] as $value) {
 $value = (int)$value;
 if ($value != 0)
dbquery("DELETE FROM `advanced_bans` WHERE steamid = '{$value}'");
echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
}}

@N3lson agora tentei como me disse também.

if(isset($_POST['unban'])){
$checkbox = (isset($_POST['checkbox'])) ? $_POST['checkbox'] : FALSE ;
foreach ($_POST['checkbox'] as $value) {
 $value = (int)$value;
 if ($value != 0)
dbquery("DELETE FROM `advanced_bans` WHERE steamid = '{$value}'");
echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
}}

E ainda nao funciona também.

EDIT: Não dá erros nenhuns mas nao apaga nada ainda.

Editado por kenny

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Boas como eu disse no primeiro post sou muito iniciante em PHP nao é preciso chamar nomes as pessoas.

aqui ninguem chamou nomes a ninguem ... se és iniciante, quanto muito deverias saber que tens muito para aprender

Já tentei com o código que mandou e sem efeito na mesma.

o código que foi apresentado foi para o post que continha este HTML:

<input type="checkbox" name="unban[]" id="checkbox[]" value="<? echo $bans['steamid']; ?>">

que como podes ver, o nome dado aos elementos são : unban[]

coisa que alteraste posteriormente por alguma razão. no entanto, continuas com a seguinte verificação no teu código:

if(isset($_POST['unban'])){ // <-------------------------------------------------------------------------
 $checkbox = $_POST['checkbox'];
 foreach ($_POST['checkbox'] as $value) {
   $value = (int)$value;
   if ($value != 0)
     dbquery("DELETE FROM `advanced_bans` WHERE steamid = '{$value}'");
   echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
 }
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kenny

Pois tenho muito aprender e é isso que tou a tentar nao se aprende assim em 2 dias.

Já tentei de várias maneiras e mesmo assim sem sucesso nenhum.

Está assim os 2 HTML:

Este a caixa do checkbox

<input type="checkbox" name="unban[]" id="checkbox[]" value="<? echo $bans['steamid']; ?>">

O botão para fazer o submit:

<input name="unban[]" type="submit" id="unban[]" value="Unban">

Função assim:

if(isset($_POST['unban[]'])){  //  <----------------------------------- dizia assim ?
 $checkbox = $_POST['checkbox'];
 foreach ($_POST['checkbox'] as $value) {
$value = (int)$value;
if ($value != 0)
  dbquery("DELETE FROM `advanced_bans` WHERE steamid = '{$value}'");
echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
 }
}

Desculpem a minha ignorância mas nao sei o que estou a errar mesmo.

@Nelson esse código dá me erros

Undefined variable: $delete e o $count

E também não me está a funcionar. :(

Mais uma vez desculpem.

Editado por kenny

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

primeiro, altera o atributo name do botao submit para algo como : do_unban. o nome unban[] é para as checkboxes

segundo, estas a fazer um foreach para um array com o nome checkbox ? porque não fazes como te disse ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kenny

Mesmo assim nao me funcionou e pus assim na checkbox :

<input type="checkbox" name="unban[]" value="<? echo $bans['steamid']; ?>">

O botão alterei e ficou assim:

<input name="do_unban" type="submit" value="Unban">

if(isset($_POST['do_unban'])){
 $checkbox = $_POST['unban'];
foreach ($_POST['unban'] as $value) {
 $value = (int)$value;
 if ($value != 0)
$query_bans = "DELETE FROM advanced_bans WHERE steamid = '{$value}'";
echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
 }
}

Mesmo assim nao me está a funcionar :confused:

Não estou a conseguir entender o porque.

Editado por kenny

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kenny

Se não te estiver a apagar nenhum registo, verifica se fizeste tudo o que o @HappyHippyHippo disse. Se só estiver a apagar um registo, é por causa do refresh que estás a fazer dentro do ciclo.

O código postado na minha ultima mensagem tem os passos todos que o @HappyHippyHippo me mandou fazer mas nao me está a funcionar e nao consigo ver o porque ...

O que está na minha ultima mensagem tem que funcionar assim ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kenny

Boas a todos desculpem mais uma vez o mesmo incomodo.

Mas agora fiz de maneira diferente em vez de checkbox meti botao para apagar.

O que estou a fazer mal ??

Botao:

<input type="submit" name="unban" id="$bans[steamid]" value="Apagar"/>

Função:

if ($_POST['unban']){	// Da-me erro nesta linha
$delete = $_POST['unban'];
$query = "DELETE from advanced_bans where steamid ='$delete'";
$result = dbquery($query);

  	 echo "Ban apagado com Sucesso";
  	 }

Erro:

Undefined index: unban

Não sei o que fazer mais.

Já tentei de várias maneiras.

Ajudem por favor.

EDIT:

Erro corrigido :

Troquei isto:

if ($_POST['unban'])

por isto:

if (isset($_POST['unban']))

Agora aparece me a frase a dizer que foi apagado com sucesso mas nao apaga o que estará mal a query ?

Editado por kenny

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Mostra o código do form completo

tens de ter um input que leva o id, estás a usar esta instrução correctamente steamid ='$delete' ?

Faz um echo á query e vê o k aparece

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
oxyzero

if(isset($_POST['do_unban'])){
 $checkbox = $_POST['unban'];
foreach ($_POST['unban'] as $value) {
 $value = (int)$value;
 if ($value != 0)
$query_bans = "DELETE FROM advanced_bans WHERE steamid=$value";
 }
 echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
}

Hmmn, não percebo o porquê de teres (int)$value, porque para o PHP é indiferente se o id é 1 ou "1". Mas pronto, isso são outras questões e opiniões.

Porque estás a definir isto: $checkbox = $_POST['unban']; se não estás a usar a variável $checkbox? Talvez a quisesses usar no foreach? Isto não influencia, mas pronto.

Esse código não apaga nenhuma linha, pela simples razão de não estar a ser executado.

Além disso, logo no primeiro resultado, estás a ordenar à página para fazer refresh com: echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";

Testa este código assim, e acima de tudo, a segura-te que estás a receber o valor correto, experimenta fazer var_dump(variavel); die(); - Sendo a variavel que queiras testar.

if(isset($_POST['do_unban'])){
 $checkbox = $_POST['unban'];
foreach ($_POST['unban'] as $value) {
 $value = (int)$value;
 if ($value != 0){
$query_bans = "DELETE FROM advanced_bans WHERE steamid =$value";
$result = mysql_query($query_bans);
}
echo "<meta http-equiv=\"refresh\" content=\"0;URL=ban_edit.php\">";
 }
}

Ou usa aquela tua função dbquery(); em vez do mysql_query(); como preferires.

Botao:

<input type="submit" name="unban" id="$bans[steamid]" value="Apagar"/>

Função:

if ($_POST['unban']){	// Da-me erro nesta linha
$delete = $_POST['unban'];
$query = "DELETE from advanced_bans where steamid ='$delete'";
$result = dbquery($query);

	echo "Ban apagado com Sucesso";
	}

Tu estás a fazer delete à steamid='unban'; E esse unban não é um steamid válido. Mas ele executa a query, mas como não existe nenhum "unban" ele dá o seu trabalho por concluído e continua a código.

o $_POST['unban'] tem o valor de unban, porque é esse o name que lhe deste no HTML. O POST recebe o name, não o id do input.

Editado por oxyzero

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Usa as ferramentas de utilizador e coloca como Resolvido


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.