[Livro PHP e MySQL] Dúvidas em geral

Qual a versão do php utilizada neste livro?

Olá, @Glauciof! A segunda edição do livro é em PHP 7.

Capitulo 6

if (array_key_exists(‘lista_tarefas’, $_SESSION)) {
lista_tarefas = _SESSION[‘lista_tarefas’];
} else {
$lista_tarefas = [];
}

include “template.php”;

trecho do arquivo template.php
<?php foreach ($lista_tarefas as $tarefa) : ?>

<?php echo $tarefa['nome']; ?>
<?php echo $tarefa['descricao']; ?>
<?php echo $tarefa['prazo']; ?>
<?php echo $tarefa['prioridade']; ?>
<?php echo $tarefa['concluida']; ?>

<?php endforeach; ?>

ERRO

Fatal error : Uncaught TypeError: Cannot access offset of type string on string in C:\xampp\htdocs\tarefas\template.php:52 Stack trace: #0 C:\xampp\htdocs\tarefas\tarefas.php(44): include() #1 {main} thrown in C:\xampp\htdocs\tarefas\template.php on line 52

tentei copiar os códigos disponibilizados no git e apresenta o mesmo erro.

phpmysql/edicao2/afazeres2 at master · InFog/phpmysql · GitHub

Olá, @Johnatan_Viana!

Tenta verificar o que está em $_SESSION['lista_tarefas'] primeiro. Talvez tenha uma string ali e não um array.

Você poderia mudar o if para:

if (array_key_exists(‘lista_tarefas’, $_SESSION) && is_array($_SESSION['lista_tarefas'])) {
  // ...
}

Ou também pode usar print_r() para exibir o conteúdo de $_SESSION['lista_tarefas']:

if (array_key_exists(‘lista_tarefas’, $_SESSION)) {
  echo "lista_tarefas existe e o conteúdo é: ";
  print_r($_SESSION['lista_tarefas']);
  die('Parando o script.');
  // ...
}

Boa noite, sou novo no livro e tbm no PHP, novo na programação em geral.

estou travado na aula de conexão com o banco de dados já pesquisei muito e não consegui resolver o problema, daí encontrei esse forum e venho pedir uma ajuda, agradeço desde já.

estou usando a versão mais nova do PHP 8.

erro que esta apresentando e código abaixo:

Fatal error** : Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, bool given in C:\xampp\htdocs\desafios_do_livro\desafios\banco.php:21 Stack trace: #0 C:\xampp\htdocs\desafios_do_livro\desafios\banco.php(21): mysqli_query(true, ‘select * from c…’) #1 C:\xampp\htdocs\desafios_do_livro\desafios\index.php(50): buscar_contatos(true) #2 {main} thrown in C:\xampp\htdocs\desafios_do_livro\desafios\banco.php on line **21

index.php

<?php

session_start();
include "banco.php";

if (isset($_GET['nome']) && $_GET['nome'] != '') {
    $contato = [];
    $contato['nome'] = $_GET['nome'];

    if (isset($_GET['telefone'])) {
        $contato['telefone'] = $_GET['telefone'];
    } else {
        $contato['telefone'] = '';
    }

    if (isset($_GET['mail'])) {
        $contato['mail'] = $_GET['mail'];
    } else {
        $contato['mail'] = '';
    }

    if (isset($_GET['dtn'])) {
        $contato['dtn'] = $_GET['dtn'];
    } else {
        $contato['dtn'] = '';
    }
    if (isset($_GET['descricao'])) {
        $contato['descricao'] = $_GET['descricao'];
    } else {
        $contato['descricao'] = '';
    }
    if (isset($_GET['sim'])) {
        $contato['sim'] = $_GET['sim'];
    } else {
        $contato['sim'] = 'não';
    }

    $_SESSION['lista_tarefas'][] = $contato;

}

if (isset($conn)) {
    $lista_contato = buscar_contatos($conn);
}


include_once 'template.php';

banco.php

<?php

$bdServidor = '127.0.0.1';
$bdUsuario = 'root';
$bdSenha = 'root';
$bdBanco = 'db_contatos';

$conn = mysqli_connect($bdServidor, $bdUsuario, $bdSenha, $bdBanco);

if (isset($conn)){
    $conn = true;
} else {
    echo "Problemas para conectar no banco. Verifique os dados!";
    exit();
}

function buscar_contatos($conn)
{
    $sqlBusca = 'select * from contatos';

    $results = mysqli_query($conn, $sqlBusca);

    $contatos = [];

    while ($contato = mysqli_fetch_assoc($results)) {
        $contatos[] = $contato;
    }
    return $contatos;
}

Olá! Seja bem vindo ao mundo da programação!

Pelo que eu pude ver o problema está aqui:

if (isset($conn)){
    $conn = true;
} else {
    echo "Problemas para conectar no banco. Verifique os dados!";
    exit();
}

Caso a conexão esteja ok você está trocando o seu valor por true que é boolean. Ou seja, você está “jogando a conexão fora”. Por isso mais para frente o erro informado é que a função mysqli_query() está recebendo um boolean e não uma conexão.

Para resolver faça assim:

if (! $conn){
    echo "Problemas para conectar no banco. Verifique os dados!";
    exit();
}
1 curtida

Bom dia.
evaldojuniorbento, muitíssimo obrigado pelo retorno super rápido.

funcionou certinho aqui, eu apanho muito na hora de elaborar uma lógica daí uma coisa simples acaba se tornando uma dor de cabeça, pelo jeito vou aparecer mais por aqui ^^.

1 curtida

Eu estava com o mesmo problema, apresentava
ERRO
Fatal error : Uncaught TypeError: Cannot access offset of type string on string in C:\xampp\htdocs\tarefas\template.php:52 Stack trace: #0 C:\xampp\htdocs\tarefas\tarefas.php(44): include() #1 {main} thrown in C:\xampp\htdocs\tarefas\template.php on line 52
Ai tentei com esses essas alterações que vc enviou, mas também não adiantou nada, ai tentei apagar os cookies do navegador, ai sim veio a funcionar perfeitamente, ao meu ver, como no capitulo, o 5, anterior cadastramos só o campo ‘nome’, pois os outros campos não existiam, ao tentar usar os novos campos do capitulo 6 algum erro na forma que os dados estavam guardados fazia esse erro acontecer

2 curtidas

OBRIGADO. sumiu o erro, mas agora não aparecem as tarefas.
se puder continuar ajudando. meu erro era o mesmo do colega acima.

Malves, tentei por dois dias solucionar o mesmo problema, refiz o código umas 5 vezes, com sua resposta resolvi, eram os cookies, eu abri em outro navegador. Muito grato meu caro.

1 curtida

[Livro PHP e MySQL] Adicionei tratamento de erro na função gravar_tarefa

Eu sei que não é interessante mostrar erro pro usuário e não sei se depois do capitulo 08 vai mostrar algo parecido, mas tomei a liberdade de criar IF dentro da função porque estava tendo erro não mostrava nada em tela, então criei esse debug abaixo, e espero que ajude a galera.

    // VALIDA O SQL E IMPRIMI CASO DE ERRO
    if(mysqli_query($conexao, $sqlGravar)) {
        header('location: /cap08/tarefas.php');
        exit;
    } else {
        echo '<pre>';  
        var_dump($sqlGravar) ;
        echo '</pre>'; exit;
    }

Olá Evaldo,

estou no final do capitulo 9 e estava indo tudo bem, porém na hora de editar ou remover está dando erro, já revisei todo o código e não consegui resolver, estes são os erros:
Na parte de editar:
Fatal error : Uncaught Error: Call to undefined function buscar_tarefa() in C:\xampp\htdocs\tarefas\editar.php:38 Stack trace: #0 {main} thrown in C:\xampp\htdocs\tarefas\editar.php on line 38

E este na parte do remover:
Fatal error : Uncaught Error: Call to undefined function remover_tarefa() in C:\xampp\htdocs\tarefas\remover.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\tarefas\remover.php on line 5

Boa Tarde David,

Eu ainda não cheguei nesse capitulo, mas pela chamada:

Call to undefined function quer dizer:

Chamada para função indefinida

Verifica se o nome está correto

Ou me chama no Discord e resolvemos juntos, Cleberson Osorio#7778

Olá, @david_top.tricolor. Verifique se você está fazendo o require do arquivo que contém essas funções.

O ideia é boa, @cleberson.osorioti1.

Você também pode usar a função mysqli_error($conexao) para exibir exatamente qual foi o último erro.

Se você não quiser mostrar o erro no navegador, você também pode gravar em um arquivo. Algo como:

<?php
$arquivo = "/tmp/log.log";
$erro = mysqli_error($conexao);
file_put_contents($arquivo, $erro . PHP_EOL);

PHP_EOL é uma super global com o caractere de fim de linha.

Assim você pode ver os erros no arquivo de log e o browser são exibe informações internas da aplicação.

1 curtida

o arquivo que contém estas funções é o banco.php; nele não tem nenhum require… eu estou seguindo as instruções do livro a risca, já revisei 3 vezes o meu código e está exatamente idêntico ao q foi passado no livro até agora, eu posso te passar os códigos por aqui ou por algum outro lugar para vc poder me ajudar??? estou fazendo um estágio e não posso ficar empacado nessa parte do livro, vai atrasar a minha previsão de aprendizagem do conteúdo…

Verifique se nos seus arquivos editar.php e remover.php existe o require __DIR__ . '/banco.php.

Não tem…
devo incluir?

assim msm:
require DIR . '/banco.php. ???

o cleberson.osorioti1 me ajudou com o erro que eu tava tendo, porém agora estou com outro erro na hora de editar:

Notice : Undefined index: id in C:\xampp\htdocs\tarefas\editar.php on line 52

Warning : mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\tarefas\banco.php on line 57