PlayMa256 Posted September 28, 2013 at 10:03 PM Report #526516 Posted September 28, 2013 at 10:03 PM (edited) Olá, estou realizando a leitura de um arquivo .sql para obter algumas informações de dentro do arquivo, o qual possui esta estrutura internamente: grupo,usuario grupo,usuario grupo,usuario grupo,usuario grupo,usuario pois bem, estou a ler desta maneira, e inseri-los em selects. <!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <form action="" method="post" enctype="multipart-form/data"> <select name="usuario"> <option value="" selected="selected">Selecione um usuario</option> <?php $arquivo = fopen("grupo.sql", "r+"); while(!feof($arquivo)){ $linha = fgets($arquivo, 4096); $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; echo '<option value="'.$usuario.'">'.$usuario.'<option/>'; } fclose($arquivo); ?> </select> <select name="grupo"> <option value="" selected="selected">Selecione um grupo</option> <?php $arquivo = fopen("grupo.sql", "r+"); while(!feof($arquivo)){ $linha = fgets($arquivo, 4096); $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; echo '<option value="'.$grupo.'">'.$grupo.'<option/>'; } fclose($arquivo); ?> </select> <input type="submit" value="Procurar" /> </form> </body> </html> porem quando vejo o html gerado, ele esta gerando options a mais, a quais estao brancas, nulas, sem valor e sem opção, posso estar fazendo algo de errado na leitura do arquivo? Edited October 14, 2013 at 03:04 PM by brunoais titulo melhorado.
brunoais Posted September 29, 2013 at 05:27 PM Report #526584 Posted September 29, 2013 at 05:27 PM Vê isto tb, sff. http://www.php.net/manual/en/function.feof.php#70715 Acho importante teres em conta já que estás a fazer o que está naquele comentário. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
HappyHippyHippo Posted September 30, 2013 at 05:19 AM Report #526723 Posted September 30, 2013 at 05:19 AM a aqui está a terceira (relevante ao post apresentado anteriormente) e mais fácil solução de leitura de uma ficheiro em PHP: while ($line = fgets($arquivo)) { // ao chegar ao fim do ficheiro, a função fgets retorna FALSE, caso contrário retorna sempre uma string seja ela vazia ou não // ... do stuff with $line } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted October 4, 2013 at 02:06 PM Author Report #527637 Posted October 4, 2013 at 02:06 PM (edited) Bom, realizei os passos mostrados, mas mesmo assim continua contendo espaços em cada leitura, mas isso é o de menos... estou quebrando a linha lida, usando explode com a virgula, depois peço para fazer a pesquisa do usuario dependebndo do grupo, ele mostra todos os usuarios relacionados, porem ao contrario nada feito, aparece: "Undefined Offset 1" eis o codigo: <!DOCTYPE html> <?php include "lerArquivo.php"; ?> <html> <head> <title>Index</title> </head> <body> <form action="" method="post" enctype="multipart-form/data"> <select name="usuario"> <option value="" selected="selected">Selecione um usuario</option> <?php $arquivo = fopen("grupo.sql", "r+"); while(!feof($arquivo)){ $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; echo '<option value="'.$usuario.'">'.$usuario.'<option/>'; } } fclose($arquivo); ?> </select> <select name="grupo"> <option value="" selected="selected">Selecione um grupo</option> <?php $arquivo = fopen("grupo.sql", "r+"); while(!feof($arquivo)){ $linha = fgets($arquivo, 4096); $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; echo '<option value="'.$grupo.'">'.$grupo.'<option/>'; } fclose($arquivo); ?> </select> <input type="submit" value="Procurar" /> <input type="hidden" name="acao" value="enviar" /> </form> <?php if(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){ $grupoReturn = $_POST['grupo']; $usuarioReturn = $_POST['usuario']; if(($usuarioReturn == NULL) && ($grupoReturn == NULL)) { echo 'selecione um usuario e um grupo'; }else if(($usuarioReturn == NULL) && ($grupoReturn != NULL)){ $arquivo = fopen("grupo.sql", "r+"); while(!feof($arquivo)){ $linha = fgets($arquivo, 4096); $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; if($grupoReturn == $grupo){ echo $usuario.'<br/>'; } } fclose($arquivo); } if(($usuarioReturn != NULL) && ($grupoReturn == NULL)){ $fp = fopen("grupo.sql", "r+"); $current_line = fgets($fp); while (!feof($fp)) { $current_line = fgets($fp); $explode2 = explode(",", $linha); if($explode2[1] == $usuarioReturn){ //problema aqui echo $explode[0]; } } fclose($fp); } } ?> </body> </html> o problema é no $explode[1], podem no if superior esse explode[1] funciona.... Edited October 4, 2013 at 02:59 PM by brunoais geshi
brunoais Posted October 4, 2013 at 03:10 PM Report #527640 Posted October 4, 2013 at 03:10 PM 1º: Ignoraste completamente o que escrevi. 2º: Ignoraste completamente o que o HappyHippyHippo escreveu. 3º: Tens uma indentação um pouco má (e, por consequente, confusa). 4º: Vê com atenção a diferença entre os 2 para veres pq obtens resultados diferentes (mm q, pessoalmente, ambos estão mal feitos). "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
PlayMa256 Posted October 7, 2013 at 04:25 PM Author Report #527909 Posted October 7, 2013 at 04:25 PM Bom, realizei as alterações, mas mesmo assim a busca de usuario continua a nao funcionar, quando seleciono os grupos ele funciona perfeitamente, poderá ser um problema do modo em que estou obtendo a linha? já que ela esta como grupo,usuario, e sendo assim dou um explode na , ? <!DOCTYPE html> <?php include "lerArquivo.php"; ?> <html> <head> <title>Index</title> </head> <body> <form action="" method="post" enctype="multipart-form/data"> <select name="usuario"> <option value="" selected="selected">Selecione um usuario</option> <?php $arquivo = fopen("grupo.sql", "r+"); while (!feof($arquivo)) { $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; echo '<option value="'.$usuario.'">'.$usuario.'<option/>'; } } fclose($arquivo); ?> </select> <select name="grupo"> <option value="" selected="selected">Selecione um grupo</option> <?php $arquivo = fopen("grupo.sql", "r+"); while (!feof($arquivo)) { $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; echo '<option value="'.$grupo.'">'.$grupo.'</option>'; } } fclose($arquivo); ?> </select> <input type="submit" value="Procurar" /> <input type="hidden" name="acao" value="enviar" /> </form> <?php if(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){ $User = $_POST['usuario']; $Group = $_POST['grupo']; if(($User != NULL) && ($Group == NULL)){ $arquivo = fopen("grupo.sql", "r+"); while (!feof($arquivo)) { $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; } } fclose($arquivo); }elseif(($User == NULL) && ($Group != NULL)){ $arquivo = fopen("grupo.sql", "r+"); while (!feof($arquivo)) { $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; if($Group == $grupo){ echo $usuario; } } } fclose($arquivo); } }//laço do if de form ?> </body> </html>
brunoais Posted October 8, 2013 at 02:40 PM Report #528069 Posted October 8, 2013 at 02:40 PM Enquanto não resolveres tudo o que indiquei no posto anterior n te vou ajudar mais. É mesmo muito difícil ajudar nesse estado. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
PlayMa256 Posted October 10, 2013 at 12:09 AM Author Report #528295 Posted October 10, 2013 at 12:09 AM Não sei porque raios a identação fica totalmente deformada quando copio o codigo do editor, meu codigo esta absolutamente bem identando, mas quando colo pro forum ele fica totalmente deformado. <!DOCTYPE html> <?php include "lerArquivo.php"; ?> <html> <head> <title>Index</title> </head> <body> <form action="" method="post" enctype="multipart-form/data"> <select name="usuario"> <option value="" selected="selected">Selecione um usuario</option> <?php $arquivo = fopen("grupo.sql", "r+"); while (!feof($arquivo)) { $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; echo '<option value="'.$usuario.'">'.$usuario.'<option/>'; } } fclose($arquivo); ?> </select> <select name="grupo"> <option value="" selected="selected">Selecione um grupo</option> <?php $arquivo = fopen("grupo.sql", "r+"); while (!feof($arquivo)) { $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; echo '<option value="'.$grupo.'">'.$grupo.'</option>'; } } fclose($arquivo); ?> </select> <input type="submit" value="Procurar" /> <input type="hidden" name="acao" value="enviar" /> </form> <?php if(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){ $User = $_POST['usuario']; $Group = $_POST['grupo']; if(($User != NULL) && ($Group == NULL)){ $arquivo = fopen("grupo.sql", "r+"); while (!feof($arquivo)) { $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; if($User == $usuario){ echo $grupo; } } } fclose($arquivo); }elseif(($User == NULL) && ($Group != NULL)){ $arquivo = fopen("grupo.sql", "r+"); while (!feof($arquivo)) { $linha = fgets($arquivo, 4096); if(!feof($arquivo)){ $explode = explode(",", $linha); $grupo = $explode[0]; $usuario = $explode[1]; if($Group == $grupo){ echo $usuario; } } } fclose($arquivo); } }//laço do if de form ?> </body> </html> Pode ver que o codigo está totalmente identado no link do pastebin http://pastebin.com/611BAgsV Eu realizei todas as coisa que haviam naquele post do site do php, e mesmo assim não funciona, a busca de usuários selecionando os grupos funciona, porem o contrario nao.
HappyHippyHippo Posted October 10, 2013 at 04:45 AM Report #528302 Posted October 10, 2013 at 04:45 AM dizer que não funciona não é informação suficiente para perceber o que procurar. - o que está a acontecer ? - o que deveria acontecer ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted October 10, 2013 at 11:46 AM Author Report #528331 Posted October 10, 2013 at 11:46 AM Se ler alguns posts acima eu falo o problema. Estava a receber o seguinte erro: "Undefined Offset 1" ao selecionar por usuario e querer pesquisar os grupos que este usuario faz parte. Pesquisando por grupo, os usuarios que fazem parte desse grupo, funciona perfeitamente, porem ao pesquisar por usuario não aparece nada, simplesmente processa a requisição e não me devolve nenhum resultado. Imagino eu que seja pelo modo que o arquivo esta montado, sendo desta maneira: grupo,usuario
HappyHippyHippo Posted October 10, 2013 at 01:22 PM Report #528347 Posted October 10, 2013 at 01:22 PM e isso para todos os diferentes valores de usuario ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted October 10, 2013 at 11:41 PM Author Report #528435 Posted October 10, 2013 at 11:41 PM isso, é basicamente uma procura no arquivo, onde tenho relacionado grupo,usuario em diversas linhas do arquivo.sql Basicamente assim: ntadmins,anderson_sinotti ntadmins,vinicius_pavani ntpwrusr,ademilson ntpwrusr,alexandre_belotto ntpwrusr,claudio_conforte ntpwrusr,ivan_ossuna ntpwrusr,jesulino_silva ntpwrusr,lucas_tanajura ntpwrusr,luciano_santos ntpwrusr,milton_fernandes ntpwrusr,vanessa_santana Ao procurar o grupo ntpwrurs, ele traria todos os usuarios que possuem esse grupo. Ao selecionar o usuario vanessa_santana ele traria o grupo ntpwrusr como resultado, se fizesse parte de mais grupo, traria todos os quais ela faz parte.
HappyHippyHippo Posted October 11, 2013 at 05:53 AM Report #528443 Posted October 11, 2013 at 05:53 AM eu sei o que queres fazer, não preceisas de explicar. só vejo um problema que possa causar o que referes. este : http://www.cplusplus.com/reference/cstdio/fgets/ A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str. eu sei que a documentação é de C, mas o PHP funciona muito em chamadas directas do C, logo 99% da documentação de C é perfeitamente válida para as funções de PHP com o mesmo nome. logo o que deverá estar a acontecer é que o valor de usuario lido possui o caracter '\n' o que invalida a comparação terás de verificar se esse caracter faz parte do valor lido do ficheiro e remover-lo se for caso disso. 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
brunoais Posted October 11, 2013 at 07:02 AM Report #528445 Posted October 11, 2013 at 07:02 AM Já agora: O ficheiro tem os newlines usando \r\n ou é só \n? 1 Report "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
PlayMa256 Posted October 11, 2013 at 01:55 PM Author Report #528518 Posted October 11, 2013 at 01:55 PM (edited) Bom, que possui \n é certeza, mas \r eu ja nao sei, como posso descobrir?? Estes arquivos foram criados com um script em linux, buscando os usuarios e as permissoes. Bom, era esse o problema que o hippy falou, ele estava contendo \n no final de cada linha que lia, entao fiz desta maneira: $linha = preg_replace('/\n$/','',$linha); $linha = rtrim($linha); E funcionou perfeitamente. Obrigado. Edited October 11, 2013 at 02:33 PM by PlayMa256
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now