Inserção dupla

_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. =)
 
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?
 
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?

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:
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? :)

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
 
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.
 
Back
Topo