Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BrunoBit

anti sql injection

Recommended Posts

Fala pessoal, bom dia, tudo joia por aí?

Esses dias eu li uma matéria/aula de um site que o @Gabriel Heming compartilhou com a gente aqui no fórum sobre sql injection, acredito que seja um dos melhores conteúdos explicativos sobre sql injection, vou deixar o link aqui pra vcs caso queiram ler também pq vale à pena pra quem quer formatar bem seu sql e proteger seu banco de injeções: https://phpdelusions.net/sql_injection

 

Gostaria de saber, como vocês fazem pra bloquear sql injection? Digo com relações à verificações antes de inserir qualquer coisa no sql, pq pelo o que entendi no artigo basicamente a sql injection acontece por má formatação do sql e por verificações erradas do conteúdo das variáveis, aí a pessoa de má fé explora essas más formatações.

Hoje tava fazendo uma conexão ao banco de dados e parei pra pensar nisso, com relação à verificações, em um primeiro momento saiu isso

    $business_name  = $_POST['business'];
    $name_business  = $_POST['txtuname'];
    $email_business = $_POST['txtemail'];
    $upass          = $_POST['txtpass'];
    $active_invoice = $_POST['ativar_fatura'];
    $price_business = $_POST['business_price'];
    $verify_variables = array($business_name,$name_business,$email_business,$upass,$active_invoice,$price_business);
    for($i = 0;$i < count($verify_variables);$i++){
        $verify_variables[$i]  = str_replace("=", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("'", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("`", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace(":", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace(";", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace(",", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("(", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace(")", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("\"", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("INSERT INTO", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("DELETE FROM", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("SELECT FROM", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("SELECT * FROM", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("SELECT *", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("DELETE * FROM", "", $verify_variables[$i]);
        $verify_variables[$i]  = str_replace("DELETE *", "", $verify_variables[$i]);
    }

Existe bastante discussão com relação às aspas simples ', como no caso de alguém com nome de Hanna O'hara, bastante comum nos estados unidos esse estilo de nome, mas aqui no Brasil acredito que quase ninguém tenha esse nome com aspas simples, a não ser se um gringo for utilizar.

Eu sinceramente ainda não sei utilizar 100% o htmlentities(), htmlspecialchars(), mysql_real_string_escape() e derivados pra fazer uma boa verificação assim que receber a variável, como os $_POST[''] lá em cima que estão tudo "pelado" sem nenhuma pré verificação com htmlentities, htmlspecialchar ou mysql_real_string_escape.

 

Como vocês fazem? O que vocês adicionariam ou removeriam nesse código que dei de exemplo? Ou se fariam completamente diferente.

 

Valeu rapaziada, abração pra vocês e fiquem com Deus.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muitos ORMs, que são camadas de abstrações de banco de dados, realizam essa proteção de forma bastante eficaz. Você pode encontrar vários projetos, como o Doctrine, Eloquent, TORM etc ou você pode utilizar a PDO que é nativa do PHP.

 

Como você já entende quais são os possíveis problemas que pode ter se não tiver um certo cuidado, fica fácil de entender como essas camadas de abstrações se previnem desse tipo de ataque. Sugiro que você escolha um e estude/utilize/teste pra entender como são realizadas essas prevenções.

 

Nada melhor que fuçar o código e/ou documentação :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu particularmente trabalho só com sistema interno, então essa não é um grande problema, mas pra previnir algum cara que se acha o hacker de fazer gracinha, ou algum operacional faça alguma coisa sem querer, eu uso duas ferramentas:

 

Classe GUMP -> Pra filtrar todos os inputs e integrar com meu framework de validação interno, essa classe aparentemente é muito boa e da pra extender facilmente.

 

PDO PHP -> para fazer as interações com o banco de dados.

 

Bem trabalhadas, elas devem oferecer uma segurança muito boa.

 

Ja a respeito do seu código, de forma mais básica eu importaria a classe GUMP e faria a sanitização:

 

<?php
$GUMP = new GUMP;
$post = $GUMP->sanitize($_POST);

$business_name  = $post['business'];
    $name_business  = $post['txtuname'];
    $email_business = $post['txtemail'];
    $upass          = $post['txtpass'];
    $active_invoice = $post['ativar_fatura'];
    $price_business = $post['business_price'];
  

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Dorian Neto show de bola, vou estudar essas que você citou, PDO eu vejo uma boa galera usando também, ainda to na fase da conexão mais "comum" e aprendendo ela, depois vou partir pro PDO também, obrigadão Dorian.

@AnthraxisBR vou dar uma fuçada nesse GUMP, baixei ele aqui e vou fazer uns testes seguindo o exemplo que você deu.

 

Valeu mesmo rapaziiada, pq esse negócio de segurança com o banco de dados faz a gente coçar a cabeça.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito simples, com infinidades de possibilidades....

 

expressão regular/ filtros/ tratamento de strings etc...

 

Mas só por dica deixar de usar SUPER-GLOBAL exemplo $_POST/$_GET etc... e principalmente $_SESSION

Compartilhar este post


Link para o post
Compartilhar em outros sites
13 minutos atrás, BrunoMs disse:

Bacana a dica @OmarF, no caso de deixar de usar as super global post, get e session, por qual função você substituiria elas?

 

Você não iria substituir, você iria passar por algum filtro, no exemplo que eu dei, foi o filtro do GUMP, mas existem muitos outros que também servem, da uma olhada:

 

https://www.w3schools.com/php/php_filter.asp

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnthraxisBR show de bola, agora entendi, ontem baixei o gump pra olhar e gostei bastante, vem com vários exemplos também. Preciso estudar classes agora pra compreender melhor a funcionalidade dele e adaptar nos meus códigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funções nativas do PHP para definir filtros:

Só com o uso desses filtros já se garante digamos 90% de segurança

Mais uma função de tratamento aqui e uma expressão regulá por alí digamos que se consegue 9% de segurança, sobrando 1%, porque nada é 100% seguro.

Spoiler

<?php

// Start of filter v.7.0.4-7ubuntu2

/**
 * (PHP 5 &gt;= 5.2.0, PHP 7)<br/>
 * Gets a specific external variable by name and optionally filters it
 * @link http://php.net/manual/en/function.filter-input.php
 * @param int $type <p>
 * One of <b>INPUT_GET</b>, <b>INPUT_POST</b>,
 * <b>INPUT_COOKIE</b>, <b>INPUT_SERVER</b>, or
 * <b>INPUT_ENV</b>.
 * </p>
 * @param string $variable_name <p>
 * Name of a variable to get.
 * </p>
 * @param int $filter [optional]
 * @param mixed $options [optional] <p>
 * Associative array of options or bitwise disjunction of flags. If filter
 * accepts options, flags can be provided in "flags" field of array.
 * </p>
 * @return mixed Value of the requested variable on success, <b>FALSE</b> if the filter fails,
 * or <b>NULL</b> if the <i>variable_name</i> variable is not set.
 * If the flag <b>FILTER_NULL_ON_FAILURE</b> is used, it
 * returns <b>FALSE</b> if the variable is not set and <b>NULL</b> if the filter fails.
 */
function filter_input(int $type, string $variable_name, int $filter = FILTER_DEFAULT, $options = null) {}

/**
 * (PHP 5 &gt;= 5.2.0, PHP 7)<br/>
 * Filters a variable with a specified filter
 * @link http://php.net/manual/en/function.filter-var.php
 * @param mixed $variable <p>
 * Value to filter.
 * </p>
 * @param int $filter [optional]
 * @param mixed $options [optional] <p>
 * Associative array of options or bitwise disjunction of flags. If filter
 * accepts options, flags can be provided in "flags" field of array. For
 * the "callback" filter, callable type should be passed. The
 * callback must accept one argument, the value to be filtered, and return
 * the value after filtering/sanitizing it.
 * </p>
 * <p>
 * <code>
 * // for filters that accept options, use this format
 * $options = array(
 * 'options' => array(
 * 'default' => 3, // value to return if the filter fails
 * // other options here
 * 'min_range' => 0
 * ),
 * 'flags' => FILTER_FLAG_ALLOW_OCTAL,
 * );
 * $var = filter_var('0755', FILTER_VALIDATE_INT, $options);
 * // for filter that only accept flags, you can pass them directly
 * $var = filter_var('oops', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
 * // for filter that only accept flags, you can also pass as an array
 * $var = filter_var('oops', FILTER_VALIDATE_BOOLEAN,
 * array('flags' => FILTER_NULL_ON_FAILURE));
 * // callback validate filter
 * function foo($value)
 * {
 * // Expected format: Surname, GivenNames
 * if (strpos($value, ", ") === false) return false;
 * list($surname, $givennames) = explode(", ", $value, 2);
 * $empty = (empty($surname) || empty($givennames));
 * $notstrings = (!is_string($surname) || !is_string($givennames));
 * if ($empty || $notstrings) {
 * return false;
 * } else {
 * return $value;
 * }
 * }
 * $var = filter_var('Doe, Jane Sue', FILTER_CALLBACK, array('options' => 'foo'));
 * </code>
 * </p>
 * @return mixed the filtered data, or <b>FALSE</b> if the filter fails.
 */
function filter_var($variable, int $filter = FILTER_DEFAULT, $options = null) {}

/**
 * (PHP 5 &gt;= 5.2.0, PHP 7)<br/>
 * Gets external variables and optionally filters them
 * @link http://php.net/manual/en/function.filter-input-array.php
 * @param int $type <p>
 * One of <b>INPUT_GET</b>, <b>INPUT_POST</b>,
 * <b>INPUT_COOKIE</b>, <b>INPUT_SERVER</b>, or
 * <b>INPUT_ENV</b>.
 * </p>
 * @param mixed $definition [optional] <p>
 * An array defining the arguments. A valid key is a string
 * containing a variable name and a valid value is either a filter type, or an array
 * optionally specifying the filter, flags and options. If the value is an
 * array, valid keys are filter which specifies the
 * filter type,
 * flags which specifies any flags that apply to the
 * filter, and options which specifies any options that
 * apply to the filter. See the example below for a better understanding.
 * </p>
 * <p>
 * This parameter can be also an integer holding a filter constant. Then all values in the
 * input array are filtered by this filter.
 * </p>
 * @param bool $add_empty [optional] <p>
 * Add missing keys as <b>NULL</b> to the return value.
 * </p>
 * @return mixed An array containing the values of the requested variables on success, or <b>FALSE</b>
 * on failure. An array value will be <b>FALSE</b> if the filter fails, or <b>NULL</b> if
 * the variable is not set. Or if the flag <b>FILTER_NULL_ON_FAILURE</b>
 * is used, it returns <b>FALSE</b> if the variable is not set and <b>NULL</b> if the filter
 * fails.
 */
function filter_input_array(int $type, $definition = null, bool $add_empty = true) {}

/**
 * (PHP 5 &gt;= 5.2.0, PHP 7)<br/>
 * Gets multiple variables and optionally filters them
 * @link http://php.net/manual/en/function.filter-var-array.php
 * @param array $data <p>
 * An array with string keys containing the data to filter.
 * </p>
 * @param mixed $definition [optional] <p>
 * An array defining the arguments. A valid key is a string
 * containing a variable name and a valid value is either a
 * filter type, or an
 * array optionally specifying the filter, flags and options.
 * If the value is an array, valid keys are filter
 * which specifies the filter type,
 * flags which specifies any flags that apply to the
 * filter, and options which specifies any options that
 * apply to the filter. See the example below for a better understanding.
 * </p>
 * <p>
 * This parameter can be also an integer holding a filter constant. Then all values in the
 * input array are filtered by this filter.
 * </p>
 * @param bool $add_empty [optional] <p>
 * Add missing keys as <b>NULL</b> to the return value.
 * </p>
 * @return mixed An array containing the values of the requested variables on success, or <b>FALSE</b>
 * on failure. An array value will be <b>FALSE</b> if the filter fails, or <b>NULL</b> if
 * the variable is not set.
 */
function filter_var_array(array $data, $definition = null, bool $add_empty = true) {}

/**
 * (PHP 5 &gt;= 5.2.0, PHP 7)<br/>
 * Returns a list of all supported filters
 * @link http://php.net/manual/en/function.filter-list.php
 * @return array an array of names of all supported filters, empty array if there
 * are no such filters. Indexes of this array are not filter IDs, they can be
 * obtained with <b>filter_id</b> from a name instead.
 */
function filter_list(): array {}

/**
 * (PHP 5 &gt;= 5.2.0, PHP 7)<br/>
 * Checks if variable of specified type exists
 * @link http://php.net/manual/en/function.filter-has-var.php
 * @param int $type <p>
 * One of <b>INPUT_GET</b>, <b>INPUT_POST</b>,
 * <b>INPUT_COOKIE</b>, <b>INPUT_SERVER</b>, or
 * <b>INPUT_ENV</b>.
 * </p>
 * @param string $variable_name <p>
 * Name of a variable to check.
 * </p>
 * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
 */
function filter_has_var(int $type, string $variable_name): bool {}

/**
 * (PHP 5 &gt;= 5.2.0, PHP 7)<br/>
 * Returns the filter ID belonging to a named filter
 * @link http://php.net/manual/en/function.filter-id.php
 * @param string $filtername <p>
 * Name of a filter to get.
 * </p>
 * @return int ID of a filter on success or <b>FALSE</b> if filter doesn't exist.
 */
function filter_id(string $filtername): int {}


/**
 * POST variables.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('INPUT_POST', 0);

/**
 * GET variables.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('INPUT_GET', 1);

/**
 * COOKIE variables.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('INPUT_COOKIE', 2);

/**
 * ENV variables.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('INPUT_ENV', 4);

/**
 * SERVER variables.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('INPUT_SERVER', 5);

/**
 * SESSION variables.
 * (not implemented yet)
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('INPUT_SESSION', 6);

/**
 * REQUEST variables.
 * (not implemented yet)
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('INPUT_REQUEST', 99);

/**
 * No flags.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_NONE', 0);

/**
 * Flag used to require scalar as input
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_REQUIRE_SCALAR', 33554432);

/**
 * Require an array as input.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_REQUIRE_ARRAY', 16777216);

/**
 * Always returns an array.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FORCE_ARRAY', 67108864);

/**
 * Use NULL instead of FALSE on failure.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_NULL_ON_FAILURE', 134217728);

/**
 * ID of "int" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_VALIDATE_INT', 257);

/**
 * ID of "boolean" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_VALIDATE_BOOLEAN', 258);

/**
 * ID of "float" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_VALIDATE_FLOAT', 259);

/**
 * ID of "validate_regexp" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_VALIDATE_REGEXP', 272);
define ('FILTER_VALIDATE_DOMAIN', 277);

/**
 * ID of "validate_url" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_VALIDATE_URL', 273);

/**
 * ID of "validate_email" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_VALIDATE_EMAIL', 274);

/**
 * ID of "validate_ip" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_VALIDATE_IP', 275);

/**
 * ID of "validate_mac_address" filter.
 * (Available as of PHP 5.5.0)
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_VALIDATE_MAC', 276);

/**
 * ID of default ("unsafe_raw") filter. This is equivalent to
 * <b>FILTER_UNSAFE_RAW</b>.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_DEFAULT', 516);

/**
 * ID of "unsafe_raw" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_UNSAFE_RAW', 516);

/**
 * ID of "string" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_STRING', 513);

/**
 * ID of "stripped" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_STRIPPED', 513);

/**
 * ID of "encoded" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_ENCODED', 514);

/**
 * ID of "special_chars" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_SPECIAL_CHARS', 515);
define ('FILTER_SANITIZE_FULL_SPECIAL_CHARS', 522);

/**
 * ID of "email" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_EMAIL', 517);

/**
 * ID of "url" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_URL', 518);

/**
 * ID of "number_int" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_NUMBER_INT', 519);

/**
 * ID of "number_float" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_NUMBER_FLOAT', 520);

/**
 * ID of "magic_quotes" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_SANITIZE_MAGIC_QUOTES', 521);

/**
 * ID of "callback" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_CALLBACK', 1024);

/**
 * Allow octal notation (0[0-7]+) in "int" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_ALLOW_OCTAL', 1);

/**
 * Allow hex notation (0x[0-9a-fA-F]+) in "int" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_ALLOW_HEX', 2);

/**
 * Strip characters with ASCII value less than 32.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_STRIP_LOW', 4);

/**
 * Strip characters with ASCII value greater than 127.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_STRIP_HIGH', 8);
define ('FILTER_FLAG_STRIP_BACKTICK', 512);

/**
 * Encode characters with ASCII value less than 32.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_ENCODE_LOW', 16);

/**
 * Encode characters with ASCII value greater than 127.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_ENCODE_HIGH', 32);

/**
 * Encode &#38;#38;.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_ENCODE_AMP', 64);

/**
 * Don't encode ' and ".
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_NO_ENCODE_QUOTES', 128);

/**
 * (No use for now.)
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_EMPTY_STRING_NULL', 256);

/**
 * Allow fractional part in "number_float" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_ALLOW_FRACTION', 4096);

/**
 * Allow thousand separator (,) in "number_float" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_ALLOW_THOUSAND', 8192);

/**
 * Allow scientific notation (e, E) in
 * "number_float" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_ALLOW_SCIENTIFIC', 16384);
define ('FILTER_FLAG_SCHEME_REQUIRED', 65536);
define ('FILTER_FLAG_HOST_REQUIRED', 131072);

/**
 * Require path in "validate_url" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_PATH_REQUIRED', 262144);

/**
 * Require query in "validate_url" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_QUERY_REQUIRED', 524288);

/**
 * Allow only IPv4 address in "validate_ip" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_IPV4', 1048576);

/**
 * Allow only IPv6 address in "validate_ip" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_IPV6', 2097152);

/**
 * Deny reserved addresses in "validate_ip" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_NO_RES_RANGE', 4194304);

/**
 * Deny private addresses in "validate_ip" filter.
 * @link http://php.net/manual/en/filter.constants.php
 */
define ('FILTER_FLAG_NO_PRIV_RANGE', 8388608);
define ('FILTER_FLAG_HOSTNAME', 1048576);

// End of filter v.7.0.4-7ubuntu2
?>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.