Chamando uma função em PHP

20/11/2019

0

Estou com um problema em chamar uma função em php, quando n tento chamar ela pelo botão ele funciona perfeitamente, segue o código:
<?php
session_start();

function a(){
$conexao = mysqli_connect("localhost", "root","");
mysqli_select_db($conexao, "meubd");
$dados = mysqli_query($conexao, "SELECT * FROM produto order by preco asc");
echo "<h1>Produtos em ordem crescente: </h1></br>";
while ($tabela = mysqli_fetch_array($dados)) {

echo"<p>Produto: ". $tabela['nome']."</br> Preço: ". $tabela['preco']. "</br>Quantidade: ". $tabela['quant']. "</br></p>";
echo "<hr></hr>";
}


}

?>

<html>
<head>
<link rel="stylesheet" type="text/css" href="sucesso.css">
</head>
<body>

<center><div>
<form action="bd.php" method= "POST" name="form">
<label> Nome do produto </label>
<input type="text"name='nome' required>
<label> Preço</label>
<input type="text" name='preco'required>
<label> Quantidade</label>
<input type="number"name='quant'required>
<input type="submit" value="Enviar"></br>

</form>
</div></center>

<button onclick='a()'>Click me</button>

</body>
</html>
Lucas Oliveira

Lucas Oliveira

Responder

Post mais votado

20/11/2019

Olá Lucas !! Tranquilo ??

Veja bem, aplicações web rodam em duas "partes", uma parte roda na nuvem (no servidor do seu host ou seu servidor web local) e a outra parte roda no seu navegador que está na sua maquina local... o PHP roda sempre no servidor, já o HTML, CSS e javascript rodam no seu navegador.

Vamos então ao seu caso...

Quando vc "chama" seu arquivo.php isso acontece lá no seu servidor web, é á que o php vai rodar... neste momento o PHP "enxerga" o seu código assim:

<?php
session_start();

function a(){
$conexao = mysqli_connect("localhost", "root","");
mysqli_select_db($conexao, "meubd");
$dados = mysqli_query($conexao, "SELECT * FROM produto order by preco asc");
echo "<h1>Produtos em ordem crescente: </h1></br>";
while ($tabela = mysqli_fetch_array($dados)) {

echo"<p>Produto: ". $tabela['nome']."</br> Preço: ". $tabela['preco']. "</br>Quantidade: ". $tabela['quant']. "</br></p>";
echo "<hr></hr>";
}


}

?>

<html>
<head>
<link rel="stylesheet" type="text/css" href="sucesso.css">
</head>
<body>

<center><div>
<form action="bd.php" method= "POST" name="form">
<label> Nome do produto </label>
<input type="text"name="nome" required>
<label> Preço</label>
<input type="text" name="preco" required>
<label> Quantidade</label>
<input type="number"name="quant" required>
<input type="submit" value="Enviar"></br>

</form>
</div></center>

<button onclick='a()'>Click me</button>

</body>
</html>


ao executar seu arquivo o PHP irá ler a sua função a() e carrega-la na memória do servidor, e ao terminar de rodar irá retornar para o seu navegador na sua maquina local o seguinte:

<html>
<head>
<link rel="stylesheet" type="text/css" href="sucesso.css">
</head>
<body>

<center><div>
<form action="bd.php" method= "POST" name="form">
<label> Nome do produto </label>
<input type="text"name="nome" required>
<label> Preço</label>
<input type="text" name="preco" required>
<label> Quantidade</label>
<input type="number"name="quant" required>
<input type="submit" value="Enviar"></br>

</form>
</div></center>

<button onclick='a()'>Click me</button>

</body>
</html>


Como vc pode ver a "parte PHP" do seu código sumiu, pois o PHP não é repassado ao navegador e roda somente no servidor (server side).

Dae quando vc clica no seu botão "Click me", o seu HTML que está no seu navegador tenta chamar uma funcao a() que não existe na memória do seu computador local e por isso não funciona.

Esperimente mudar o seu código assim:


<?php
session_start();

function a(){
   $conexao = mysqli_connect("localhost", "root","");
   mysqli_select_db($conexao, "meubd");
   $dados = mysqli_query($conexao, "SELECT * FROM produto order by preco asc");
   echo "<h1>Produtos em ordem crescente: </h1></br>";
   while ($tabela = mysqli_fetch_array($dados)) {
      echo"<p>Produto: ". $tabela['nome']."</br> Preço: ". $tabela['preco']. "</br>Quantidade: ". $tabela['quant']. "</br></p>";
      echo "<hr></hr>";
   }


}

if(empty($_POST["nome"])){  ?>

<html>
<head>
<link rel="stylesheet" type="text/css" href="sucesso.css">
</head>
<body>

<center><div>
<form action="bd.php" method= "POST" name="form">
<label> Nome do produto </label>
<input type="text"name="nome" required>
<label> Preço</label>
<input type="text" name="preco" required>
<label> Quantidade</label>
<input type="number"name="quant" required>
<input type="submit" value="Enviar"></br>

</form>
</div></center>

<?php
} else { 
a();
} ?>

</body>
</html>



Não consegui testar aqui, mas a idéia é testar para ver se foi preenchido algo no campo nome, se não houver nada lá então o php vai montar o formulário, caso o campo nome for preenchido e o botão submit clicado então o php vai executar a função a() e montar o relatório da query.

Testa isso aí e veja se funciona.

Espero ter ajudado,
abraço e bons códigos.

Jorge Pinto

Jorge Pinto
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar