Jump to content
Sign in to follow this  
klsofts

upload de arquivos:

Recommended Posts

Fala pessoal,[/size]

 

Tenho 14 anos e estou tentando criar um serviço de hospedagem de arquivos(assim como mediafire e 4shared), mas o sistema esta permitindo uploads maiores do que os valores que defini e não consigo encontrar o erro.[/size]

 

O seguinte arquivo include pega as informações sobre quanto espaço o usuário tem disponível:[/size]

<?php

include "connect.inc";

$un = $_COOKIE["un"];
$pw = $_COOKIE["pw"];

$upid = $_COOKIE["upid"];

$sql = "SELECT SUM(size) AS size FROM files WHERE ownerid='$upid'";

$action = mysqli_query($con,$sql);



$files = "SELECT * FROM files WHERE ownerid='$upid'";

$action2 = mysqli_query($con,$files);

$all = mysqli_num_rows($action2);

$accspace = "SELECT * FROM users WHERE id='$upid'";

$nquery = mysqli_query($con,$accspace);

$result2 = mysqli_fetch_assoc($nquery);

$accsize = $result2["fspace"];

while ($result = mysqli_fetch_assoc($action)) {
	
	$used = $result["size"] / 1048576;

	$space = $accsize - $used;
	

}

?>

E o arquivo que realmente faz o upload é o seguinte:[/size]

<?php

include "cookies.inc";
include "connect.inc";
include "space.inc";

$status = $_GET['s'];

$file_name = $_FILES['arq']['name'];
$file_size = $_FILES['arq']['size'];
$file_type = $_FILES['arq']['type'];

$real_fsize = $file_size;

if($status != "ly"){

	header('Location: upload.php');

}

if (isset($_POST['stat'])) {
	
	$privacy = "private";

} else {

	$privacy = "public";

}

$destiny = 'users/files/';

$future_file = $destiny.$file_name;

if($space < $real_fsize) {


	echo 'O tamanho do arquivo excede o limite para sua conta.<br>';
	echo '<a href="upload.php">Voltar</a>';

}

if(file_exists($future_file)){

		echo 'Arquivo '. $file_name .' ja existe.<br>';
		echo '<a href="upload.php">Voltar</a>';

	} 

if(move_uploaded_file($_FILES['arq']['tmp_name'], $future_file)){


	$sql = "INSERT INTO files (name,size,state,ownerid,url) VALUES ('$file_name','$real_fsize','$privacy','$upid','$future_file')";
	$query = mysqli_query($con,$sql);

	header('Location: $future_file');

} else {

	echo 'Algum erro ocorreu durante o upload.<br>';
	echo '<a href="upload.php">Voltar</a>';

}

?>

Alguém pode me dizer o que há de errado?suspeito que isto se deva ao fato das informações relativas a espaço(bytes,mb) estarem como decimal no BD mas não sei se isto esta causando o problema ..[/size] [/size]

Share this post


Link to post
Share on other sites

No arquivo que faz o upload dê um echo assim:

echo "$space < $real_fsize";

Veja o que aparece, pois em nenhum lugar ali você definiu o $space.

Share this post


Link to post
Share on other sites

Sua idade não interfere

Além do que o ESerra ja citou

 

tem algumas coisas estranhas pra mim

  • seu primeiro SQL (quanto um usuário já usou de espaço) só vai retornar uma linha, então pra que usar um while na linha 30?
  • você nao usa a variavel $all
  • se o id da tabela é um inteiro pra que por aspas na variavel?
  • pra que você usa essa consulta SELECT * FROM files WHERE ownerid='$upid' ?

 

linha 10

te da o total ja USADO

linha 22

te da o LIMITE que pode usar linha 28

 

LIVRE = LIMITE - USADO < você pôs isso num loop!?

Share this post


Link to post
Share on other sites

ESerra:

 

Fiz isto e a variável space retornou 0.0029029846191406, o que deixa isto mais estranho porque defini, para minha conta, um espaço de 400mb. Estou pensando em refazer tudo, devo ter cometido algum erro de conversão ou cálculo. Eu tenho o site no ar hospedado e também tem um "erro", ele mostra o espaço disponível da seguinte forma: Espaço utilizado:2.8610229492188E-6/2mb.

 

Você acha que eu ter salvo bytes e mb como decimal no BD pode estar causando isto? porque vejo que a parte que libera ou não o upload do arquivo com base no espaço disponível ta ok:

if($space < $real_fsize) {


	echo 'O tamanho do arquivo excede o limite para sua conta.<br>';
	echo '<a href="upload.php">Voltar</a>';

}

if(file_exists($future_file)){

		echo 'Arquivo '. $file_name .' ja existe.<br>';
		echo '<a href="upload.php">Voltar</a>';

	} 

if(move_uploaded_file($_FILES['arq']['tmp_name'], $future_file)){


	$sql = "INSERT INTO files (name,size,state,ownerid,url) VALUES ('$file_name','$real_fsize','$privacy','$upid','$future_file')";
	$query = mysqli_query($con,$sql);

	

} else {

	echo 'Algum erro ocorreu durante o upload.<br>';
	echo '<a href="upload.php">Voltar</a>';

} 

Electronic

Então cara, em relação aos loops eu usei porque senão da erro quando eu tento exibir(tipo quando tenta exibir array), a variável $all eu utilizo em outra página pois o space.inc e o connect.inc, como nome já diz são includes.

 

 

pra que você usa essa consulta SELECT * FROM files WHERE ownerid='$upid' ?

esta parte eu uso pra contar os arquivos de um determinado usuário(a variável $upid tá num include de cookies). Eu acho que, como já disse, estou fazendo algum cálculo de forma incorreta ou fiz cagada na hora de criar o banco de dados.

Atualização:

zipei os arquivos do site que estava no host, se acharem melhor todo o código esta no seguinte link(download direto): http://pixelfiles.esy.es/Archive.zip

Share this post


Link to post
Share on other sites

Fala Electronic,

agradeço por toda ajuda que você vêm me dando, como "solicitou" ai vão a estruturas das duas tabelas do BD:

 

Tabela Files:

files.png

E a tabela de usuários:

files2.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By Leandro Volanick
      Boa tarde pessoal.
       
      Gostaria de uma ajuda em uma consulta sql, onde quero agrupar os todos produtos comprados pelo mesmo CPF, dentro de uma array. 
       
      Segue o que estou usando:
      $data=mysqli_query($mysqli, "SELECT xml.id, xml.xProd as produto, prod.id as iddoproduto, GROUP_CONCAT( prod.xProd ) FROM produtos AS prod LEFT JOIN xml as xml ON xml.xProd = prod.xProd GROUP BY xml.CPFdest"); while($info=mysqli_fetch_array($data)) echo '['.$info['iddoproduto'].'],'; No momento, o codigo está trazendo apenas 1 produto, quero que ele printe todos produtos que o CPFdest já comprou.
       
       
    • By Vítor Gonçalves
      Boa Tarde, gostaria se alguém poderia me ajudar!
      tenho um sistema desktop que é validado a cada 6 meses, quando termina essa validade ele pedi para renovar!
      - desejo criar um script em PHP  com a seguinte função:
      -pegar a senha gerada no sistema e enviar para o servidor web( hostinger server-sql) via php
      - o servidor gera e mostra uma contra senha  para ser copiada de volta.
      - ao colar a contra senha no campo "nova licença" no meu programa, ele compara com a que tá no banco de dados na hostinger se bate a mesma e libera o uso.
       
      - já vi isso em outro sistema mas não tive acesso aos scripts para ver como funciona.
    • By Anonicah
      Olá preciso de ajuda com esse exercício. Montei até a parte de formulário + validação de javascrip no dreamweaver mas buguei com o resto. O que eu fiz:
       

      <html>
      <head>
      <title> Formulário CPF validado com Java Script </title>
          
          <script language="javascript" type="text/javascript">
      function validar() {
      var cpf = form1.cpf.value;
          
      if (cpf == "") {
      alert('Preencha o campo com seu cpf');
      form1.cpf.focus();
      return false;
      }
          
      }
      </script>
          
          
      </head>
      <body>
      <form name="form1" action="enviar.php" method="post">
      CPF:
      <input name="cpf" type="text"><br /><br />
      <input type="submit"  onclick="return validar()">
      </form>
      </body>
      </html>
       
       
      EXERCÍCIO
      Criar um formulário simples em html com um único campo CPF;
      Fazer uma validação em javascript antes de fazer o post;
      Consumir o WS https://bi.vidaclass.com.br/utils para consultar informações do CPF enviado pelo form;
      Do retorno obtido exibir na tela:
      Nome, email, telefone
      Se tem compra em saude: Sim | Não
      Quantas compras: (5) ex.
      Se tem farma: Sim | Não
      Se tem dependente: Sim | Não
      Qtd. de dependentes: (2) ex.

      Obtem o token para consumir os endpoints;
      https://bi.vidaclass.com.br/auth
      {
          "company_id": 1,
          "username": "webmaster@vidaclass.com.br",
          "password": "Teste20170705"
      }
      Endpoint para consultar o CPF
      https://bi.vidaclass.com.br/utils
      {
          "action": 4,
          "key": {
              "cpf": 25383193820
          }
      }
    • By Luciano Marques
      Então pessoal é o seguinte: Estou tendo problemas para impedir acesso simultâneo no meu projeto. Foi depois de muito pesquisar que vim aqui abrir esse tópico. 
      Enfim, eu até consegui colocar uma teoria em prática que era a de criar uma coluna na tabela `usuarios` com 1 para ativo, e 2 para  inativo. e depois coloquei no topo a condição IF para se 1 já preenchido não permite o login. até ai de boa. o problema vem se o usuário não desloga só fecha a janela. a coluna ainda permanece como ativa 1. mesmo expirando o login, não ocorre o update na base de dados. Se alguém puder me ajudar nessa, preciso concluir esse trabalho ainda essa semana. desde já agradeço 
    • By paulojk
      Como faço essa funçao alguem sabe? Depos que o usuario clica no botao so libera depois de um determinado tempo.
       


×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.