Array
(
)

Tratar formulário na mesma página PHP

PHP
Carlos Eduardo
   - 10 ago 2015

Pessoal,
Estou tentando tratar um formulário na mesma página PHP via action. Como?
Tenho uma página index.php com um formulário:
#Código

<form action="index.php?action=autenticar" method=POST>
inputs...
</form>
]

Ele envia esses dado para essa mesma página, porém, quando eu carrego ela no navegador diz que a variável action não é definida/não existe;
Segue o código fonte:
codigo_fonte_12.3.php
#Código
<?PHP

    if($_REQUEST['action'] == 'login')
    {
        if($_POST['CAMPO_USUARIO'] == 'andre' && $_POST['CAMPO_SENHA'] == 'abc123')
        {
            session_start();
            $_SESSION['usuario'] == $_POST['CAMPO_USUARIO'];
            $_SESSION['autenticado'] = 'TRUE';
            header("location: codigo_fonte_12.4.php");
        }
        else
        {
            echo "Seu nome de usuário e senha está incorreto!";
        }
    }
    else
    {
?>

<form action="codigo_fonte_12.3.php?action=login" method="POST">
Digite seu nome:
<input type=text name=CAMPO_USUARIO><BR>
Sigite sua Senha:
<input type=text name=CAMPO_SENHA><BR>
<input type="SUBMIT" value="Autenticar">
</form>
    
<?php } ?>

codigo_fonte_12.4.php
#Código
<?PHP
    session_start();
    if(!isset($_SESSION['autenticado']) || $_SESSION['autenticado'] != TRUE)
    {
        echo "Acesso não autorizado!";
        echo "Por gentileza, faça seu login:
            <a href=\"codigo_fonte_12.3.php\">Clicando aqui</a>";
        exit();
    }
    else
    {
        echo "Você está logado com o usuário: ". $_SESSION['usuario'];
    }
?>

<BR><BR>
Conteúdo privado de sua aplicação!

William (devwilliam)
   - 11 ago 2015

Carlos seu código tem alguns pontos que acabam gerando confusão:

1 - Você informa que vai submeter o formulário via POST mas envia informações via URL também!
#Código

<form action="index.php?action=autenticar" method=POST>


2 - Você verifica se action é igual a 'login', mas passa o valor 'autenticar'
#Código
 if($_REQUEST['action'] == 'login')


3 - Trabalhar aceitando submissões com $_REQUEST não é uma boa prática de segurança.

4 - Nunca trabalhe direto com os parâmetros enviados pela submissão, primeiro trate esses valores, a forma mais simples de fazer isso seria usando expressão ternária:
#Código
$action = (isset($_REQUEST['action'] )) ? $_REQUEST['action']  : '';
$usuario = (isset($_POST['CAMPO_USUARIO'])) ? $_POST['CAMPO_USUARIO'] : '';
$senha = (isset($_POST['CAMPO_SENHA'])) ? $_POST['CAMPO_SENHA'] : '';

Marcio Araujo
   - 11 ago 2015

William, tem algum artigo de sua autoria a respeito desse assunto?

William (devwilliam)
   - 11 ago 2015

rsrs ... Márcio você diz em relação a GET e POST ou sobre formulários em HTML?

Marcio Araujo
   - 11 ago 2015

Sim, que explique bem sobre a questão do post.

William (devwilliam)
   - 11 ago 2015

Ainda não publiquei nada sobre esse assunto mas se for o caso pode ser um tema interessante, geralmente isso causa muita confusão mesmo!

Marcio Araujo
   - 11 ago 2015

Eu e um monte de gente agradece!!!

Carlos Eduardo
   - 11 ago 2015

Olá Willian,
Consegui resolver meu problema:
Na linha 8 do codigo_fonte_13.3.php
#Código

 $_SESSION['usuario'] == $_POST['CAMPO_USUARIO'];

Eu estava fazendo a atribuição errada, a não conseguia exibir o nome no codigo_fonte_13.4.php pois não estava atribuindo a variável do POST.
Agora funciona, porém, a mensagem continua aparecendo por que eu não dei um submit pelo que entendo..

Aconteceu um equivoco ali no primeiro código que passei, não é aquele o form, desculpe me distraí na hora de escrever o post, o form que envia os dados é o do codigo_fonte_13.3.php.

Quanto ao submeter os forms via método POST e passar os parâmetros via url também, teria uma forma mai segura então de enviar vários forms em uma mesma página php?
Por exemplo, tenho um cadastro de produto e de cliente em uma página index.php, ambos separados em abas diferentes, como posso submeter esses formulários tratando-os separados em um mesmo arquivo php?

Outra dúvida, no caso do $_REQUEST, eu teria que usar o $_GET?