Include dentro e fora de função

1. Include dentro e fora de função

Leandro Nkz
leandro

(usa Arch Linux)

Enviado em 10/10/2013 - 11:18h

Olá a todos!

Sou meio iniciante em PHP, e estou com uma dúvida que não sei onde (e como) procurar a resposta. Já tentei procurar mas tudo o que encontrei não tem nada a ver com o meu problema.

Pois bem, eu estou desenvolvendo um projeto para o meu curso: um simples site em PHP/MySQL com geração de pedidos online.

Para facilitar, eu criei um arquivo "mysql.php" com as configurações do banco:


<?php
//Nome do servidor
$db_host = "localhost";

//Usuário do banco
$db_user = "usuario";

//Senha do banco
$db_pass = "senha";

//Nome do banco (database)
$db_name = "database";

//Comando de conexão
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);

//Setando a codificação de caracteres
$mysqli->set_charset('utf8');

?>


E nos scripts que uso o BD, eu simplesmente adiciono:


include $_SERVER['DOCUMENT_ROOT']."/mysql.php";


Que ele retorna a conexão com o BD.

O problema está em um script que exibe os produtos disponíveis (isso é só um exemplo simplificado):




<?php

function checaCarrinho($codigo) {

include $_SERVER['DOCUMENT_ROOT']."/mysql.php";

//Aqui um SELECT que retorna se o produto já está no carrinho

}

?>


<!-- Código HTML -->


<?php

include $_SERVER['DOCUMENT_ROOT']."/mysql.php";


//Aqui um SELECT para pegar todos os produtos


//Aqui um laço para exibir os produtos encontrados:
while () {


//Chama a função checaCarrinho para verificar se o produto já está no carrinho
if (checaCarrinho($codigo_produto) == true) {

echo "Produto adicionado";

} else {

echo "Produto não adicionado";

}


}

?>





O problema está justamente na função checaCarrinho(). Como ela é acionada uma vez a cada iteração, é gerado um include (e uma nova conexão) para cada iteração. Isso deixa o código muito mais pesado e a página demora muito pra carregar.

Se eu tiro o include de dentro da função, ela não funciona.

E agora? Teria como colocar apenas um include no começo do script, e que funcione dentro e fora da função "checaCarrinho"? O mesmo que uma variável Global, só que para include? Isso existe?







  


2. Re: Include dentro e fora de função

CASSIO FERRAZ
cassio88

(usa Ubuntu)

Enviado em 10/10/2013 - 11:32h

há várias formas de você resolver seu problema.

Como você diz que está começando agora no PHP, experimente include_once
O link do site do PHP é
http://php.net/manual/pt_BR/function.include-once.php
depois coloca uma mensagem dizendo se funcionou


3. Re: Include dentro e fora de função

Leandro Nkz
leandro

(usa Arch Linux)

Enviado em 10/10/2013 - 13:43h

cassio88 escreveu:

há várias formas de você resolver seu problema.

Como você diz que está começando agora no PHP, experimente include_once
O link do site do PHP é
http://php.net/manual/pt_BR/function.include-once.php
depois coloca uma mensagem dizendo se funcionou


Obrigado pela força, mas não funcionou. Ele acaba gerando o mesmo erro (Undefined variable "mysqli").

No entanto, eu consegui resolver o problema da lentidão: era o MySQL.

Como uso o XAMPP, no Linux está tudo OK, é rápido. O problema era no Windows. Resolvi pesquisar as configurações do MySQL do meu Windows e vi que a demora estava na resolução de nomes.

Como o script de conexão estava definido como "localhost", em cada include ele tentava resolver o nome para poder conectar. Foi só alterar o arquivo de configuração do MySQL que tudo ficou rápido.

É só editar o arquivo my.ini, descomentar as linhas:


bind-address="127.0.0.1"
bind-address = ::1


E reiniciar o MySQL.

Bom, eu já me dou por satisfeito. Mas se alguém ainda souber um meio de dar apenas um include neste arquivo, eu agradeço, já que isso (abrir apenas uma conexão com o banco) é o meio mais correto.

Um abraço e obrigado cassio88 pela ajuda.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts