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

[Dúvida] Not Found The requested URL was not found on this server.

No Curso de PHP e MySQL: Criando uma webapp -> 03. adicionando uma artigo no banco, ao tentar acessar a página no navegador clicando em incluir um artigo (http://localhost/blog/admin/admin/adicionar-artigo.html) aparece o seguinte erro: "Not Found The requested URL was not found on this server.

Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/8.1.10 Server at localhost Port 80"

Segue o código do VSC do arquivo adicionar-artigo.php

<?php

require '../config.php';
require '../src/Artigo.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $artigo = new Artigo($mysql);
    $artigo->adicionar($_POST['titulo'], $_POST['conteudo']);

    //redirecionar
    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>


Segue o código do VSC do arquivo Artigo.php

<?php

class Artigo

{
    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 exibirTodos(): array
    {

        $resultado = $this->mysql->query('SELECT id, titulo, conteudo FROM artigos');

        $artigos = $resultado->fetch_all(MYSQLI_ASSOC); 

    return $artigos;
}

    public function encontrarPorId(string $id): array
    {

        $selecionaArtigo = $this->mysql->prepare("SELECT id, conteudo, titulo FROM artigos WHERE id = ?");
        $selecionaArtigo->bind_param('s', $id);
        $selecionaArtigo->execute();
        $artigo = $selecionaArtigo->get_result()->fetch_assoc();
        return $artigo;

    }


}


Segue o código do VSC do arquivo index.php

<?php

require 'config.php';

include 'src/Artigo.php';

$artigo = new Artigo($mysql);
$artigos = $artigo->exibirTodos();

?>


<!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>
11 respostas

Olá, Guilherme. Tudo bem?

No arquivo index.php da página administrativa você mudou o href para adicionar-artigo.php? Conforme o código abaixo:

<a class="botao botao-block" href="adicionar-artigo.php">Adicionar Artigo</a>

Pelo o que eu entendi você está tentando acessar o arquivo adicionar-artigo.html, porém ele não existe mais, pois você mudou para adicionar-artigo.php

Espero ter ajudado, bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓

Bom dia Vinicius.

Então, o professor disponibilizou os arquivos por github nesse link. https://github.com/alura-cursos/phpweb/tree/aula3 Na via das dúvidas eu copiei o código do github dos arquivos index.php e adicionar-arquivo.php para o meu código mas mesmo assim não funcionou. Na página do meu blog tudo funciona. Já na parte administrativa eu não consegui adicionar um artigo, como eu falei, ao clicar no botão me leva para uma página com erro, conforme imagem abaixo.

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

Na parte administrativa só tem o index.html. Já fora da parte administrativa e da pasta "src" tem o arquivo index.php que está tem o código <a href="artigo.php?id=<?php echo $artigo['id']; ?>">

Já no arquivo adicionar-arquivo.php dentro da parte administrativa também faço referência com o código <form action="adicionar-artigo.php" method="post"> Tirei foto também da organização das minhas pastas.

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

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

Boa tarde Vinícius.

Fiz vários testes aqui e ao clicar no botão vai para a página (http://localhost/blog/admin/admin/adicionar-artigo.html), incorretamente. O certo seria a página (http://localhost/blog/admin/adicionar-artigo.php).

Tanto que quando eu edito diretamente no navegador, a página entra normalmente.

Como eu faço para o botão direcionar para o link correto?

Obrigado!

Olá, Guilherme.

No arquivo index.html da página administrativa você pode adicionar da seguinte maneira:

<a class="botao botao-block" href="admin/adicionar-artigo.php">Adicionar Artigo</a>

Se não resolver me avisa o erro que apareceu :D

Quase!

Está dando o mesmo erro porque a página está com o seguinte endereço: localhost/blog/admin/admin/adicionar-artigo.php

Não sei o por quê de estar saindo "admin" duas vezes no endereço da página se eu coloquei somente um "admin" no "href=admin..."

Você está usando o XAMPP?

Tenta colocar assim no index.html da página administrativa:

<a class="botao botao-block" href="adicionar-artigo.php">Adicionar Artigo</a>

Retira o "admin", e vê o que acontece

Bom dia Vinícius.

Estou usando o XAMPP sim.

Funcionou! Valew mesmo.

Eu queria aproveitar e tirar mais uma dúvida.

Eu continuei o curso e continuei tendo problema na página administrativa, só que agora quando acesso o editar e o excluir nos respectivos botões.

No editar me leva erradamente para a página http://localhost/blog/admin/admin/editar-artigo.php?%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id=1

Já o excluir me leva erradamente para a página http://localhost/blog/admin/admin/excluir-artigo.php?%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id=1

Esse link que o professor disponibilizou do projeto finalizado: https://github.com/alura-cursos/phpweb/tree/aula5

Obrigado mais uma vez

Bom dia, Guilherme. Você verificou se você mudou o formato do arquivo index da página administrativa?

Lembre-se que antes era index.html depois o instrutor altera para index.php, para que ele possa utilizar código PHP nesta página, logo no início da página ele abre a tag PHP e adicione:


<?php

require '../config.php';
include '../src/Artigo.php';

$artigo = new Artigo($mysql);
$artigos = $artigo->exibirTodos();

?>

Lembre-se de verificar que o código abaixo está correto com seu arquivo index da página administrativa:

                    <nav>
                        <a class="botao" href="editar-artigo.php?id=<?php echo $art['id']; ?>">Editar</a>
                        <a class="botao" href="excluir-artigo.php?id=<?php echo $art['id']; ?>">Excluir</a>
                    </nav>

Vi que pelo erro está repetindo o admin. Por isso, retire ele do href

Qualquer dúvida só avisar ;)

Boa tarde Vinícius.

Em relação ao index.php eu já tinha feito certinho. No "href" eu tirei o admin e funcionou!

Eu fui testar todo o blog e tudo funcionou exceto quando vou excluir um artigo. A página entra perguntando se realmente eu desejo excluir o arquivo mas na parte superior aparece os seguintes erros"

Warning: include(../src/Artigo): Failed to open stream: No such file or directory in C:\xampp\htdocs\blog\admin\excluir-artigo.php on line 4 Warning: include(): Failed opening '../src/Artigo' for inclusion (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\blog\admin\excluir-artigo.php on line 4

E quando eu aperto o botão de excluir aparece novamente esses dois erros acima e + 1 erro:

Fatal error: Uncaught Error: Class "Artigo" not found in C:\xampp\htdocs\blog\admin\excluir-artigo.php:9 Stack trace: #0 {main} thrown in C:\xampp\htdocs\blog\admin\excluir-artigo.php on line 9

Eu conferi a minha linha 4 e 9 e está batendo exatamento igual ao do professor:

include '../src/Artigo';
$artigo = new Artigo($mysql);

Bom dia, Guilherme

Troque include por require, pois se ocorrer algum problema na importação de algum arquivo, o require não deixará passar e nos retornará um Fatal error.

Na imagem que você enviou acima dá para ver o arquivo: excluir-artigo.html altere a extensão deste arquivo para excluir-artigo.php.

Outra coisa, quando você clica no botão excluir, qual URL aparece no seu navegador? Certifique-se que o código dos botões da página index administrativa está da seguinte maneira:

  <?php foreach ($artigos as $art){?>
                <div id="artigo-admin">
                    <p> <?= $art['titulo']?> </p>
                    <nav>
                        <a class="botao" href="editar-artigo.php?id=<?= $art['id']?>">Editar</a>
                        <a class="botao" href="excluir-artigo.php?id=<?= $art['id']?>">Excluir</a>
                    </nav>
                </div>
            <?php } ?>

Fico no aguardo :)

solução!

Resolvido.

Obrigado!