Ir para conteúdo

POWERED BY:

Arquivado

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

Nick-pc

[Resolvido] Não excluir registro

Recommended Posts

Estou usando o Dreamweaver e meu problema é que não estou conseguindo apagar registro por checkboxs.

 

Primeiro criei um novo conjunto de registros, completei assim:

"

.Nome: RsCheckboxDeleteLink

.Conexão: "ip"

.Tabela: "ip_menuadmin"

.Coluna: 'Tudo'

.Filtro: "ma_id" > "=" > "Variável de formulário" > -- checkbox

 

"

 

Ok ...

 

Eu criei um novo "Excluir Registro", lá preenchi:

"

.Primeiro verifique se a variável está definida: "Variável de formulário" -- checkbox

.Conexão: "ip"

.Tabela: "ip_menuadmin"

.Coluna da chave primária: "ma_id"

.Valor de chave primária: "Variável de formulário" -- ma_id

.Após a exclusão, vá para: checkbox_delete.php?checkbox_menu=sucesso

 

"

 

OK ...

 

Parte do código (registros.php)

<table border="0" cellpadding="3" cellspacing="3">
      <form id="form1" name="form1" method="post" action="checkbox_delete.php">
        <tr>
          <th><input type="checkbox" id="checkAll" />
          <span class="style1">ID</span></th>
          <th class="style1">Nome</th>
          <th class="style1">Link</th>
        </tr>
        <?php do { ?>
          <tr>
            <td><input type="checkbox" name="checkbox[]" value="<?php echo $row_RsListaMenu['ma_id']; ?>" />
            <?php echo $row_RsListaMenu['ma_id']; ?></td>
            <td><?php echo $row_RsListaMenu['ma_label']; ?></td>
            <td><?php echo $row_RsListaMenu['ma_value']; ?></td>

          </tr>
          <?php } while ($row_RsListaMenu = mysql_fetch_assoc($RsListaMenu)); ?>
        <tr>
          <td><input type="submit" name="submit" id="submit" value="Excluir" /></td>
          <th> </th>
          <th> </th>
        </tr>
      </form>
    </table>

Página de exclusão com botão Confirmar e Cancelar (checkbox_delete.php)

<?php require_once('conexao/conexao/ip.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

if ((isset($_POST['ma_id'])) && ($_POST['ma_id'] != "") && (isset($_POST['checkbox']))) {
  $deleteSQL = sprintf("DELETE FROM ip_menuadmin WHERE ma_id=%s",
                       GetSQLValueString($_POST['ma_id'], "int"));

  mysql_select_db($database_ip, $ip);
  $Result1 = mysql_query($deleteSQL, $ip) or die(mysql_error());

  $deleteGoTo = "admin_menu_checkbox_delete.php?checkbox_menu=sucesso";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $deleteGoTo));
}

$colname_RsCheckboxDeleteLink = "-1";
if (isset($_POST['checkbox'])) {
  $colname_RsCheckboxDeleteLink = $_POST['checkbox'];
}
mysql_select_db($database_ip, $ip);
$query_RsCheckboxDeleteLink = sprintf("SELECT * FROM ip_menuadmin WHERE ma_id = %s", GetSQLValueString($colname_RsCheckboxDeleteLink, "int"));
$RsCheckboxDeleteLink = mysql_query($query_RsCheckboxDeleteLink, $ip) or die(mysql_error());
$row_RsCheckboxDeleteLink = mysql_fetch_assoc($RsCheckboxDeleteLink);
$totalRows_RsCheckboxDeleteLink = mysql_num_rows($RsCheckboxDeleteLink);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Excluindo</title>
<style type="text/css">
<!--
#form1 {
	text-align: center;
}
.style1 {
	color: #C33;
	font-weight: bold;
	font-size: 16;
	text-align: center;
}
.style2 {
	text-align: center;
}
.style1 {
	font-weight: bold;
}
-->
</style>
</head>

<body>
<?php
if($_GET['checkbox_menu'] == "sucesso") { ?>
<p class="style1"> Sucesso!!!</p>
<p class="style2"><a href="javascript:window.opener.location='admin_menu.php';close();" title="Fechar e autualizar">Fechar</a></p>
<?php } else { ?>
<table width="400" border="0">
  <tr>
    <td>Apagando o(s) link(s) do checkbox(s) selecionado(s) (<strong> <?php echo $row_RsCheckboxDeleteLink['ma_label']; ?> </strong>)</td>
  </tr>
  <tr>
    <td><form id="form1" name="form1" method="post" action="admin_menu_checkbox_delete.php?checkbox=<?php echo $row_RsCheckboxDeleteLink['ma_id']; ?>">
      <input name="ma_id" type="hidden" id="ma_id" value="<?php echo $row_RsCheckboxDeleteLink['ma_id']; ?>" />
      <input type="button" name="Cancelar" id="Cancelar" value="Cancelar" onclick="javascript:window.close()" />
      <input type="submit" name="Submit" id="Submit" value="Confirmar" />
    </form></td>
  </tr>
</table>
<?php } ?>
</body>
</html>
<?php
mysql_free_result($RsCheckboxDeleteLink);
?>

Quando aperto em no botão Excluir em registros.php sou direcionado para a página de exclusão e ao apertar no em Confirmar não exclue o registro do checkbox selecionado, apenas muda de URL (../checkbox_delete.php?checkbox=). O que está ocorrendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geralmente faço assim para excluir por checkbox.

 

1º Passo: Gero o formulário com todos os registros que preciso, um checkbox para cada registro assim:

<input type="checkbox" name="opcoes_excluir[]" value="<?=$id_do_registro?>"  /> 

2º Passo: Ao dar o submit no form, eu pego os valores do checkbox utilizando foreach do PHP assim:

 

foreach($_POST['opcoes_excluir'] as $ids_excluir){
	mysql_query("DELETE FROM `nome_table` WHERE id_campo='".$ids_excluir."'")ro die('erro');
}

Desta forma, o foreach pegará somnte os checkbox's marcados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A menssagem de erro na página:

Warning: Invalid argument supplied for foreach() in /.../.../.../.../checkbox_delete.php on line 34

 

Código editado (checkbox_delete.php)

... <?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

foreach($_POST['checkbox'] as $ids_excluir){        
        mysql_query("DELETE FROM `ip_menuadmin` WHERE ma_id='".$ids_excluir."'")or die('erro');
		}

$colname_RsCheckboxDeleteLink = "-1";
if (isset($_POST['checkbox'])) {
  $colname_RsCheckboxDeleteLink = $_POST['checkbox'];
}
mysql_select_db($database_ip, $ip);
$query_RsCheckboxDeleteLink = sprintf("SELECT * FROM ip_menuadmin WHERE ma_id = %s", GetSQLValueString($colname_RsCheckboxDeleteLink, "int"));
$RsCheckboxDeleteLink = mysql_query($query_RsCheckboxDeleteLink, $ip) or die(mysql_error());
$row_RsCheckboxDeleteLink = mysql_fetch_assoc($RsCheckboxDeleteLink);
$totalRows_RsCheckboxDeleteLink = mysql_num_rows($RsCheckboxDeleteLink);
?> ...

Linha 34; linha que começa o código foreach.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já arrumei;

 

... if(is_array($_POST['checkbox']))
				   {
foreach($_POST['checkbox'] as $ids_excluir){        
        mysql_query("DELETE FROM `ip_menuadmin` WHERE ma_id='".$ids_excluir."'")or die('erro');
		}
}
else
{      
        mysql_query("DELETE FROM `ip_menuadmin` WHERE ma_id='".$ids_excluir."'")or die('erro');
} ...

E quando vou tentar excluir um ou mais checkboxs selecionados não aparece se deseja cancelar ou donfirmar exclusão. Só mostra uma página em branco com a menssagem "erro".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se refiz o código corretamente mas agora aparece o formulario para cancelar e confirmar registro.

... if(is_array($_POST['checkbox'])) 
{
foreach($_POST['checkbox'] as $ids_excluir){
if ((isset($_POST['ma_id'])) && ($_POST['ma_id'] != "") && (isset($_POST['checkbox']))) {        
  $deleteSQL = sprintf("DELETE FROM `ip_menuadmin` WHERE ma_id='".$ids_excluir."'",
		               GetSQLValueString($_POST['ma_id'], "int"));
  
  mysql_select_db($database_ip, $ip);
  $Result1 = mysql_query($deleteSQL, $ip) or die(mysql_error());
  
  $deleteGoTo = "admin_menu_checkbox_delete.php?checkbox_menu=sucesso";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: $ids_excluir", $deleteGoTo));
 }		
}	
} ...

 

E não exclue nada so muda a URL (checkbox_delete.php?checkbox_menu=).

 

Nem o valor do nome do registro aparece em "Apagando o(s) link(s) do checkbox(s) selecionado(s) ( VAZIO )".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, mas o formulário de confirmação está na mesma página.

 

Porque complicar uma coisa tão simples Nick?

 

Vou postar o mesmo código, mas em páginas separadas.

Daí você compara os códigos dos meus dois posts pra ver o que foi alterado para

poder ser utilizado da forma que você precisa (isso ajuda no aprendizado).

 

registros.php onde serão listados os registros para seleção

<?php
require_once('conexao/conexao.php');

//Selecionando a base de dados.
mysql_select_db($database_ip, $ip)or die('Erro ao selecionar a tabela'.mysql_error($ip));

//Selecionamos os registros que serão ou não excluídos do banco de dados
$selecao = mysql_query("SELECT * FROM ip_menuadmin")or die('Erro na consulta SQL'.mysql_error($con));

/*Veremos se a consulta retornou algum registro com a função, mysql_num_rows...
se sim, ou seja, se for diferente de 0 o número de registros, ele tras os dados encontrados, 
através de um loop WHILE.*/
if(mysql_num_rows($selecao) != 0) : 
       echo "<form name=\"exclusao\" method=\"post\" action=\"checkbox_delete.php\">";   

       while($ver = mysql_fetch_row($selecao)){
               echo "<input type=\"checkbox\" name=\"excluir[]\" value=\"{$ver[0]}\" /> {$ver[0]} <br />";
       }

       echo "<input type=\"submit\" name=\"ok\" value=\"Excluir\" />\n";
       echo "<input type=\"hidden\" name=\"checkbox\" value=\"excluir\" />\n</form>";

       //Limpamos a memória ocupada pela consulta com o free_result. mysql_free_result($selecao);
       mysql_free_result($selecao);
endif;
?>

 

 

checkbox_delete.php onde serão excluidos os registros selecionados

<?php
require_once('conexao/conexao.php');

//Selecionando a base de dados.
mysql_select_db($database_ip, $ip)or die('Erro ao selecionar a tabela'.mysql_error($ip));

//Verificamos se há POST.
if(isset($_POST['regCancelar']))
       header("Location: checkbox_delete.php?checkbox_menu=sucesso");

if(isset($_POST['regExcluir'])) :  
       $sql = " DELETE FROM `ip_paginas_delete` WHERE `ma_id` IN ({$_POST['registroExcluir']}) ";
       $query = mysql_query( $sql )or die( mysql_error() );
else :
       echo 'Você não selecionou nenhum check';
endif;
?>

<?php if((isset($_POST['checkbox'])) && ($_POST['checkbox'] == "excluir")) : ?>
<form id="contato" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
       <fieldset>
               <legend>Confirme ou cancele a exclusão </legend>
               <p>Você realmente deseja excluir os registros selecionados?</p>
               <br />
               <?php if( is_array($_POST['excluir']) ) { $ids = implode( ',', $_POST['excluir'] );} ?>
               <input type="hidden" name="registroExcluir" value="<?php echo $ids; ?>" />
               <input type="submit" name="regExcluir" value="Continuar" />
               <input type="submit" name="regCancelar" value="Cancelar" />                                                     
       </fieldset>
</form>
<?php endif; ?>

 

 

Testa aí pra ver se funciona. Se der algum erro é só postar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aqui não funciona muito bem:

<input type="submit" name="regExcluir" value="Continuar" />
                <input type="submit" name="regCancelar" value="Cancelar" />
na hora do submit, os 2 posts sempre vão existir..

 

por isso que geralmente tratamos essas diferenças com Javascript.. se você clicar no submit Cancelar, o Continuar também é enviado e vice-versa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian, obrigado pela observação!

 

Na verdade eu esqueci de colocar os submits em forms separados.

 

Assim acho que deve funcionar

checkbox_delete.php onde serão excluidos os registros selecionados

<?php
require_once('conexao/conexao.php');

//Selecionando a base de dados.
mysql_select_db($database_ip, $ip)or die('Erro ao selecionar a tabela'.mysql_error($ip));

//Verificamos se há POST.
if(isset($_POST['regCancelar']))
       header("Location: checkbox_delete.php?checkbox_menu=sucesso");

if(isset($_POST['regExcluir'])) :  
       $sql = " DELETE FROM `ip_paginas_delete` WHERE `ma_id` IN ({$_POST['registroExcluir']}) ";
       $query = mysql_query( $sql )or die( mysql_error() );
else :
       echo 'Você não selecionou nenhum check';
endif;
?>

<?php if((isset($_POST['checkbox'])) && ($_POST['checkbox'] == "excluir")) : ?>
<p>Você realmente deseja excluir os registros selecionados?</p>
<form id="contato" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
   <?php if( is_array($_POST['excluir']) ) { $ids = implode( ',', $_POST['excluir'] );} ?>
   <input type="hidden" name="registroExcluir" value="<?php echo $ids; ?>" />
   <input type="submit" name="regExcluir" value="Continuar" />
</form>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
   <input type="submit" name="regCancelar" value="Cancelar" />                                                     
</form>
<?php endif; ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu testei e funcinou corretamente, contudo no DreamWeaver CS4 quando vou cria um novo "Excluir registro" tem a opção de vereficar variável de formulário e entre outras coisas. Então mas não tem como usar essa opção para um formulário com método POST?

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigão, acabei não entendendo sua última dúvida.

Por favor explique melhor!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por exemplo tem como utilizar essa configuraçãoes para receber de um formulário de método POST?

 

É exatamente isso que está ocorrendo aqui. Repare no form que o método de envio é POST:

<form name=\"exclusao\" method=\"post\" action=\"checkbox_delete.php\">

 

O código de exclusão de registros só é executado se existir a variavel de formulário:

//Verificamos se existe a variável de formulário e se é de cancelamento.
//Se existir redirecionamos para a página que lista os registros
if(isset($_POST['regCancelar'])) :
   $cancelaGoTo = "checkbox_delete.php";
   if (isset($_SERVER['QUERY_STRING'])) :
       $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
       $deleteGoTo .= $_SERVER['QUERY_STRING'];
   endif;
   header(sprintf("Location: %s", $cancelaGoTo));
endif;

//Verificamos se existe a variável de formulário e se é de cconfirmação.
//Se existir executamos o query de exclusão de registros
if(isset($_POST['regExcluir'])) :  
   //Só serão excluidos os registros que estiverem com ID listados na variável de formulário "$_POST['registroExcluir']"
   $sql = " DELETE FROM `ip_paginas_delete` WHERE `ma_id` IN ({$_POST['registroExcluir']}) ";
   $query = mysql_query( $sql )or die( mysql_error() );

   //Depois de executado o código redirecionamos para a página de sucesso
   $deleteGoTo = "admin_menu_checkbox_delete.php?checkbox_menu=sucesso";
   if (isset($_SERVER['QUERY_STRING'])) :
       $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
       $deleteGoTo .= $_SERVER['QUERY_STRING'];
   endif;
   header(sprintf("Location: %s", $deleteGoTo));
else :
   echo 'Você não selecionou nenhum check';
endif;
?>

 

Entendeu melhor agora? Leu os comentários no código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudiobrother, valeu agora compreendi melhor só mais uma dúvida.

 

Códigos da página checkbox_delete.php

 

Porque quando pego o início desse código ...

<?php if((isset($_POST['checkbox'])) && ($_POST['checkbox'] == "excluir")) : ?>
...
<?php endif; ?>

... e coloco dentro dessa if o registro não é excluido apenas atualiza a página?

... if(isset($_POST['regExcluir']) && (isset($_POST['checkbox'])) && ($_POST['checkbox'] == "excluir")) : ...

Lembrando: tinha que colocar o echo para mostrar os checks selecinados na página.

<?php if( is_array($_POST['excluir']) ) { $ids = implode( ',', $_POST['excluir'] ); echo $ids; } ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um problema no código que não consegui resolver é a tag else, quando não seleciona nenhum checkbox. A menssagem "Você não selecionou nenhum check" aparece mesmo se selecionar a caixa de seleção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um problema no código que não consegui resolver é a tag else, quando não seleciona nenhum checkbox. A menssagem "Você não selecionou nenhum check" aparece mesmo se selecionar a caixa de seleção.

 

Desculpe, eu esqueci de colocar uma condicional. Veja:

//Verificamos se existe a variável de formulário e se é de cconfirmação.
//Se existir executamos o query de exclusão de registros
if(isset($_POST['regExcluir'])) :  
   //O código de exclusão só será executado se a variável de formulário não estiver vazia
   if(!empty($_POST['registroExcluir'])):
       //Só serão excluidos os registros que estiverem com ID listados na variável de formulário "$_POST['registroExcluir']"
       $sql = " DELETE FROM `ip_paginas_delete` WHERE `ma_id` IN ({$_POST['registroExcluir']}) ";
       $query = mysql_query( $sql )or die( mysql_error() );

       //Depois de executado o código redirecionamos para a página de sucesso
       $deleteGoTo = "admin_menu_checkbox_delete.php?checkbox_menu=sucesso";
       if (isset($_SERVER['QUERY_STRING'])) :
           $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
           $deleteGoTo .= $_SERVER['QUERY_STRING'];
       endif;
       header(sprintf("Location: %s", $deleteGoTo)); 
   else :
       echo 'Você não selecionou nenhum check';
   endif;
endif;
?>

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.