Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Chamar função PHP através de um form HTML

Meu form ficou declarado assim:

<form action="<?php echo tryLogin($_POST['email'],$_POST['password']) ?>" method="post" name="login" id="login-form">

e minha função ficou declarada assim:

<?php 
function tryLogin($login,$password){
    $resultado = mysqli_query($conexao,"select * from usuarios where username ='" . $login . "' and password = '" . $password."'");
          $rows = mysqli_num_rows($resultado );

          if($rows == 1){
        $_SESSION['login_user'] = $login;
                $_SESSION['login_pass'] = $password; 
                header("http://meusite.com/");
          }
          else header("http://meusite.com/login.php?error=1");
}

?>

Aparentemente ele chega a carregar a função, porém sem os parâmetros corretos. Isso faz com que o site recarregue a pagina do meu browser me redirecionando para um link que na verdade são mensagens de erro:

http://meusite.com/<br%20/><b>Warning</b>:%20%20mysqli_query()%20expects%20parameter%201%20to%20be%20mysqli,%20null%20given%20in%20<b>/home/scrat964/public_html/login.php</b>%20on%20line%20<b>3</b><br%20/><br%20/><b>Warning</b>:%20%20mysqli_num_rows()%20expects%20parameter%201%20to%20be%20mysqli_result,%20null%20given%20in%20<b>/home/scrat964/public_html/login.php</b>%20on%20line%20<b>4</b><br%20/><br%20/><b>Warning</b>:%20%20Cannot%20modify%20header%20information%20-%20headers%20already%20sent%20by%20(output%20started%20at%20/home/scrat964/public_html/login.php:16)%20in%20<b>/home/scrat964/public_html/login.php</b>%20on%20line%20<b>11</b><br%20/>

Alguma dica de como resolver? Sei que possivelmente seria bem mais facil fazer este sistema com JS, mas de qualquer jeito gostaria de aprender a chamar funções PHP através de um form/botão

2 respostas

Vamos lá Daniel, a primeira coisa que precisamos definir é que html não executa função PHP o que acontece é que quando você envia o seu formulário acontece uma nova requisição que vai ser processada no servidor que no nosso caso roda PHP mas vamos separar. PHP roda no servidor e html fica no navegador do usuário. Então o que você precisa informar no atributo action do formulário não é a função PHP que você quer executar e sim qual é a url do arquivo PHP que vai processar o seu formulário. Vamos criar o arquivo faz-login.php com a sua função:

faz-login.php

<?php 
$login = $_POST["usuario"];
$senha = $_POST["senha"];

tryLogin($login,$senha);


function tryLogin($login,$password){
    $resultado = mysqli_query($conexao,"select * from usuarios where username ='" . $login . "' and password = '" . $password."'");
          $rows = mysqli_num_rows($resultado );

          if($rows == 1){
        $_SESSION['login_user'] = $login;
                $_SESSION['login_pass'] = $password; 
                header("http://meusite.com/");
          }
          else header("http://meusite.com/login.php?error=1");
}

?>

Repare que esse arquivo pega os dados que recebemos do formulário via POST e chama a função tryLogin, então o formulário vai mandar um requisição que vai executar o arquivo faz-login.php que por sua vez chama a função tryLogin. Não é o formulário diretamente que roda a sua função. E agora precisamos só falar que a ação do formulário é o arquivo faz-login.php

<form action="faz-login.php" method="post">
    <input type="text" name="usuario" />
    <input type="password" name="senha" />
    <input type="submit" value="enviar" />
</form>

Espero ter ajudado e se ficou qualquer dúvida só comentar aqui.

Abraços e bons estudos.

solução

Oi Daniel.

Na verdade não tenho certeza se tem como chamar uma função do php através de um formulário

Uma solução que vejo para o seu problema é fazer o seguinte: verificar se o formulário foi submetido, caso ele estiver sido, ai sim chamar a sua função tryLogin.

if (isset($_POST['email']) && isset($_POST['password'] ) {
    $email = $_POST['email'];
    $password = $_POST['password'];

    tryLogin($email, $senha);
}

Aqui eu verifico se a variavel $_POST['email'] e $_POST['password'] existem e atribuo elas a $email e $senha, logo depois chamo a função tryLogin.