Ir para conteúdo
Fórum Script Brasil
  • 0

Mysql affected rows retorna 0 após DELETE FROM


brunocasado

Pergunta

Galera, to com um problema, criei uma classe a qual roda uma função que deleta determinado tipo de registro do banco de dados, e todas as minhas verificações, eu costumo utilizar o mysql affected rows para gerar uma mensagem.

Pois bem nessa mesma classe tenho uma outra função de dar um insert que funciona perfeitamente.

Porém ao deletar um registro usando minha função, ele deleta perfeitamente o registro mas o mysql_affected_rows retorna 0. Vo postar o código.

bd.php

....
function delRecord($tbl, $where, $value){
    
    $sql = "DELETE FROM " . $tbl . " WHERE " . $where . " = " . $value;  
    $query = mysql_query($sql) or die(mysql_error());
    $success = mysql_affected_rows();
    echo $success;
        if($success ==true){
            $this->msg = "Registro excluído com sucesso!";
            
        }
Agora pedaço que chama a função
<?php 
        import_request_variables('gp','_');
        $con = db_connect();
        $campaigns = new bd();
        $campaigns -> query("campanhas");
        
        
        if(isset($_action)){
            if($_action=="del"){
                $campaigns->delRecord("campanhas",$_where,$_campaign);
                
                echo $campaigns->msg;
                
            }
        }
 .........

Aparentemente está correta não esta?

Editado por brunocasado
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Olá Bruno,

eu testei seu código (claro que tirei as classes e coloquei no modo tradicional) e aqui funcionou perfeitamente... aconselho a você depurar a seguinte linha:

$sql = "DELETE FROM " . $tbl . " WHERE " . $where . " = " . $value;

verifique se está passando a variável $value;

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Igor,

quando eu mantive essa linha echo $success;, realmente aparece o valor 0, mas quando eu excluo aparece o valor 1... eu não sei como está seu código... mas eu coloquei da seguinte forma, veja:

if($acao = "excluir"){ // Observe essa linha

$sql_del = "DELETE FROM testes WHERE id_teste = '" . $id. "'";

$query = mysql_query($sql_del) or die(mysql_error());

$success = mysql_affected_rows();

echo $success;

if($success ==true){

$msg = $success. " Registro excluído com sucesso!";

}

}

Observe que eu coloquei uma condicional... porque ela busca do seguinte link:

$sql = mysql_query("SELECT * FROM testes");

while($mt = mysql_fetch_object($sql)){

?>

<br><?=$mt->teste;?><a href="?acao=excluir&id=<?=$mt->id_teste;?>">Excluir</a><br>

<?php }?>

...em outras palavras.. quando ele lê a variável $acao...você atualiza a variável $success e o valor 0 passa a ser 1...

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

deu não cara....

c liga como está minha função:

function delRecord($tbl, $value){

$sql = "DELETE FROM " . $tbl . " WHERE id=" . $value;

$query = mysql_query($sql) or die(mysql_error());

$success = mysql_affected_rows();

if($success){

$this->msg = "Registro excluído com sucesso!";

}

}

}

Agora a parte que chama a funcao

<script type="text/javascript">

function delCampaign(id_campaign){

if(confirm("Voce tem certeza que deseja excluir este registro?")){

loc = window.location = "./?action=del&campaign="+id_campaign;

window.open(loc,'_self');

}

}

</script>

<?php include "../../config/config.php"; ?>

<?php include "../../classes/bd.php"; ?>

<?php include "../../classes/treat.php"; ?>

<?php

import_request_variables('gp','_');

$con = db_connect();

$campaigns = new bd();

$campaigns -> query("campanhas");

if(isset($_action)){

if($_action=="del"){

$campaigns->delRecord("campanhas",$_campaign);

echo $campaigns->msg;

}

}

?>

<a href="../preview/?camp_ID=<?php echo $results['id_session']; ?>">[Visualizar]</a>[Alterar] <a href=java script:void(0)" onclick="java script:delCampaign(<?php echo $results['id]; ?>)">[Deletar]</a>[Enviar][Estatisticas]</td>

Link para o comentário
Compartilhar em outros sites

  • 0

beleza... estamos chegando lá....

tente assim: (observe na linha em negrito de seu link...

if($action == "del"){

function delRecord($tbl, $value){

$sql = "DELETE FROM " . $tbl . " WHERE id=" . $value;

$query = mysql_query($sql) or die(mysql_error());

$success = mysql_affected_rows();

if($success){

$this->msg = "Registro excluído com sucesso!";

}

}

}

}

<script type="text/javascript">

function delCampaign(id_campaign){

if(confirm("Voce tem certeza que deseja excluir este registro?")){

loc = window.location = "./?action=del&campaign="+id_campaign;

window.open(loc,'_self');

}

}

</script>

<a href="../preview/?camp_ID=<?php echo $results['id_session']; ?>">[Visualizar]</a>[Alterar] <a href=java script:void(0)" onclick="java script:delCampaign(<?php echo $results['id]; ?>)">[Deletar]</a>[Enviar][Estatisticas]</td>

Bruno... eu editei a minha resposta... tente novamente...

abraços

Editado por Anarquista
Link para o comentário
Compartilhar em outros sites

  • 0

cara o problema não está ai, ele chega a deletar..... deve ta com algum bug no affected rows.

Estou usando import_request_variables('gp','_');

Por isso verifico $_action == 'del';

ou seja até ai está tudo normal.... o problema que ao deletar o registro não retorna o No de linhas afetadas.

Sei lá to achando que é algum bug. tipo liguei o note hj, ai logo que abri meu navegador e mandei deletar ele conseguiu trazer 1 linha deletada, ai eu dei pulo de alegria e quando fui faze mais um teste novamente deu pau, não achou a linha afetada. :(. Tenta por favor usar as classes e funçoes.

Link para o comentário
Compartilhar em outros sites

  • 0

entendo... sinceramente não trabalhei com import_request_variables('gp','_');...mas li sobre ele no manual... ainda defendo a teoria de você isolar essa função com essa condicional... independente se você usa o import_request_variables('gp','_');... eu só tive a visualização de uma função e do link em seu código... não sei o que vem depois e nem sei como está sua classe...por isso fica dificil eu tentar definir sobre classes e/ou métodos... mas tente depurar suas querys e verificar seu error_reporting no seu PHP.INI... assim você verá que tipo de erro está acontecendo...

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

certo olha ai... a pagina que chama a função:

<?php $title = "Sistema Newsletter - Campanhas"; ?>
<?php $adicionalHeaders = "
"; ?>
<?php 
include "../../layout/header.php";
include "../../layout/body.php";
include "../../layout/top.php";
?>
<!-- Start Container -->
<script type="text/javascript">
function delCampaign(id_campaign){
    
    if(confirm("Voce tem certeza que deseja excluir este registro?")){
    
    loc = window.location = "./?action=del&campaign="+id_campaign;
    window.open(loc,'_self');
    }

}

</script>
<?php include "../../config/config.php"; ?>
<?php include "../../classes/bd.php"; ?>
<?php include "../../classes/treat.php"; ?>
    <?php 
        import_request_variables('gp','_');
        $con = db_connect();
        $campaigns = new bd();
        $campaigns -> query("campanhas");
        
        
        if(isset($_action)){
            if($_action=="del"){
                $campaigns->delRecord("campanhas",$_campaign);
                
                echo $campaigns->msg;
                
            }
        }

    ?>
        <div id="bar_control"><a href="add.php">[Adicionar]</a> </div>
         
        <table cellpadding="3" cellspacing="3" width="100%">
            <tr>
                <td>ID</td>
                <td>Campanha</td>
                <td>Cria&ccedil;&atilde;o</td>
                <td>Situa&ccedil;&atilde;o</td>
                <td>Data da Cria&ccedil;&atilde;o</td>
                <td>A&ccedil;&otilde;es</td>                                    
            </tr>
            <?php 
            while($results = mysql_fetch_array($campaigns->sql)){
        if($results['ativo']==1){$status = "Pendente";}elseif($results['ativo']==2){$status = "Enviado";}else{$status = "Cancelado";}
        
        $date = new treat;
        $newDate = $date->formatDate('-', $results['data_criacao']);
            
            ?>
            <tr>
                <td><?php echo $results['id'];?> </td>
                <td><?php echo $results['nome_campanha'];?> </td>
                <td><?php echo $results['id_usuario'];?> </td>
                <td><?php echo $status; ?> </td>
                <td><?php echo $newDate ?> </td>
                <td><a href="../preview/?camp_ID=<?php echo $results['id_session']; ?>">[Visualizar]</a>[Alterar] <a href="java script:void(0)" onclick="java script:delCampaign(<?php echo $results['id']; ?>)">[Deletar]</a>[Enviar][Estatisticas]</td>
            <tr>    
<?php
}



?>
        </table>
       
<?php db_disconnect($con);?>

<!-- finish Container -->

<?php
include "../../layout/bottom.php";
?>
agora a classe bd e suas funcoes:
<?php 
class bd{
    
    function query($tbl){
        
    $this->sql = mysql_query("SELECT * FROM " . $tbl) or die(mysql_error());
                
    }    
    
    function insertInto($tbl,$values, $msg, $feedback = false, $page = false){
    
    $query = "INSERT INTO " . $tbl . " VALUES " . "(" . $values . ")"; 
    $run = mysql_query($query) or die(mysql_error());
    $success = mysql_affected_rows();
        if($success){
            if($feedback){
                $msg .= "<br />Voc&ecirc; ser&aacute; redirecionado &agrave;s campanhas em 3 segundos. Caso n&atilde;o aconte&ccedil;a,  <a href='$page'>Clique aqui</a>";
                echo '<meta http-equiv="refresh" content="3;URL=/pages/campaigns/" /> '; 
            }
            echo $msg;    
        }
    }

    function noDuplicate($tbl,$field,$value, $msgD){
        
        $query = $this->query($tbl . " WHERE " . $field . "=" ."'" . $value . "'");
        $rows = mysql_num_rows($this->sql);
        if($rows >0){
            echo $msgD;
            return false;
        }else{return true;}
    }
    
    function delRecord($tbl, $value){
    
    $sql = "DELETE FROM " . $tbl . " WHERE id=" . $value;  
    $query = mysql_query($sql) or die(mysql_error());
    $success = mysql_affected_rows();
        if($success){
            $this->msg = "Registro excluído com sucesso!";
            
        }
    }
}



?>

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal negócio é o seguinte, comesei a colocar o endereço manualmente na URL simulando um clique no botão aonde chama a função javascript que por sua vez passa para a função em php a ID da campaign.

Pois bem, se eu mando as variaveis pelo javascript ele deleta mas não retorna as linhas afetadas. se eu coloco diretamente na URL ele funciona perfeitamente. Estou usando a funcao:

<script type="text/javascript">

function delCampaign(id_campaign){

if(confirm("Voce tem certeza que deseja excluir este registro?")){

loc = window.location = "./?action=del&campaign="+id_campaign;

window.open(loc,'_self');

}

}

</script>

Será que é um problema de url passada?

EDIT: RESOLVIDO GALERA. OLHA SÓ

Estava vendo uma alternativa para abrir links com javascript e fui consultar o w3schols aonde tinha indicado um código usando essa função que criei acima.

PORÉM, NÃO SE PODE USAR WINDOW.LOCATION E DEPOIS WINDOW.OPEN POIS ELE ACABA TENTANO ABRIR 2 VEZES A PAGINA, E ERA ISSO QUE ESTAVA ACONTECENDO. RETIREI O WINDOW.OPEN DA FUNÇÃO ÀCIMA E FUNCIONAL PERFEITAMENTE!

Editado por brunocasado
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...