Nick-pc 0 Denunciar post Postado Janeiro 29, 2010 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
Claudeci Goularte 0 Denunciar post Postado Janeiro 29, 2010 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
Nick-pc 0 Denunciar post Postado Janeiro 29, 2010 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
Nick-pc 0 Denunciar post Postado Janeiro 29, 2010 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
Claudiobrother 2 Denunciar post Postado Janeiro 29, 2010 Você testou o código que eu postei no outro tópico? Compartilhar este post Link para o post Compartilhar em outros sites
Nick-pc 0 Denunciar post Postado Janeiro 29, 2010 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
Nick-pc 0 Denunciar post Postado Janeiro 29, 2010 Você testou o código que eu postei no outro tópico? Sim, mas o formulário de confirmação está na mesma página. Compartilhar este post Link para o post Compartilhar em outros sites
Claudiobrother 2 Denunciar post Postado Janeiro 30, 2010 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
William Bruno 1501 Denunciar post Postado Janeiro 30, 2010 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
Claudiobrother 2 Denunciar post Postado Janeiro 30, 2010 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
Nick-pc 0 Denunciar post Postado Janeiro 30, 2010 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
Claudiobrother 2 Denunciar post Postado Janeiro 30, 2010 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
Nick-pc 0 Denunciar post Postado Janeiro 30, 2010 Por exemplo tem como utilizar essa configuraçãoes abaixo para receber de um formulário de método POST? Compartilhar este post Link para o post Compartilhar em outros sites
Claudiobrother 2 Denunciar post Postado Janeiro 30, 2010 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
Nick-pc 0 Denunciar post Postado Janeiro 30, 2010 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
Nick-pc 0 Denunciar post Postado Janeiro 31, 2010 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
Nick-pc 0 Denunciar post Postado Janeiro 31, 2010 Já resolvi, para vereficar se o checkbox está marcado eu fiz uma vereficação de formulário usando o Spry. Compartilhar este post Link para o post Compartilhar em outros sites
Claudiobrother 2 Denunciar post Postado Janeiro 31, 2010 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