Form with $_files does not save the file in the site folders

Asked

Viewed 113 times

0

Hello my projector has a form where can be sent an image, it saves the form data in the BD but does not insert the image in the files. someone can tell where my mistake is?

<?php session_start();
include_once("../conexao.php");

$nome = $_POST["nome"];
$desc_vid = $_POST["desc_vid"];
$tempo = $_POST["tempo"];
$star_1 = $_POST["star_1"];
$star_2 = $_POST["star_2"];
$imagem = $_FILES['imagem']['name'];
$tags = $_POST["tags"];
$description = $_POST["description"];
$categoria_id = $_POST["categoria_id"];
$categoria_id2 = $_POST["categoria_id2"];
$categoria_id3 = $_POST["categoria_id3"];
$categoria_id4 = $_POST["categoria_id4"];
$categoria_id5 = $_POST["categoria_id5"];

// Local onde imagem vai ser salva
$_UP['pasta'] = '../../videos/thumb/';
// Tamanho da imagem
$_UP['tamanho'] = 1024*1024*100; //5Mb
// Exrensões permitidas
$_UP['extensoes'] = array('png', 'jpg', 'jpeg', 'gif');
// Renomear a imagem
$_UP['renomear'] = false;

// Tipos de erro de UpLoad do PHP
$_UP['erros'][0] = 'Não houve erro';
$_UP['erros'][1] = 'Imagem maior que o limite do php';
$_UP['erros'][2] = 'Imagem muito grande';
$_UP['erros'][3] = 'UpLoad da imagem feita parcialmente';
$_UP['erros'][4] = 'Erro no UpLoad da imagem';

// Verifica se houve algum erro
if($_FILES['imagem']['erros'] != 0){
    die("Não foi possivel fazer UpLoad, Erro: <br />". $_UP['erros'][$_FILES['imagem']['erros']]);
exit;
}

// Verifica qual a extensão
$img_nome = $_FILES['imagem']['name'];
$img_separador = explode('.', $img_nome);
$extensao = strtolower(end($img_separador));
//$extensao = strtolower(end(explode('.', $_FILES['imagem']['name'])));
if(array_search($extensao, $_UP['extensoes'])=== false){
echo "
<script type=\"text/javascript\">
    alert(\"Arquivo não compatível: png, jpg, jpeg e gif. \");
</script>
";
}
// Verifica o tamanho
else if ($_UP['tamanho'] < $_FILES['imagem']['size']){
    echo "Imagem muito grande, limite de 5Mb";
}
// Salva nos arquivos do site
else{
    //Verifica se deve trocar o nome da imagem
    if($_UP['renomear'] == true){
        // Cria nome Baseado no UNIX TIMESTAMP atual e com extensão
        $nome_final = time().'.jpg';
}else{
    // Mantem o nome da imagem
    $nome_final = $_FILES['imagem']['name'];
}
// Verifica se é possivel mover a imagem para a pasta escolhida
if(move_uploaded_file($_FILES['imagem']['tmp_name'], $_UP['pasta'].$nome_final)){
    // Upload efetuado com sucesso
    $nome = $conectar->real_escape_string($nome);
    $desc_vid = $conectar->real_escape_string($desc_vid);
    $tempo = $conectar->real_escape_string($tempo);
    $star_1 = $conectar->real_escape_string($star_1);
    $star_2 = $conectar->real_escape_string($star_2);
    $nome_final = $conectar->real_escape_string($nome_final);
    $tags = $conectar->real_escape_string($tags);
    $description = $conectar->real_escape_string($description);
    $categoria_id = $conectar->real_escape_string($categoria_id);
    $categoria_id2 = $conectar->real_escape_string($categoria_id2);
    $categoria_id3 = $conectar->real_escape_string($categoria_id3);
    $categoria_id4 = $conectar->real_escape_string($categoria_id4);
    $categoria_id5 = $conectar->real_escape_string($categoria_id5);

    $query = mysqli_query($conectar, "INSERT INTO videos (nome, desc_vid, tempo, star_1, star_2, imagem, tags, description, categoria_id, categoria_id2, categoria_id3, categoria_id4, categoria_id5, created) VALUES ('".$nome."', '".$desc_vid."', '".$tempo."', '".$star_1."', '".$star_2."', '".$nome_final."', '".$tags."', '".$description."', '".$categoria_id."', '".$categoria_id2."', '".$categoria_id3."', '".$categoria_id4."', '".$categoria_id5."', NOW())") or die(mysqli_error($conectar));
    echo "<META HTTP-EQUIV=REFRESH CONTENT = '0;URL= http://houseofcoin.com/xxx/administrativo.php?link=9'>
<script type=\"text/javascript\">
    alert(\"Cadastrado com Sucesso.\");
</script>
";
}else{
    // Falha no UpLoad
    $nome = $conectar->real_escape_string($nome);
    $desc_vid = $conectar->real_escape_string($desc_vid);
    $tempo = $conectar->real_escape_string($tempo);
    $star_1 = $conectar->real_escape_string($star_1);
    $star_2 = $conectar->real_escape_string($star_2);
    $tags = $conectar->real_escape_string($tags);
    $description = $conectar->real_escape_string($description);
    $categoria_id = $conectar->real_escape_string($categoria_id);
    $categoria_id2 = $conectar->real_escape_string($categoria_id2);
    $categoria_id3 = $conectar->real_escape_string($categoria_id3);
    $categoria_id4 = $conectar->real_escape_string($categoria_id4);
    $categoria_id5 = $conectar->real_escape_string($categoria_id5);

    $query = mysqli_query($conectar, "INSERT INTO videos (nome, desc_vid, tempo, star_1, star_2, tags, description, categoria_id, categoria_id2, categoria_id3, categoria_id4, categoria_id5, created) VALUES ('".$nome."', '".$desc_vid."', '".$tempo."', '".$star_1."', '".$star_2."',  '".$tags."', '".$description."', '".$categoria_id."', '".$categoria_id2."', '".$categoria_id3."', '".$categoria_id4."', '".$categoria_id5."', NOW())") or die(mysqli_error($conectar));
    echo "<META HTTP-EQUIV=REFRESH CONTENT = '0;URL= http://houseofcoin.com/xxx/administrativo.php?link=9'>
<script type=\"text/javascript\">
    alert(\"Cadastrado não Realizado.\");
</script>
";
}
}

/*$query = mysqli_query($conectar, "INSERT INTO videos (nome, desc_vid, tempo, star_1, star_2, imagem, categoria_id, tags, description, created) VALUES ('".$nome."', '".$desc_vid."', '".$tempo."', '".$star_1."', '".$star_2."', '".$nome_final."', '".$categoria_id."', '".$tags."', '".$description."', NOW())");
?>
<!DOCTYPE html>
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>
<?php
if (mysqli_affected_rows($conectar) != 0){
echo "<META HTTP-EQUIV=REFRESH CONTENT = '0;URL= http://houseofcoin.com/xxx/administrativo.php?link=9'>
<script type=\"text/javascript\">
    alert(\"Cadastrado com Sucesso.\");
</script>
";
}else {
echo "<META HTTP-EQUIV=REFRESH CONTENT = '0;URL= http://houseofcoin.com/xxx/administrativo.php?link=9'>
<script type=\"text/javascript\">
    alert(\"Cadastrado não Realizado.\");
</script>
";
}*/
?>

Form code

<div class="container" style="width: 100%">

<div class="page-header"><h1>Cadastrar</h1></div>
<div class="row">
    <div class="col-md-10">
<form class="form-horizontal" method="post" action="processa/proc_cad_vid.php" enctype="multipart/form-data">

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Título</label>
        <div class="col-sm-10">
            <input type="texto" class="form-control" name="nome" placeholder="Título do Vídeo">
        </div>
</div>

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Descrição</label>
        <div class="col-sm-10">
        <textarea class="form-control" rows="3" name="desc_vid" placeholder="Descrição do Vídeo"></textarea>
        </div>
</div>

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Tempo</label>
        <div class="col-sm-10">
            <input type="texto" class="form-control" name="tempo" placeholder="Tempo de Vídeo">
        </div>
</div>

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Star 1</label>
        <div class="col-sm-10">
            <input type="texto" class="form-control" name="star_1" placeholder="Star 1">
        </div>
</div>

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Star 2</label>
        <div class="col-sm-10">
            <input type="texto" class="form-control" name="star_2" placeholder="Star 2">
        </div>
</div>

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Imagem </label>
        <div class="col-sm-10">
            <input type="file" name="imagem" id="exampleInputFile">
        </div>  
</div>

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Tags</label>
        <div class="col-sm-10">
            <input type="texto" class="form-control" name="tags" placeholder="Tags">
        </div>
</div>

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Description</label>
        <div class="col-sm-10">
            <textarea class="form-control" rows="3" name="description" placeholder="Descrição que o Google Recebe"></textarea>
        </div>
</div>

<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Categoria 1</label>
        <div class="col-sm-10">
            <select class="form-control" name="categoria_id">
                <option>Selecione</option>
                <?php 
                    $resultado = mysqli_query($conectar, "SELECT * FROM categorias");
                while ($dados = mysqli_fetch_assoc($resultado)){
                    $dados = str_replace(" ","",$dados);
                ?>  
                <option value="<?php echo $dados['nome'];?>"><?php echo $dados['nome'];?></option>
                <?php } ?>
            </select>
        </div>
</div>
<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Categoria 2</label>
        <div class="col-sm-10">
            <select class="form-control" name="categoria_id2">
                <option>Selecione</option>
                <?php 
                    $resultado = mysqli_query($conectar, "SELECT * FROM categorias");
                while ($dados = mysqli_fetch_assoc($resultado)){
                    $dados = str_replace(" ","",$dados);
                ?>  
                <option value="<?php echo $dados['nome'];?>"><?php echo $dados['nome'];?></option>
                <?php } ?>
            </select>
        </div>
</div>
<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Categoria 3</label>
        <div class="col-sm-10">
            <select class="form-control" name="categoria_id3">
                <option>Selecione</option>
                <?php 
                    $resultado = mysqli_query($conectar, "SELECT * FROM categorias");
                while ($dados = mysqli_fetch_assoc($resultado)){
                    $dados = str_replace(" ","",$dados);
                ?>  
                <option value="<?php echo $dados['nome'];?>"><?php echo $dados['nome'];?></option>
                <?php } ?>
            </select>
        </div>
</div>
<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Categoria 4</label>
        <div class="col-sm-10">
            <select class="form-control" name="categoria_id4">
                <option>Selecione</option>
                <?php 
                    $resultado = mysqli_query($conectar, "SELECT * FROM categorias");
                while ($dados = mysqli_fetch_assoc($resultado)){
                    $dados = str_replace(" ","",$dados);
                ?>  
                <option value="<?php echo $dados['nome'];?>"><?php echo $dados['nome'];?></option>
                <?php } ?>
            </select>
        </div>
</div>
<div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Categoria 5</label>
        <div class="col-sm-10">
            <select class="form-control" name="categoria_id5">
                <option>Selecione</option>
                <?php 
                    $resultado = mysqli_query($conectar, "SELECT * FROM categorias");
                while ($dados = mysqli_fetch_assoc($resultado)){
                    $dados = str_replace(" ","",$dados);
                ?>  
                <option value="<?php echo $dados['nome'];?>"><?php echo $dados['nome'];?></option>
                <?php } ?>
            </select>
        </div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
  <button type="submit" class="btn btn-success">Cadastrar</button>
</div>
</div>
</form>
</div><br>
</div></div>

I have tried to put the $querry layer and force the error, but it does not insert any data. Thanks in advance.

  • Where does this variable come from $_UP? I am sure she is not a superglobal. Post also the form HTML.

  • pardon I thought it would not be important, editing now...

  • 1

    I’m not sure what happens, but you can try to debug the mysql answer like this $query = mysqli_query($conectar, "INSERT INTO videos ...") or die(mysqli_error($conectar));

  • he presented this error "You have an error in your SQL syntax; check the manual that Corresponds to your Mysql server version for the right syntax to use near’s"

  • Maybe we’re missing something from these variables.

  • escape? send? , I just did a test, if I type only text it records normal, but if I use "-" "[" "0" it presents this error, but all the BD fields are in varchar and the time registers "00:00" without problems, any idea?

  • Do as William replied.

Show 2 more comments

1 answer

1

Error must be occurring due to some quote with apostrophe ', this conflicts with the mysql apostrophes, because he thinks he closed a column, but then comes an inexperienced character.

To correct you can use mysqli_real_escape_string or Prepared Statements

Before executing the query with mysqli_real_escape_string, do this:

$nome = mysqli_real_escape_string($nome);
$desc_vid = mysqli_real_escape_string($desc_vid);
$tempo = mysqli_real_escape_string($tempo);
$star_1 = mysqli_real_escape_string($star_1);
$star_2 = mysqli_real_escape_string($star_2);
$nome_final = mysqli_real_escape_string($nome_final);
$categoria_id = mysqli_real_escape_string($categoria_id);
$tags = mysqli_real_escape_string($tags);
$description = mysqli_real_escape_string($description);

With Prepared statements should be something like:

/* create a prepared statement */
if ($stmt = mysqli_prepare($conectar, "INSERT INTO videos (nome, desc_vid, tempo, star_1, star_2, imagem, categoria_id, tags, description, created) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())")) {

    mysqli_stmt_bind_param($stmt, "s", $nome);
    mysqli_stmt_bind_param($stmt, "s", $desc_vid);
    mysqli_stmt_bind_param($stmt, "s", $tempo);
    mysqli_stmt_bind_param($stmt, "s", $star_1);
    mysqli_stmt_bind_param($stmt, "s", $star_2);
    mysqli_stmt_bind_param($stmt, "s", $nome_final);
    mysqli_stmt_bind_param($stmt, "s", $categoria_id);
    mysqli_stmt_bind_param($stmt, "s", $tags);
    mysqli_stmt_bind_param($stmt, "s", $description);
    mysqli_stmt_execute($stmt);

    mysqli_stmt_close($stmt);
}

/* close connection */
mysqli_close($link);

More details on http://php.net/manual/en/mysqli.prepare.php

  • Despite my ignorance related to php, I got !

  • @Éoronaldodll removed the acceptance of the answer for some particular reason?

  • did not solve the problem, with its answer improved, as now it saves the information in BD, but not yet saved the image

  • @Éoronaldodll occurs some error message after upload?

  • no, when I select the image, it appears from the footer loading the %, then I try to register, returns the msg that was registered... saves all the information in the BD, but does not save the image in the files

Browser other questions tagged

You are not signed in. Login or sign up in order to post.