Error function not defined

2

Follow the code:

<?php
if (isset($_GET['algumacoisa']) && !empty($_GET['algumacoisa'])) {
    $user = "useradmin";
    $pass = "senha123";
    mysql_connect("localhost", $user, $pass);
    mysql_select_db("meubancodedados");
    $consulta    = mysql_query("select * from teste where Status= '' ");
    $total       = 0;
    $atualizadas = 0;
    while ($linha = mysql_fetch_assoc($consulta)) {
        $total += 1;
        $idpedido = $linha["Pedido"];
        if (verifica($idpedido))
            $atualizadas += 1;
    }
    function verifica($pedido) // Inicio Function Verifica
    {
        // Email cadastrado no Pagamento Digital
        $email       = "[email protected]";
        // Obtenha seu TOKEN entrando no menu Ferramentas do Pagamento Digital
        $token       = "1231232132131";
        $urlPost     = "https://www.pagamentodigital.com.br/transacao/consulta/";
        $transacaoId = $pedido;
        $pedidoId    = $pedido;
        $tipoRetorno = 1;
        $codificacao = 1;
        $ch          = curl_init();
        curl_setopt($ch, CURLOPT_URL, $urlPost);
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array(
            "id_transacao" => $transacaoId,
            "id_pedido" => $pedidoId,
            "tipo_retorno" => $tipoRetorno,
            "codificacao" => $codificacao
        ));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "Authorization: Basic " . base64_encode($email . ":" . $token)
        ));
        /* XML ou Json de retorno */
        $resposta = curl_exec($ch);
        /* Capturando o http code para tratamento dos erros na requisição*/
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        if ($httpCode != "200") {
            echo $httpCode;
            echo "algum erro ocorreu.. tente novamente!";
        } else {
            $xml       = simplexml_load_string($resposta);
            $codstatus = $xml->cod_status;
            $email     = $xml->cliente_email;
            $nome      = $xml->cliente_nome;
            $meio      = $xml->cod_meio_pagamento;

            if ($meio != 10) {

                $meio = "Cartao";
            }
            if ($codstatus == 3) {
                mysql_query(" UPDATE teste SET Status = 'Aprovado' WHERE Pedido = '$pedido' ");
                mysql_query(" UPDATE teste SET Email = '$email' WHERE Pedido = '$pedido' ");
                mysql_query(" UPDATE teste SET Nome = '$nome' WHERE Pedido = '$pedido' ");
                mysql_query(" UPDATE teste SET Meio = '$meio' WHERE Pedido = '$pedido' ");
                return true;
            }

        }
    } // Fim function verifica



    echo "<xml><total>{$total}</total>
<atualizadas>{$atualizadas}</atualizadas></xml>";


} else {

    echo "<meta charset='utf-8'/> Página inválida, movida temporariamente.";
}

?>

Problem is, it gives this error: Fatal error: Call to undefined function checks () in /home/domain/public_html/ctr/atualizes.php on line 13 The line pointed there is this:

if ( verifica($idpedido) ) 

Summarizing why I came here .. if I take this IF / ELSE (the one that checks for a GET request on the page), it works fine again. Yes, I'm giving a get on page, something like .php? Something = test, for my page to get in, but then that gives the error.

Why it will, does not make sense to me!

    
asked by anonymous 10.12.2014 / 02:44

1 answer

4

I could not understand your code very well, and I do not know if it affects PHP, but it tries to declare the function before calling it. As you have noticed @bfavaretto you are declaring your function within if (isset($_GET['algumacoisa']) && !empty($_GET['algumacoisa'])) {

It is recommended that you declare the function outside if() , so that it exists independent of if() .

if ( verifica($idpedido) ) 
     $atualizadas+=1;
}
function verifica($pedido) {

Try this:

<?php
function verifica($pedido) // Inicio Function Verifica
    {
    ...
    }
if(isset($_GET['algumacoisa']) && !empty($_GET['algumacoisa']))
   {
   ... Aqui dentro você faz a chamada da função verifica().
   }
php?>

If you declare a function inside the if it will only exist if the condition of if is satisfied. Exemplifying:

<?php

$criarFuncao = true;

funcao1(); //Essa função será chamada pois mesmo ela sendo declarada no final do código ela sempre será declarada.

if($criarFuncao) {
    function funcao2() {
        echo "A função 2 só será criada quando a condição if($criarFuncao) for satisfeita.";
   } 
}

if($criarFuncao) funcao2(); //Se a condição $criarFuncao for verdadeira, a função será criada no if anterior, e poderá ser chamada na condição atual.

function funcao1() {
    echo "Funcao 1 é criada independente de qualquer condição e pode ser chamada antes ou depois da declaração.";
}

php?>

Credits:

User-defined functions  and bfavaretto's comments.

    
10.12.2014 / 02:55