1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Inserção dupla

Discussão em 'Web Development' iniciada por _deXter, 21 de Setembro de 2008. (Respostas: 4; Visualizações: 758)

  1. _deXter

    _deXter Power Member

    Viva,

    Tenho um problema... Ao inserir dados (coisas simples numa bd) está a acontecer que os dados são introduzidos em duplicados... Alguém sabe o que poderá estar a acontecer? Lembrei-me que talvez pudesse ser por haver várias ligações abertas à mesma bd?

    Confesso que como comecei há pouco tempo a trabalhar com PHP/MySQL não sei muito bem quando deve fazer close de uma conexão... Por exemplo, quando se segue uma hiperligação a ligação à bd continua aberta? Deve desligar-se? Se me poderem dar um breve esclarecimento sobre isso, agradeço. =)
     
  2. duffy

    duffy Power Member

    Se metesses o código era mais simples, mas não estás a usar querystrings e a fazer um redirect depois do insert, que pode gerar um novo insert?
     
  3. _deXter

    _deXter Power Member

    Bem, vou colocar aqui mais info para ver se o pessoal me consegue ajudar... Já me estou a passar com isto. Lol

    É o seguinte, o que eu tenho é um form para introduzir uma imagem e as tags, depois é feito um preview à imagem e confirmada ou não a colocação da imagem no site, ou seja, a introdução na bd de um link para a imagem e noutra tabela das tags associadas.

    Tenho os seguintes files:

    - index.php:
    Código:
    <?php
        include "functions.php";
        include "session.php";
        include "header.php"; 
        include "ok.php";
    ?>
    
    <center>
    <?php
        if ($_SESSION['logged'] == TRUE)
            include "upload.php";
        else
            echo "<form action='index.php' method='POST' enctype='multipart/form-data'>
                      <input type='password' name='pass' /><br /><br />
                     <input type='image' src='../upload-server-32x32.png' width='32' height='32'>  
                 </form>";
    ?>
    </center>
    
    <?php include "list.php"; ?>
    <?php include "footer.php"; ?>
    - upload.php
    Código:
    <?php //include "functions.php"; ?>
    
    <script language="javascript" type="text/javascript">  
    function checarform()  
    {  
        if (document.img.tags.value=='')  
        {  
            alert('Mete uma Tag, são de borla!');  
            return false;  
        }  
        else  
            return true;  
    }  
    </script>
    
    <center>
    <?php 
        if ($_GET['preview'] == "ok")
        {
            //LigarBD();
            $total = MotsTotal(1);
            
            $mot_URL = MoveFileImgs($total);
            if ($mot_URL != NULL)
            {
                echo "Preview:<br />";
                echo "<img src='".$mot_URL."' align='center'><br />";
                
                $tags = base64_encode($_POST['tags']);
                $uploadpath = base64_encode($mot_URL);
                
                echo 
                "<form name='conf' id='conf' action='index.php?tags=$tags&up=$uploadpath' method='POST' enctype='multipart/form-data'>
              <input type='submit' value='Confirmar' />
              </form>
                 <form name='cancel' id='cancel' action='index.php' method='POST' enctype='multipart/form-data'>
              <input type='submit' value='Cancelar' />
              </form>";
            }
        }
        
        else 
        { 
            echo 
            "<form name='img' id='img' action='index.php?preview=ok' method='POST' enctype='multipart/form-data' onsubmit='return checarform();'>
              <p>Imagem: <input type='file' name='file'>
              </p>
              <p>
                Tags: <br>
                <input type='text' name='tags' id='tags'><br>
            </p>
            
                  <input type='submit' value='Ok' />
            </form>";
        }
    ?>
    <p><a href="index.php?session=off">Encerrar sess&atilde;o!</a></p>
    </center>
    - ok.php:
    Código:
    <p align="center">
    <?php
        //$ok = LigarBD();
        
        $total = MotsTotal(1);
            
        if ($_GET['up'] != '')
        {
            $uploadfile = base64_decode($_GET['up']);
            $sql = "INSERT INTO infos (Link,Data) VALUES ('$uploadfile',NOW())";
            $resultado = mysql_query($sql);
            
            $tags = explode(' ', base64_decode($_GET['tags']));
            $ntags = count($tags);
            for ($i = 0; $i < $ntags; $i++)
                AdicionarTag($total, $tags[$i]);
                    
            echo '<strong>Imagem adicionada com sucesso!</strong>';
            echo '<br /><br /><br /><strong>A redireccionar... </strong>';
        }
    ?>
    </p>
    Portanto.. Funciona assim, escolhe-se a imagem, tags e tal... Depois ele faz o preview através do "upload.php" e depois faz a inserção na bd através do ok.php. Curiosamente, logo a seguir a fazer a inserção da imagem, ou seja quando aparece "Imagem adicionada com sucesso" não aparece em duplicado, mas ao actualizar o site, já lá está mais uma cópia na bd... Não percebo. :S
     
    Última edição pelo moderador: 23 de Setembro de 2008
  4. krunch

    krunch Power Member

    Algumas sugestoes:
    Substitui o include por require_once.
    Codigo que acede à BD deve estar em funcoes e nao em "cascata" no codigo - para melhor debug e simplicidade do codigo.

    O que queres dizer com "actualizar o site"?
    Não é refresh do post, pois não? :)

     
  5. _deXter

    _deXter Power Member

    Actualizar o site é mesmo algo como inserir de novo o url, por exemplo.

    Aparentemente, a inserção duplicada na bd demora mais algum tempo (cerca de um segundo) e daí que na primeira listagem depois do upload ele não liste em duplicado... Só que quanto se actualiza o site, já está em duplicado.
     

Partilhar esta Página