Solucionado (ver solução)
Solucionado
(ver solução)
28
respostas

Erro impedindo a inclusão no BD pelo formulario

Boa noite, está dando o seguinte erro ao tentar adicionar no foumlario de cadastro:

Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in C:\Users\ftrav\Desktop\Alura\PHP\loja\adiciona-produto.php:8 Stack trace: #0 {main} thrown in C:\Users\ftrav\Desktop\Alura\PHP\loja\adiciona-produto.php on line 8

Segue código abaixo:

<?php include("cabecalho.php"); ?>

  <h1>Formulário de Cadastro</h1>
    <form action="adiciona-produto.php">
        Nome: <input type="text" name="nome" /><br/>
        Preço: <input type="number" name="preco"   /><br/>

      <input type="submit" value="Cadastrar" />
    </form>
<?php include("rodape.php"); ?>
<?php
include("cabecalho.php");

$nome = $_GET["nome"];
$preco = $_GET["preco"];

$query = "insert into produtos (nome,preco) values ('{$nome}',{$preco})";
$conexao = mysqli_connect('localhost','felipe','123456','loja');


if(mysqli_query($conexao, $query)){
?>
<p class="alert-sucess">Produto <?= $nome; ?>,<?= $preco; ?> adicionado com sucesso!</p>
<?php
}else {
?>
<p class="alert-sucess">O produto <?= $nome;?> não foi adicionado.</p>
<?php
}
?>
28 respostas

Alguem pode me ajudar?

Olá,

O código está correto.

Pela mensagem de erro, a função mysqli_connect não foi encontrada e isso somente acontece se você não tiver instalado em seu computador a extensão mysql do PHP.

Aqui explica como instalar extensões do PHP, caso seu SO seja Windows: http://ir2.php.net/manual/pt_BR/install.windows.extensions.php

Obrigado Professor. Vou tentar instalar aqui e dou a resposta.

Professor, É muito complicado baixar essas bibliotecas. Tem outra forma de fazer isso? Eu desisti pois estava usando o WampServer e tinha ao mesmo tempo o mysql no meu computador pois já tinha feito o curso de Mysql do Alura. Aí tava dando conflito com os dois mysqls tanto o do wampserver como o mysql nativo instalado no computador, aí resolvir instalar na mão o php e usar o servidor web nativo dele, Mas tô vendo que tá dando muito problema. Tem outra forma?

ftravassos,

Na minha visão você deveria:

  1. desinstalar tudo : mysql sozinho, WampServer, php na mão.
  2. Instalar apenas : WampServer versão mais nova.
  3. Instalar opcional o MySQL Workbench, uma interface desktop para o mysql. No WampServer vem o phpmyadmin

Isso vai resolver seu problemas de conflito e vai deixar seu ambiente Apache + PHP + MySQL pronto e limpo.

Faz o seguinte então, acesse o diretório onde está instalado o php no seu computador(acredito que no C:) e procure pelo arquivo de configurações do PHP, que é o php.ini.

Abra esse arquivo com algum editor, ou bloco de notas mesmo, e procure pela seguinte linha:

;extension=php_mysql.dll

Remova o ponto-e-virgula no começo da linha, para habilitar a extensão. Salve o arquivo. Talvez precise reiniciar o Windows =/

Veja se resolve desse jeito.

Obs: dentro do diretório do php deve ter uma pasta chamada ext, que é o diretório onde ficam instaladas as extensões do PHP. Verifique se na sua pasta tem o arquivo libmysqli.dll, se não tiver, baixe nesse link e copie para lá:https://windows.php.net/downloads/releases/php-5.6.36-Win32-VC11-x64.zip

Com o WampServer ou Xampp já vem configurados e instalado a bibliotecas para conectar no MySQL.

  • mysqli (mysqli_connect)
  • mysql
  • PDO

Professor, na pasta eu não ache o libmysql, na pasta tem o phpmysqli.dll, e no link que você postou também não tem o libmysql pra que eu jogue ele dentro da pasta ext. E também não tem o php.ini, tem o php.ini-development e o php.ini-production.

Na verdade acho que é o arquivo phpmysqli.dll mesmo.

Agora é só alterar o php.ini descomentando a linha que citei.

Professor, nã otem como editar esse arquivo phpmysqli.dll.

Não é o arquivo .dll, e sim o php.ini.

Você encontrou ele na sua pasta do PHP ?

Foi aquilo que eu lhe disse, tem dois arquivos : php.ini-development e o php.ini-production. Qual deles?

Ah sim, não tinha visto que você comentou sobre isso.

Edita os dois então, pois não sei qual deles está sendo utilizando ao inicializar o PHP no seu computador.

Nos dois tem essa extensão: For example: ; ; extension=mysqli ; ; When the extension library to load is not located in the default extension ; directory, You may specify an absolute path to the library file: ; ; extension=/path/to/extension/mysqli.so ;

Mais pra baixo um pouco dessa parte, terá uma lista com várias extensões, cada uma em uma linha separada.

Procure pela linha onde tem a do mysql:

;extension=mysqli

e remova o ; inicial

Pronto removido. Posso testar agora?

Sim, remove o ponto-e-virgula nos dois arquivos e testa.

Se não funcionar, reinicia o windows só por garantia.

Reiniciei professor e nada. mesmo erro:

Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in C:\Users\ftrav\Desktop\Alura\PHP\loja\adiciona-produto.php:8 Stack trace: #0 {main} thrown in C:\Users\ftrav\Desktop\Alura\PHP\loja\adiciona-produto.php on line 8

ftravassos,

Com todo respeito ao professor rodrigo-ferreira desinstalar e reinstalar como falei fará seu sofrimento ser menor.

Se está usando o WampServer não edite o arquivo php.ini via gerenciador de arquivos. Edite via menu do wampserver.

Menu > PHP > php.ini

No wampserver 3.1 por padrão são 3 versões do php instalada e para cada versão tem os arquivos

  • php.ini
  • phpForApache.ini
  • php.ini-development
  • php.ini-production

Fora o atalho cridado na pasta wamp\apache\apache\bin que aponta para o php.ini correto.

é uma imagem antiga porém a ideia é mesma. http://blog.techwheels.net/wp-content/uploads/2012/02/WAMP-Server-PHP-Extensions.gif

Outra que mostra como mudar a versão do PHP no WampServer

https://i2.wp.com/www.dimensaotech.com/wp-content/2011/10/image_change_version.gif.png

Fala Bjverde, Na verdade não quero ficar dependente de wamp/xamp ou outra tecnologia que junta todos esses servidores, se você for focar em um cenário real terá que configurar tudo na mão. Por isso que o professor está tentando ajudar. A gente precisa muito se adequar ao cenários real dos servidores. No Linux é bem mais simples fazer as configurações do servidor apache, mysql, php e o restante, porém no Windows é muito complicado. Se não conseguir resolver esse problema eu volto para a solução automatizada do pacote completo do xamp/wamp.

Utilizar um WAMP ou XAMP também seria outra maneira de tornar mais simples as coisas.

Mas como você pretende configurar tudo manualmente, dá mais trabalho, ainda mais por ser windows.

Tem mais uma linha que você precisa editar, que esqueci de mencionar.

No arquivo php.ini procure essa linha e remova o ponto e virgula dela:

;extension_dir = "ext"

Faça isso nos dois arquivos, reinicie e teste novamente.

ftravassos,

resposta resumida:

Boa sorte na escolhe da solução para o problema. Deixei meus dois centavos de contribuição.

Resposta longa:

No momento que você está acredito que o melhor seja abstrair vários destelhe técnicos de infra e focar no aprendizado do PHP.

Sobre Linux ser mais fácil que Windows para configurar apache, mysql, php. Vou te falar que é praticamente o mesmo grau de dificuldade.

Sobre focar em cenário "real" isso vai depender de uma series de fatores. Alguns exemplos:

  • atualmente muitos falam em "Infrastructure as Code" com conteiners e virtualização. Vejas os curso de docker, kubernetes.

  • tem gente que não tem essa experiência e coloca em só em Linux mesmo.

  • tem gente que pega o próprio desktop com windows e coloca wamp/xamp pois o numero de usuário não compensa complicar mais.

Na minha humilde opinião eu achei o Linux muito mais fácil, mas digo que essa é somente minha opinião. E sobre sua contribuição eu não ignorei em nenhum momento, muito pelo contrário todos estão aqui para somar. E queria tentar por essa solução "manual" por tentar ir além do xamp e wamp. Mas como disse, se não conseguir vou voltar a solução "pacotão" com tudo junto.

Professor, fiz as modificações e reiniciei o SO e nada. Dando o mesmo erro de não conseguir fazer a chamada na função mysqli_connect().

solução!

Última tentativa.

Vi aqui que no PHP 7 que teve essa mudança dele vir com os arquivos php.in-development e php.ini-prodution.

Mas parece que você precisa ter o arquivo php.ini mesmo, e o que o pessoal recomenda é renomear algum desses para php.ini.

Faça o teste aí. Dá um rename no arquivo php.ini-development e muda o nome dele para apenas php.ini.

Reinicie e teste novamente.

Fala professor, matou a charada. Depois que renomeei funcionou de primeira. Queria agradecer professor. Obrigado tambem meu amigo bjverde. Eu renomeei o php.ini-production erradamente, mas funcionou. Será que volto e renomeeio o outro.

Legal que deu certo :)

Tanto faz o arquivo, vai funcionar igual.

A diferença é que o production tem algumas configurações específicas, já pensando em um ambiente de produção.

Mas acredito que talvez seja melhor utilizar o development, pois o production pode ter coisas desabilitadas, como exibição de erros, que durante o desenvolvimento podem fazer falta.

Bons estudos!