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

Warning: Undefined array key "id"

Boa tarde,

estou recebendo esse erro:

Warning: Undefined array key "id" in C:\xampp\htdocs\PHP - Alura\D - Php-web\admin\editar-artigo.php on line 8

Fatal error: Uncaught TypeError: Artigos::exibirId(): Argument #1 ($id) must be of type string, null given, called in C:\xampp\htdocs\PHP - Alura\D - Php-web\admin\editar-artigo.php on line 8 and defined in C:\xampp\htdocs\PHP - Alura\D - Php-web\src\Artigo.php:50 Stack trace: #0 C:\xampp\htdocs\PHP - Alura\D - Php-web\admin\editar-artigo.php(8): Artigos->exibirId(NULL) #1 {main} thrown in C:\xampp\htdocs\PHP - Alura\D - Php-web\src\Artigo.php on line 50

alguém consegue me ajudar?

editar-artigo.php

<?php

require_once '../conexao.php';
require_once '../src/Artigo.php';
require_once '../src/Redireciona.php';

$artigo = new Artigos($mysql);
$art = $artigo->exibirId($_GET['id']);

redireciona('/PHP - Alura/D - Php-web/admin/editar-artigo.php');

?>
<!DOCTYPE html>
<html lang="pt-br">

<head>
    <link rel="stylesheet" type="text/css" href="../style.css">
    <meta charset="UTF-8">
    <title>Editar Artigo</title>
</head>

<body>
    <div id="container">
        <h1>Editar Artigo</h1>
        <form action="editar-artigo.php" method="post">
            <p>
                <label for="titulo">Digite o novo título do artigo</label>
                <input class="campo-form" type="text" name="titulo" id="titulo" 
                value="<?php echo $art['titulo']; ?>" />
            </p>
            <p>
                <label for="conteudo">Digite o novo conteúdo do artigo</label>
                <textarea class="campo-form" type="text" name="conteudo" id="titulo">
                    <?php echo $art['conteudo']; ?>
                </textarea>
            </p>
            <p>
                <input type="hidden" name="id" value="" />
            </p>
            <p>
                <button class="botao">Editar Artigo</button>
            </p>
        </form>
    </div>
</body>

</html>

Artigo.php

<?php

/* A finalidade desse arquivo que abriga a classe Artigos é de escrever o código PHP pe irá automatizar
a donstrução e edição de posts na pagina do blog e fazer a conexão com banco de dados
*/

require_once '../conexao.php';

class Artigos
{
    // Inicia a variável $mysql
    private $mysql;

    // Cria a função construtora
    public function __construct(mysqli $mysql)
    {
        $this->mysql = $mysql;
    }

    /*
    Método para enviar os dados para o banco de dados, esse método está relacionado
    com o arquivo adiciona-artigo.php
    */

    public function adicionar(string $titulo, string $conteudo): void
    {
        $insereArtigo = $this->mysql->prepare('INSERT INTO artigos (titulo, conteudo) VALUES(?, ?);');
        $insereArtigo->bind_param('ss', $titulo, $conteudo);
        $insereArtigo->execute();
    }

    // Método criado para excluir os artigos na pagina excluir-artigos
    public function remover(string $id): void
    {
        $removerArtigo = $this->mysql->prepare('DELETE FROM artigos WHERE id = ?');
        $removerArtigo->bind_param('s', $id);
        $removerArtigo->execute();
    }

    public function exibirArtigos(): array
    {
        // Realiza consulta no banco de dados
        $resultado = $this->mysql->query('SELECT id, titulo, conteudo FROM artigos');
        // O método fetch_all retorna um array associativo com valor inteiro
        $artigos = $resultado->fetch_all(MYSQLI_ASSOC);

        return $artigos;
    }

    public function exibirId(string $id): array
    {
        // Realiza consulta no banco de dados
        $selecionaArtigo = $this->mysql->prepare('SELECT id, titulo, conteudo FROM artigos WHERE id = ?');
        // O método bind_param() irá associar o id com o ponte de interrogação
        $selecionaArtigo->bind_param('s', $id);
        // Para executar a  utilizaremos o método execute()
        $selecionaArtigo->execute();
        /* O método execute precisa do método get_result() para ser executado, e iremos retornar como um método
        associativo, utilizaremos o fetch_assoc() para declarar esse retorno
        */
        $artigo = $selecionaArtigo->get_result()->fetch_assoc();

        return $artigo;
    }
}
2 respostas

Sua função exibirID() recebe um parâmetro que é o id certo ? de onde você busca o id ? porque no inicio do código você tenta intercepta-lo com o $_GET[''id], você está passando o id na URL para conseguir intercepta-lo ?

solução!

Boa noite Izaque,

O método GET busca o id passado na URL, conforme explicação do professor.

Consegui descobrir aonde estava o erro. Estava na chamada da função redireciona, essa função não se aplica na pagina editar-artigo.php!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software