[Livro PHP e MySQL] Dúvidas em geral

php-mysql

#106

Você pode tentar analisar o conteúdo da variável $mysqli antes de passá-la para o construtor da classe RepositorioTarefas. Faça isso usando um print_r(), por exemplo.

require_once "banco.php";

print_r($mysqli); die();

Se o resultado for uma página em branco significa que a conexão com o banco não está funcionando.


#107

Fiz isso antes de criar o construtor e está dando a mesma coisa.

Notice : Undefined variable: mysqli in C:\xampp\htdocs\www\livro1CC\tarefas\classes\RepositorioTarefas.php on line 2

E também depois que a função mysqli_connect é usada no banco.php:

Notice : Undefined variable: mysqli in C:\xampp\htdocs\www\livro1CC\tarefas\banco.php on line 11


#108

Aí está a resposta. A variável $mysqli não foi definida. Verifique se o arquivo banco.php está definindo a variável corretamente.


#109

Revi o capitulo 12.2 para ver se faltou algo, inclui algumas declarações e agora está dizendo que as funções buscar já estão sendo declaradas: Conflito com as novas funções do cap. 14?

Fatal error : Cannot redeclare buscar_tarefas() (previously declared in C:\xampp\htdocs\www\livro1CC\tarefas\banco.php:11) in C:\xampp\htdocs\www\livro1CC\tarefas\banco.php on line 21

<?php

$conexao = mysqli_connect(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_BANCO);

if(mysqli_connect_errno($conexao)){
        echo "Problemas ao conectar no banco. Erro: ";
        echo mysqli_connect_error();
        die();
}

function buscar_tarefas($conexao){
        $sqlBusca = 'SELECT * FROM tarefas ORDER BY `tarefas`.`prioridade` DESC'; $resultado = mysqli_query($conexao, $sqlBusca);

        $tarefas = [];

        while($tarefa = mysqli_fetch_assoc($resultado)){
                $tarefas[] = $tarefa;
        }

        return $tarefas;
}

function buscar_tarefa_byId($conexao, $id) {
        $sqlBusca = 'SELECT * FROM tarefas WHERE id = ' . $id;
        $resultado = mysqli_query($conexao, $sqlBusca);
        return mysqli_fetch_assoc($resultado);
        }

function gravar_tarefa($conexao, $tarefa)
        {
                $sqlGravar = "
                        INSERT INTO tarefas
                        (nome, descricao, prioridade, prazo, concluida)
                        VALUES
                        (
                        '{$tarefa['nome']}',
                        '{$tarefa['descricao']}',
                         {$tarefa['prioridade']},
                        '{$tarefa['prazo']}',
                         {$tarefa['concluida']}
                 )";

        mysqli_query($conexao, $sqlGravar);
}

function editar_tarefa($conexao, $tarefa){
        $sqlEditar = "
                UPDATE tarefas SET
                nome = '{$tarefa['nome']}',
                descricao = '{$tarefa['descricao']}',
                prioridade = {$tarefa['prioridade']},
                prazo = '{$tarefa['prazo']}',
                concluida = {$tarefa['concluida']}
                WHERE id = {$tarefa['id']}
        ";

        mysqli_query($conexao, $sqlEditar);
}

function remover_tarefa($conexao, $id){
        $sqlRemover = "DELETE from tarefas WHERE id = ".$id;

        mysqli_query($conexao, $sqlRemover);
}

function gravar_anexo($conexao, $anexo){
        $sqlGravar = "INSERT INTO anexos
                (tarefa_id, nome, arquivo)
                VALUES
                (
                        {$anexo['tarefa_id']},
                        '{$anexo['nome']}',
                        '{$anexo['arquivo']}'
                )
        ";

        mysqli_query($conexao, $sqlGravar);
}

function buscar_anexos($conexao, $tarefa_id){
        $sqlBusca = "SELECT * FROM anexos WHERE tarefa_id = {$tarefa_id}";
        $resultado = mysqli_query($conexao, $sqlBusca);

        $anexos = [];

        while ($anexo = mysqli_fetch_assoc($resultado)){
                $anexos[] = $anexo;
        }
        return $anexos;
}

function buscar_anexo($conexao, $id){
        $sqlBusca = "SELECT * FROM anexos WHERE id = ".$id;
        $resultado = mysqli_query($conexao, $sqlBusca);

        return mysqli_fetch_assoc($resultado);
}

function remover_anexo($conexao, $id){
        $sqlRemover = "DELETE FROM anexos WHERE id = ".$id;
        mysqli_query($conexao, $sqlRemover);
}
?>

#110

Você está incluindo o arquivo duas vezes?


#111

Resolvi isso e voltou o de novo o problema hauahuah sad

Notice : Undefined variable: mysqli in C:\xampp\htdocs\www\livro1CC\tarefas\tarefas.php on line 10

Fatal error : Uncaught ArgumentCountError: Too few arguments to function RepositorioTarefas::buscar(), 0 passed in C:\xampp\htdocs\www\livro1CC\tarefas\tarefas.php on line 68 and exactly 1 expected in C:\xampp\htdocs\www\livro1CC\tarefas\classes\RepositorioTarefas.php:58 Stack trace: #0 C:\xampp\htdocs\www\livro1CC\tarefas\tarefas.php(68): RepositorioTarefas->buscar() #1 {main} thrown in C:\xampp\htdocs\www\livro1CC\tarefas\classes\RepositorioTarefas.php on line 58


#112

Você pode criar um zip do seu código e me mandar tudo?


#114

Encontrou o problema? Eu ia te mandar privado mas não sei onde fazer isso.


#115

Oi @coder só agora eu consegui olhar o código.

No arquivo banco.php você define uma variável chamada $conexao, mas no arquivo tarefas.php você tenta iniciar o objeto da classe RepositorioTarefas passando uma variável chamada $mysqli.

Duas soluções são possíveis aqui: Renomear a variável $conexao para $mysqli ou usar a variável $conexao quando for iniciar o objeto da classe RepositorioTarefas.


#116

Após a parte sobre sessões, tentei fazer o desafio que seria uma lista de contatos, com o nome o telefone, só que o array sempre limpa e fica somente o ultimo cadastrado, porém, não consegui achar o erro.

<?php session_start();?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Lista de Contatos</title>
</head>
<body>
<form action="">
        <fieldset>
            <legend>Novo Contato</legend>
            <label>
                Nome: 
                <input type="text"name="nome" />
            </label>
            <label>
                Telefone:
                <input type="text" name="telefone"> 
            </label>
            <input type="submit" value="Cadastrar">
        </fieldset>
    </form>
    <?php 
        if(isset($_GET['nome'])){
            $_SESSION['listaContatos']['nome'] = $_GET['nome'];
            $_SESSION['listaContatos']['telefone'] = $_GET['telefone'];
           
        }
        $listaContatos = array();

        if(isset($_SESSION['listaContatos'])){
            $listaContatos = $_SESSION['listaContatos'];
        }
        var_dump($_SESSION['listaContatos']);
    ?>

    <table>
        <tr>
            <tr>Contatos</tr>
        </tr>
        <?php foreach ($listaContatos as $contatos) :?>
            <tr>
                <td><?php echo $listaContatos['nome']; ?></td>
            
                <td><?php echo $listaContatos['telefone']; ?></td>
            </tr> 
        <?php endforeach?>
    </table>
</body>
</html>

#117

Olá @br.ananias.

Eu encontrei alguns erros no seu script. O primeiro é que você sempre coloca os dados do contato no mesmo índice do array, assim ele não cria um novo índice.
O outro é no laço foreach que deve usar a variável $contato internamente e não o $listaContatos.

Eu fiz alguns ajustes no script:

<?php session_start();?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Lista de Contatos</title>
</head>
<body>
<form action="">
        <fieldset>
            <legend>Novo Contato</legend>
            <label>
                Nome:
                <input type="text"name="nome" />
            </label>
            <label>
                Telefone:
                <input type="text" name="telefone">
            </label>
            <input type="submit" value="Cadastrar">
        </fieldset>
    </form>
    <?php
        $listaContatos = array();

        if(isset($_SESSION['listaContatos'])){
            $listaContatos = $_SESSION['listaContatos'];
        }

        if(isset($_GET['nome'])){
            $contato = array();
            $contato['nome'] = $_GET['nome'];
            $contato['telefone'] = $_GET['telefone'];

            $listaContatos[] = $contato;
        }

        $_SESSION['listaContatos'] = $listaContatos;
    ?>

    <table>
        <tr>
            <tr>Contatos</tr>
        </tr>
        <?php foreach ($listaContatos as $contatos) :?>
            <tr>
                <td><?php echo $contatos['nome']; ?></td>

                <td><?php echo $contatos['telefone']; ?></td>
            </tr>
        <?php endforeach?>
    </table>
</body>
</html>

Abraços


#118

Obrigado por esclarecer!!!


#119

Ola,

Na pagina 49 do livro de php com mysql está com o seguinte erro:

Parse error : syntax error, unexpected ‘as’ (T_AS), expecting ‘,’ or ‘)’ in C:\xampp\htdocs\tarefas\tarefas.php on line 34

cujo código esta escrito assim no livro:

<?php foreach ($lista_tarefas as $tarefa) : ?> <?php endforeach; ?>
Tarefas
<?php echo $tarefa; ?>

como posso resolver?


#120

Olá, @dener.

Você já conseguiu resolver este problema?
Eu não consigo ver um erro neste código.

Att.


#121

@evaldojuniorbento voltei a ter problemas com o cap. 14.3, onde fala que se testar já é possível visualizar mas não adicionar, porém não mostra a tabela, apenas o nome. Quando você testou meu código, estava mostrando normalmente? Não consigo encontrar o erro, ta foda :confused:

err


#122

Você habilitou os erros no PHP? Assim fica mais fácil entender o que está acontecendo.


#123

Boa tarde, cara não estou conseguindo realizar o exercício 4.7 que seria um cadastro de contato (nome, número e email), o php me retorna um índice ão definido porem eu estou passando o name no input e $_get para jogá-los dentro do array, se puder me ajudar ou enviar algum link explicando o que está faltando no meio do caminho, segue o código:
<?php
session_start();
?>

<html>
<head>
    <title>Gerenciador de Tarefas</title>
</head>
<body>
    <h1>Gerenciador de Tarefas</h1><!-- Aqui irá o restante do código -->
    <form>
        <fieldset>
            <label>Nome:<input type="text" name="nome" /></label>
            <label>telefone:<input type="text" name="numero" /></label>
            <label>E-mail:<input type="text" name="email" /></label>
            
            <input type="submit" value="Cadastrar" />
        </fieldset>
    </form>
    <?php
    $lista_contato = array();
    
    if (isset($_GET['nome'])) {$_SESSION['lista_contato'][]= $_GET['nome'];
                              }
    if (isset($_GET['numero'])) {$_SESSION['lista_contato'][]=$_GET['numero'];
                              }
    if (isset($_GET['email'])) {$_SESSION['lista_contato'][]= $_GET['email'];
                              }
    if (isset($_SESSION['lista_contato'])) {
        $lista_contato[]= $_SESSION['lista_contato'];
    }   
    ?>
    <table>
        <tr>
            <th>Tarefas</th>
        </tr>
        <?php foreach($lista_contato as $contato):
        ?>
        <tr>
            <td>
<?php echo $contato['nome']; ?>
<?php echo $contato['numero']; ?>
<?php echo $contato['email']; ?>
            </td>
        </tr>
        <?php endforeach; ?>
    </table>
</body>
</html>

#124

evaldojuniorbento olhando agora a resposta que deu para o @br.ananias consegui entender como organizou o código e talvez resolver meu problema (ainda não mexi no meu e testei), mas ainda estou confuso sobre a lógica, pode me explicar por favor?


#125

Olá, @telles.

Pelo que eu entendi você está criando um novo índice no array $_SESSION['lista_contato'] para cada campo do formulário.

Experimente usar a função print_r() no array $_SESSION['lista_contato'], assim:

print_r($_SESSION['lista_contato']);

Você verá algo como:

0 => "nome vindo do form",
1 => "numero ...",
2 => "email ... ",

Mas o correto seria algo como:

0 => array(
    "nome" => "nome vindo do form",
    "numero" => "numero ...",
    "email" => "email ... ",
)

Para que isso aconteça você precisa criar uma nova variável com o contato e depois colocar essa variável (array) dentro da lista:

$contato = array();
    
if (isset($_GET['nome'])) {
    $contato]['nome']= $_GET['nome'];
}
if (isset($_GET['numero'])) {
    $contato]['numero']= $_GET['numero'];
}
if (isset($_GET['email'])) {
    $contato]['email']= $_GET['email'];
}

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

Abraços e bons estudos.