Ir ao conteúdo
  • Cadastre-se
Pedro997

PHP Problema com botão no php

Recommended Posts

Gostaria de desvincular os botões, tenho um botão de gerar senha e um de chamar, mas toda vez que gero uma senha, ele também chama, gostaria de desvincular esses botões, alguém poderia me ajudar por gentileza? 

<?php
echo "<form>";
echo "<button> Gerar senha</button>";
echo "</form>";
$letras = range('A', 'Z');
$numeros = range(1, 9);
shuffle($letras);
shuffle($numeros);
$senha = implode('', array_slice($letras, 3, 3)) . '-' . end($numeros);
$file = 'senhas.txt';
if (!$handleFile = fopen($file, "a+")) {
    die("<p>Erro ao abrir/criar o arquivo: (<b>$file</b>)</p>");
}
fwrite($handleFile, $senha . "\r\n");
fclose($handleFile);
$arr = (file_get_contents($file));
echo '<pre>';
print_r($arr);
echo '</pre>';
echo "<hr>";
?>
<?php
echo "<form>";
echo "<button> Chamar senha</button>";
echo "</form>";
print_r("Senha $senha dirija-se ao caixa de atendimento");
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor me explique melhor a sua dúvida, o que voce gostaria que ocorresse?

 

Que ao clicar em "Gerar senha", somente fosse gerado e armazenado as senhas para posteriormente ao clicar em "chamar senha", fosse carregado a primeira senha gerada da lista?

 

Ou tem outra forma como você quer lidar com as senhas?

adicionado 4 minutos depois
2 minutos atrás, fspjonny disse:

Por favor me explique melhor a sua dúvida, o que voce gostaria que ocorresse?

 

Que ao clicar em "Gerar senha", somente fosse gerado e armazenado as senhas para posteriormente ao clicar em "chamar senha", fosse carregado a primeira senha gerada da lista?

 

Ou tem outra forma como você quer lidar com as senhas?

 

Pelo que testei aqui tanto faz clicar em qualquer um dos dois botões ou mesmo atualizar a página, pois uma nova senha é gerada e gravada no senhas.txt e exibida na tela no final do documento pela pela variável "$senha".

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, fspjonny disse:

Que ao clicar em "Gerar senha", somente fosse gerado e armazenado as senhas para posteriormente ao clicar em "chamar senha", fosse carregado a primeira senha gerada da lista?

Exatamente isso.

 

3 horas atrás, fspjonny disse:

Pelo que testei aqui tanto faz clicar em qualquer um dos dois botões ou mesmo atualizar a página, pois uma nova senha é gerada e gravada no senhas.txt e exibida na tela no final do documento pela pela variável "$senha".

No caso eu gostaria de desvincular isso, colocar um botão só pra gerar senha e outro só pra chamar 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Pedro997 Não seria o caso de criar uma função no php por exemplo:  gerar()   e exibir() então quando for submeter o formulário, envia um value e depois testa.

Se é gerar ou exibir.. Mas claro, isso se você remover a criação do formulário do php.

 

Por exemplo:

<form action="processaDados.php" method="post">
  <button name="botao" type="submit" value="gerar">Gerar Senha</button>
  <button name="botao" type="submit" value="exibir">Exibir senha</button>
</form>

Então no arquivo PHP, você recebe o value do botão clicado e testa:

 

$botao = $_POST["botao"];

if(botao == "gerar"):
    gerar();
else:
    exibir();
endif;



function gerar(){

  //aqui vai o código php de gerar a senha, 
 // cria o arquivo txt com senha

}

function exibir(){
  //aqui vai o código php de exibir a senha, 
  //percorre o arquivo txt e lê linha a linha
}

 

No mais, por questões mais práticas, eu diria que fazer com jQuery e requisição assíncrona(ajax) seria muito melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria mais ou menos isso ?


<?php
$botao = $_POST["botao"];
if($botao == "gerar"):
    gerar();
endif;
if ($botao == "exibir") {
    exibir();
}
function gerar()
{
    $letras = range('A', 'Z');
    $numeros = range(1, 9);
    shuffle($letras);
    shuffle($numeros);
    $senha = implode('', array_slice($letras, 3, 3)) . '-' . end($numeros);
    $file = 'senhas.txt';
    if (!$handleFile = fopen($file, "a+")) {
        die("<p>Erro ao abrir/criar o arquivo: (<b>$file</b>)</p>");
    }
    fwrite($handleFile, $senha . "\r\n");
    fclose($handleFile);
    $arr = (file_get_contents($file));
    echo '<pre>';
    print_r($arr);
    echo '</pre>';
}
    echo "<hr>";
    function exibir()
    {
echo "<pre>";
        print_r("Senha $senha dirija-se ao caixa de atendimento");
        echo "</pre>";
    }
?>

No caso o botão pra gerar esta funcionando perfeitamente, o de exibir que estou com duvida, pois eu quero exibir as senhas de 1 a 1, sem a necessidade de armazenar na tela no caso, apenas exibir de 1 a 1, toda vez que clicar no botão. Desculpe a falta de conhecimento e obrigado por ajudar, estou começando agora. Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Pedro997 Não.  sSua comparação não tem porque colocar dois "IFs"

 

Veja a estrutura que postei acima.  Vou tentar comentar linha a linha da estrutura.

 

$botao = $_POST["botao"];

Esta linha recebe o valor do botão que você apertou.  OU seja:  Gerar senha ou exibir senha. Então esta variável vai conter apenas um valor que é aquele do botão clicado.

 

if(botao == "gerar"):
    gerar();
else:
    exibir();
endif;

Esta é sua principal estrutura de condição.  Você vai comparar o valor com algum deles do botão. Só precisa de um. 

Porque se clicou no botão de gerar, ele entra no bloco do IF,  se você clicar no botão de exibir, ele vai entrar no bloco do ELSE.

 

Já a função de gerar senha, você coloca apenas a parte de gerar e não de exibir.

 

Algo do tipo:

function gerar(){
    $letras = range('A', 'Z');
    $numeros = range(1, 9);
    shuffle($letras);
    shuffle($numeros);
    $senha = implode('', array_slice($letras, 3, 3)) . '-' . end($numeros);
    $file = 'senhas.txt';
    if (!$handleFile = fopen($file, "a+")) :
        die("<p>Erro ao abrir/criar o arquivo: (<b>$file</b>)</p>");
    endif;
    fwrite($handleFile, $senha . "\r\n")
    fclose($handleFile);
    $arr = (file_get_contents($file));
   if($arr):
    echo "senhas geradas com sucesso";

   else: 
     echo "algo deu errado.";
   endif;
}

Basicamente tiramos do seu código apenas a chamada do "pre" e do print_r  que era os responsáveis por mostrar o conteúdo do array.

 

Na Função   exibir(),  você vai ter que percorrer seu arquivo de texto para exibir as senhas.

 

Por exemplo:

function exibir(){
  $arquivo = file('senhas.txt');

  foreach ($arquivo as $linha) {
   echo $linha . "<br/>";
  endforeach;

}

Lembrando que é apenas um exemplo, você vai ter que adaptar e implementar uma solução caso queira ler linha.. como por exemplo um botão para o "´próximo" aí então pegar o elemento pela posição do índice, já que estamos falando de vetores(arrays)

 

Depois se quiser, podes aperfeiçoar usando as requisições ajax com jQuery e php.:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha dúvida seria quanto ao implemento do elemento Jquery neste exemplom sendo que tenho o script com os campos e teria que recebê-los também com a função de post, mas como usar um method que carregue o dados diretamente do MySQL?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Rodinei Gevaerd

Basicamente como havia mencionado, o ajax resolve o seu problema da seguinte forma:

//Quando o dom estiver pronto
$(document).ready(function(){
  //armazena o elemento do seu botão   
  var botao  = $("#seu-botao");
  
  //evento de clicar no botão
  botao.on("click", function(){
    
    //armazena os dados do seu formulário  
    var dados = $("#seu-form").serialize();
      
      $.ajax({
          url: "arquivo.php",
          method: "POST",
          dataType: "HTML",
          data: dados
      }).done(function(retorno){
         //esta função done() é o retorno do sucesso
         $("#onde-vai-aparecer-o-resultado").html(retorno);
      }).fail(function(retorno){
           //esta função fail() é o retorno do erro
            $("#onde-vai-aparecer-o-resultado").html(retorno);
      });
  });  
});

Repare que na URL do $.ajax()  é arquivo.php.   este é o arquivo em php na qual você vai receber os dados em  $_POST,  eaí fazer a ação no MySQL.  Seja um select ou insert...  

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenho um código que chama números em fila, só que ele esta tipo em um link e toda vez que eu clico no link, a senha muda664437815_Semttulo.png.0823474af5b889a697892b62809676e6.png Eu gostaria de fazer um botão pra ele ficar assim 2138299841_Semttulo.png.58b38b54447addb0f012f71b0c1fa93d.pngE quando eu for clicando, as senhas vão mudando.

$linhas = file("senhas.txt");
    if (isset($_GET['linha']) == "") {
        $_GET['linha'] = 0;
        $i = $_GET['linha'] + 1;
        echo "<h3>";
        echo "<font color='white'>";
				echo "Chamar Proxima Senha <a href='?linha=$i'  >".  $linhas[0]. "</a>";
    echo "</font>";
				echo "</h3>";
    } else {
        $i = $_GET['linha'];
        $in = $_GET['linha'] + 1;
        echo "<h3>";
        echo "<font color='white'>";
				echo "Chamar Proxima Senha <a  href='?linha=" . $in . "'>" . $linhas[$i] . "</a>";
        echo "</font>";
        echo "</h3>";
    }
   ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×