Call method by form action

Asked

Viewed 7,703 times

2

Is it possible to call a method via post by the form action? How?

<?php  

class Produto {

public function insere() {
    $nome = $_POST['nome'];
    $descricao = $_POST['descricao'];
    $preco = $_POST['preco'];
    $conexao = new Database();
    $produto = new Produto();
    $produto->setNome($nome);
    $produto->setPreco($preco);
    $produto->setDescricao($descricao);
    $produtoDao = new ProdutoDao();
    $produtoDao->adiciona($conexao, $produto);
}
}

<form method="post" action=" ">
    <div class="form-group">
        <label>Nome</label>
        <input type="text" class="form-control" name="nome">
    </div>
    <div class="form-group">
       <label>Descrição</label>
       <input type="text" class="form-control" name="descricao">
    </div>
    <div class="form-group">
       <label>Preço</label>
       <input type="text" class="form-control" name="preco">
    </div>
    <button type="submit" class="btn btn-primary">Adicionar</button>
</form>

1 answer

3


No, it is not possible to call a certain method by action of the form, at least not directly, to action is to access a service (url) in your case I assume it will be a php script:

Note that if action is to run in the same script/file where the form submits most recommended is neither set an action.

1. Example of how to do in your case, if the script that processes the data sent is another file:

<form method="post" action="Produto.php">
   ...
</form>

Product.php

class Produto {

    public function insere($dados) {
        $nome = $dados['nome'];
        $descricao = $dados['descricao'];
        $preco = $dados['preco'];
        ...
    }
}
if($_SERVER['REQUEST_METHOD'] == 'POST') { // aqui é onde vai decorrer a chamada se houver um *request* POST
    $product = new Produto;
    $product->insere($_POST);
}

2. If the script is in the same service (url) from where the data is sent (submission form) can:

<?php
class Produto {
    public function insere($dados) {
        $nome = $dados['nome'];
        $descricao = $dados['descricao'];
        $preco = $dados['preco'];
        ...
    }
}
if($_SERVER['REQUEST_METHOD'] == 'POST') { // aqui é onde vai decorrer a chamada se houver um *request* POST
    $product = new Produto;
    $product->insere($_POST);
}
?>
<form method="post">
    ...
</form>

3. For the case of having two forms for example, one to edit, another to add can do:

<form method="post" action="Produto.php">
    <input type="hidden" name="method" value="insere">
    ...
</form>

<form method="post" action="Produto.php">
    <input type="hidden" name="method" value="edita">
    ...
</form>

Product.php

class Produto {

    public function insere($dados) {
        $nome = $dados['nome'];
        $descricao = $dados['descricao'];
        $preco = $dados['preco'];
        ...
    }
    public function edita($dados) {
        ...
    }
}
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['method'])) { // aqui é onde vai decorrer a chamada se houver um *request* POST
    $method = $_POST['method'];
    if(method_exists('Produto', $method)) {
        $product = new Produto;
        $product->$method($_POST);
    }
    else {
        echo 'Metodo incorreto';
    }
}
  • Actually they are different files. With different files it is not possible then?

  • That’s right. It worked, that’s exactly what I needed, thank you.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.