Tafari Postado Abril 12, 2011 Denunciar Share Postado Abril 12, 2011 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çoAbraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago M. Postado Abril 12, 2011 Denunciar Share Postado Abril 12, 2011 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tafari Postado Abril 12, 2011 Autor Denunciar Share Postado Abril 12, 2011 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Abril 12, 2011 Denunciar Share Postado Abril 12, 2011 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tafari Postado Abril 12, 2011 Autor Denunciar Share Postado Abril 12, 2011 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 } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tafari Postado Abril 12, 2011 Autor Denunciar Share Postado Abril 12, 2011 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; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tafari Postado Abril 12, 2011 Autor Denunciar Share Postado Abril 12, 2011 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 *FIT* Postado Abril 12, 2011 Denunciar Share Postado Abril 12, 2011 Funcionou? Posso fechar o tópico? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Tafari
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
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.