Call method by form action

2

Is it possible to call a method via post via the form's 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>
    
asked by anonymous 15.11.2016 / 16:53

1 answer

2

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

Note that if action is to be run in the same script where the form is submitted, the more recommended is not to define an action .

1.

<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 which the data is submitted (submitting the form) you 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. In case you have 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';
    }
}
    
15.11.2016 / 17:08