Ir para conteúdo
Fórum Script Brasil
  • 0

Problema de Lógica


Tafari

Pergunta

Olá.

Peço paciência de vocês, pois não sou programador e muito menos formado na área de computação.

Vamos ao problema.

Em uma página, eu tenho 5 inputs texto.

Eu tenho que fazer um script em php que realiza pesquisa em combinações entre estes 5 inputs.

Não sei se tem como fazer em nível SQL. Só pensei em fazer em PHP.

Mas o problema é: fazendo as combinações possíveis (C5,1 + C5,2 + C5,3 + C5,4 + C5,5), são 31 opções diferentes.

Será que existe uma função ou uma maneira de fazer de forma automatizada?

Desde já agradeço

Abraços.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Disculpe Tafari se você poder explicar melhor o que deseja agente pode ajudar,

pois não entendi o que são esses C5,1 C5,2.....

comece nos dizendo o que os inputs recebem... o que as pessoas escrevem nesses imputs e esse negocio de 31 opções o que significa?

e sim! É bem provavel que pode ser feito com php, mas precisamos saber exatamente o que temos que fazer...

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Tiago.

Muito obrigado pelo pronto atendimento.

Vamos às explicações:

Eu tenho 5 inputs textos com os seguintes nomes:

cs int(1)

estante int(2)

prateleira int(2)

numero int(2)

digito int(1)

Todos recebem apenas números, sendo que o primeiro (cs) e o último (digito) são apenas de um único dígito. Os demais são 2 dígitos.

Eu quero que, se o usuário realizar a pesquisa em qualquer campo, ou mais que um, ou até mesmo todos, monte uma pesquisa.

Sendo 5 inputs, realizando combinação matemática, podem ser 31 meios diferentes de se realizar a pesquisa.

Será que expliquei ou compliquei?

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Pra ser sincero complicou, coloque um exemplo manual do que precisa.

Pelo que entendo você quer fazer uma busca com 5 filtros, porém nenhum deles é obrigatório, podendo escolher o primeiro e o último, o terceiro e o quarto...etc...enfim, 31 combinações de clausulas, é isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Ok.

Então vamos lá.

Formulário:

<div id="titulo" align="center">Digite os Dados</div><br>
    
    <form action="baixa.php" method="post">
    <table align="center" border="0" width="600">
        <tr>
            <td align="center">C.S.</td>
            <td align="center">Estante</td>
            <td align="center">Prateleira</td>
            <td align="center">Número</td>
            <td align="center"> </td>
            <td align="center">Dígito</td>
        </tr>
        <tr>
            <td align="center">
                <div id="formulariopeq">
                <input name="cs" id="cs" type="text" maxlength="1" autocomplete="off" autofocus/>
                </div>
            </td>
            <td align="center">
                <div id="formulariopeq">
                <input name="estante" id="estante" maxlength="2" type="text" autocomplete="off" />
                </div>
            </td>
            <td align="center">
                <div id="formulariopeq">
                <input name="prateleira" id="patreleira" maxlength="2" type="text" autocomplete="off" />
                </div>
            </td>
            <td align="center">
                <div id="formulariopeq">
                <input name="numero" id="numero" maxlength="2" type="text" autocomplete="off" />
                </div>
            </td>
            <td align="center">
                -
            </td>
            <td align="center">
                <div id="formulariopeq">
                <input name="digito" id="digito" maxlength="1" type="text" autocomplete="off" />
                </div>
            </td>
        </tr>
    </table>
    <input type="hidden" name="cargapage" value="3">
    <div id="botao" align="center">
        <input type="submit" value="Consultar"\>
    </div>
Agora a parte do PHP que desisti antes de terminar (31 opções diferentes):
// Verifica quais valores foram passados pelo formulário e monta a consulta de forma correta

    if ($_POST['cs']) {
        if ($_POST['estante']) {
            if ($_POST['prateleira']) {
                if ($_POST['numero']) {
                    if ($_POST['digito']) {
                        // Todos os campos foram preenchidos
                        $sql = "cs = " . $_POST['cs'] . " AND estante = " . $_POST['estante'] . " AND prateleira = " . $_POST['prateleira'] . " AND numero = . " . $_POST['numero'] . " AND digito = " . $_POST['digito'];
                        echo $sql;   
                        }
                    else {
                        // O Campo digito não foi preenchido
                        $sql = "cs = " . $_POST['cs'] . " AND estante = " . $_POST['estante'] . " AND prateleira = " . $_POST['prateleira'] . " AND numero = . " . $_POST['numero'];
                        }
                    }
                else {
                    if ($_POST['digito']) {
                        // Todos menos o campo número
                        $sql = "cs = " . $_POST['cs'] . " AND estante = " . $_POST['estante'] . " AND prateleira = " . $_POST['prateleira'] . " AND digito = " . $_POST['digito'];
                        }                
                    }
                }
            }
        }
    else {
        // O campo cs não foi preenchido
        }

Link para o comentário
Compartilhar em outros sites

  • 0

Mudei e fiz assim, agora:

if ($_POST['cs']) {
        $cs = 'cs = ' . $_POST['cs'];
        }

    if ($_POST['estante']) {
        if ($_POST['cs']) {
            $estante = ' AND estante = ' .$_POST['estante'];
            }
        else {
            $estante = 'estante = ' . $_POST['estante'];
            }
        }

    if ($_POST['prateleira']) {
        if ($_POST['cs'] || $_POST['estante']) {
            $prateleira = ' AND prateleira = ' .$_POST['prateleira'];
            }
        else {
            $prateleira = 'prateleira = ' . $_POST['prateleira'];
            }
        }

    if ($_POST['numero']) {
        if ($_POST['cs'] || $_POST['estante'] || $_POST['prateleira']) {
            $numero = ' AND numero = ' .$_POST['numero'];
            }
        else {
            $numero = 'numero = ' . $_POST['numero'];
            }
        }

    if ($_POST['digito']) {
        if ($_POST['cs'] || $_POST['estante'] || $_POST['prateleira'] || $_POST['numero']) {
            $digito = ' AND digito = ' .$_POST['digito'];
            }
        else {
            $digito = 'digito = ' . $_POST['digito'];
            }
        }


    $sql = "SELECT * FROM carga WHERE $cs $estante $prateleira $numero $digito";
O problema é que a função que eu uso para facilitar a consulta ao banco de dados
$sql = "SELECT * FROM carga WHERE $cs $estante $prateleira $numero $digito";
    $consulta = execSQL("$sql", array (), false);
está dando erro
Warning: Wrong parameter count for mysqli_stmt::bind_param() in /var/www/html/inc/func.php on line 26
Função
/*
Usage:

execSQL($sql, $parameters, $close);

$sql = Statement to execute;
$parameters = array of type and values of the parameters (if any)
$close = true to close $stmt (in inserts) false to return an array with the values;

Examples:
execSQL("SELECT * FROM table WHERE id = ?", array('i', $id), false);
execSQL("SELECT * FROM table", array(), false);
execSQL("INSERT INTO table(id, name) VALUES (?,?)", array('ss', $id, $name), true);
*/

function execSQL($sql, $params, $close){
    $mysqli = new mysqli("localhost", "root", "supersenha", "superbanco");
    $stmt = $mysqli->prepare($sql) or die ("Failed to prepared the statement!");

   call_user_func_array(array($stmt, 'bind_param'), refValues($params)); // Linha 26
    $stmt->execute();

    if($close){
        $result = $mysqli->affected_rows;
        } else {
            $meta = $stmt->result_metadata();
            
            while ( $field = $meta->fetch_field() ) {
                $parameters[] = &$row[$field->name];
                }  

            call_user_func_array(array($stmt, 'bind_result'), refValues($parameters));
               
            while ( $stmt->fetch() ) {
                $x = array();
                foreach( $row as $key => $val ) {
                    $x[$key] = $val;
                    }
                $results[] = $x;
                }
                
            $result = $results;
            }

        $stmt->close();
        $mysqli->close();

        return $result;
    }

function refValues($arr){
    //Reference is required for PHP 5.3+
    if (strnatcmp(phpversion(),'5.3') >= 0) {
        $refs = array();
        foreach($arr as $key => $value)
        $refs[$key] = &$arr[$key];
        return $refs;
        }
    return $arr;
    }

Link para o comentário
Compartilhar em outros sites

  • 0

Não sei se fiz certo, mas deu certo. Coloquei uma condição de existência para realizar o call_user_func_array().

if ($params) {
        call_user_func_array(array($stmt, 'bind_param'), refValues($params));
        }

Aparentemente funcionou para este e todos os outros chamados desta função.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...