输入数据两次


Entering data twice

我制作了一个php代码,用于在mysql上插入数据。

if(isset($_POST['submitted'])){
$img = NULL;
if(isset($_FILES['upload'])){
    include('classes/imagens.class.php');   
    $imagem = new imagem($_FILES['upload']['name'],$_FILES['upload']['tmp_name'],$_FILES['upload']['size'],$_FILES['upload']['error']);
            if($imagem->verifica_extensao($_FILES['upload']['type']) && $imagem->verifica_tamanho()){
                $erro = $imagem->upload();   
                $img = $imagem->getNome(); 
            }              
}
$trimmed = array_map('trim', $_POST); // usa a função trim() em todas as variáveis POST
$tit = $cat = $dat = $end = $des = $pr = $dono = $hor = FALSE; // atribui falso para as variaveis que poderão receber as variaveis POST
    $mysql = new mysql('eventos');
if(!empty($trimmed['nome'])){
    $tit = $mysql->escape_string($trimmed['nome']);
}
    if(!empty($trimmed['categoria'])){
    $cat = $mysql->escape_string($trimmed['categoria']);
}
    if(!empty($trimmed['data'])){
    $dat = $mysql->escape_string($trimmed['data']);
}
if($trimmed['hora'] != '--' && $trimmed['minuto'] != '--'){
            $hor = $trimmed['hora'].":".$trimmed['minuto'];
    $hor = $mysql->escape_string($hor);
}
if(!empty($trimmed['endereco'])){
    $end = $mysql->escape_string($trimmed['endereco']);
}
    if(!empty($trimmed['descricao'])){
    $des = $mysql->escape_string($trimmed['descricao']);
}
    if(!empty($trimmed['preco'])){
    $pr = $mysql->escape_string($trimmed['preco']);
}
    $dono = $_SESSION['user_id'];

   if($tit && $cat && $dat && $end && $des && $pr && $dono && $hor){
        $evento = new evento($tit, $cat, $end, $dat, $hor, $des, $pr, NULL, NULL, $img,$dono, NULL, NULL);
        $evento->cadastrar();
        echo '<h3>Evento cadastrado com sucesso!</h3>';
        echo "<a href=".BASE_URL."><h1>Clique aqui para voltar para a página inicial</h1></a>";
    exit();     
   }
    }   

和我的函数cadastrar()

function cadastrar(){
    $this->mysql->sql("INSERT INTO eventos (nome, categoria, data, endereco, descricao,ref_imagem,preco,user_id, hora, data_registro) VALUES ('$this->Titulo','$this->Categoria','$this->Data','$this->Endereco','$this->Descricao','$this->RefImagem','$this->Preco','$this->Dono','$this->Horario',NOW())");
}

和我的函数sql()

function sql($query){
            $this->connect();
            $this->query = $query;
            if(mysqli_query($this->dbc,$this->query)){
                    $linhas_afetadas = mysqli_affected_rows($this->dbc);
                    echo $query;
                    $this->result=mysqli_query($this->dbc,$this->query);
                    $this->disconnect();
                    $retorno = array($this->result,$linhas_afetadas);
                    return $retorno;
            } else {
                    die("Ocorreu um erro ao executar a Query SQL abaixo:<br>$query");
                    $this->disconnect();
            }
    }

而且。。。结果是表上有两个相同的列。

每次调用mysqli_query时,都会向数据库启动一个查询。你做了两次:

if (mysqli_query(...))
{
    ....
    $this->result = mysqli_query(...);
}

所以这就是为什么您最终会得到重复的数据。