2
respostas

Problemas no require

Artigo.php

Ocorreram erros de include para carregar a página adicionar Artigo, consegui resolver o problema acrescentando ../ antes do endereço do arquivo conexao.php no require da classe Artigo.php como podem observar na imagem abaixo, porém essa solução causou erros para carregar a página index. Quando removo ../ antes do endereço do arquivo conexao.php, resolvo o problema na página index, mas volta o problema na página Adicionar Artigo....

Como consigo resolver esse conflito?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

index.php

<?php

require_once 'src/Artigo.php';

$artigo = new Artigos($mysql);
$artigos = $artigo->exibirArtigos();

require_once 'conexao.php';

?>

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

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

<body>
    <div id="container">
        <h1>Meu Blog</h1>
        <?php foreach ($artigos as $artigo) : ?>
            <h2>
                <a href= "artigo.php?id=<?php echo $artigo['id'];?>">
                    <?php echo $artigo['titulo']; ?>
                </a>
            </h2>
            <p>
            <?php echo $artigo['conteudo']; ?>
            </p>
        <?php endforeach ?>
    </div>
</body>

</html>

adicionar-arquivo.php

<?php

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


if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $artigo = new Artigos($mysql);
    $artigo->adicionar($_POST['titulo'], $_POST['conteudo']);

    header('Location: adicionar-artigo.php');
    die();
}

?>


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

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

<body>
    <div id="container">
        <h1>Adicionar Artigo</h1>
        <form action="adicionar-artigo.php" method="post">
            <p>
                <label for="">Digite o título do artigo</label>
                <input class="campo-form" type="text" name="titulo" id="titulo" />
            </p>
            <p>
                <label for="">Digite o conteúdo do artigo</label>
                <textarea class="campo-form" type="text" name="conteudo" id="conteudo"></textarea>
            </p>
            <p>
                <button class="botao">Criar Artigo</button>
            </p>
        </form>
    </div>
</body>

</html>

Artigo.php

<?php

require_once '../conexao.php';

class Artigos
{

    private $mysql;

    public function __construct(mysqli $mysql)
    {
        $this->mysql = $mysql;
    }

    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();
    }

    public function exibirArtigos(): array
    {
        $resultado = $this->mysql->query('SELECT id, titulo, conteudo FROM artigos');
        $artigos = $resultado->fetch_all(MYSQLI_ASSOC);
        return $artigos;
    }

    public function exibirId(string $id): array
    {
        $selecionaArtigo = $this->mysql->prepare('SELECT id, titulo, conteudo FROM artigos WHERE id = ?');
        $selecionaArtigo->bind_param('s', $id);
        $selecionaArtigo->execute();
        $artigo = $selecionaArtigo->get_result()->fetch_assoc();

        return $artigo;
    }
}

conexao.php

<?php

$mysql = new mysqli('localhost', 'root', '', 'blog');

$mysql->set_charset('utf8');


if ($mysql == false) {
    echo 'Erro de conexão';
}

/* ------------------------------------------------------------------------------------------------------------- */
2 respostas

artigo.php

<?php

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

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

?>

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

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

<body>
    <div id="container">
        <h1>
            <?php echo $artigo['titulo']; ?>
        </h1>
        <p>
        <?php echo $artigo['conteudo']; ?>
        </p>
        <div>
            <a class="botao botao-block" href="index.php">Voltar</a>
        </div>
    </div>
</body>

</html>

Print da estrutura de pastas

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá Rodrigo, beleza ? Caso ainda não tenha resolvido o problema tente tirar o require_once e deixar somente como require. Logo após isso tire os dois pontos e coloque a sua pasta onde está o conexão (sem os dois pontos .. ). Ex:

require 'blog/conexao.php';

Caso isso não resolva, tire o conexão da pagina de Artigo.php, não sei se ela está sendo chamada para alguma finalidade específica na conexão.php