Ir ao conteúdo
  • Cadastre-se
unknn

PHP RESOLVIDO Porque o minha instrução WHERE não está funcionando?

Recommended Posts

##index.php

define('DB_HOSTNAME', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', null);
define('DB_CHARSET', 'utf8');

define('DB_DATABASE', 'publicacoes');

$conn = new PDO('mysql:host=' . DB_HOSTNAME . ';dbname=' . DB_DATABASE . ';charset=' . DB_CHARSET . ';', DB_USERNAME, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$isPost = !empty($_GET['post']);
$slug =  'home';
if ($isPost) {
    $slug = $_GET['post'];
} elseif (!empty($_GET['p'])) {
    $slug = $_GET['p'];
}
try {
    $stmt = $conn->prepare('SELECT `title`, `text`, `capa`, `alt`, `slug` FROM bn_publicacao WHERE `slug` = :slug AND `entry_type` = :entry_type'); 
    $stmt->execute([
        ':entry_type' => $isPost ? 'post' : 'pagina', 
        ':slug' => $slug
    ]);
    if (!$UN = $stmt->fetch(\PDO::FETCH_ASSOC)) {
        
        throw new \InvalidArgumentException('Post title ' . htmlentities($title, \ENT_QUOTES, 'UTF-8', false) . ' not found in database');
    }
    
    $titulo = $shareTitulo = $UN['title'];
    $descricao = $shareDescricao = $UN['text'];
    $ogUrl = $urlCanonico = $UN['capa'];
    $imgAlt = $UN['alt'];
    
    $slug = $UN['slug']; 
    
    
    $keywords = $shareImge = '';
} catch (\InvalidArgumentException $e) {
    header('Location: index.php?p=home'); 
    exit;
} catch (\Exception $e) {
    throw $e;
}

function sanitize($data, $filter = \FILTER_SANITIZE_STRING) {
    if ($data = filter_var(trim($data), $filter)) {
        $data = preg_replace('/http(s)?:\/\//', '', $data);
    }
    
    return $data;
}

$loadPage = null;
if ($sanitizedName = sanitize($isPost ? $titulo : $slug)) {
    $loadPageSuffix = ($isPost ? '/posts/' : '/page_');
    $loadPage =  __DIR__ . $loadPageSuffix . $sanitizedName . '.php';
}
if (null === $loadPage || !is_file($loadPage)) {
    header('HTTP/1.1 404 Not Found'); 
    exit;
}


 $pages = $conn->query('SELECT title, slug FROM bn_publicacao WHERE "entry_type" = "pagina"')
     ->fetchAll(\PDO::FETCH_NUM); 
?>

<!DOCTYPE html>
<html>
<head><title><?php echo htmlentities($titulo, \ENT_QUOTES, 'UTF-8', false); ?></title>
</head>
<body>
    <?php foreach($pages as list($pageTitle, $pageSlug)) { ?>
    <li>
        <a href="?p=<?php echo htmlentities($pageSlug, \ENT_QUOTES, 'UTF-8', false); ?>"><?php echo htmlentities($pageTitle, \ENT_QUOTES, 'UTF-8', false); ?></a>
    </li>
    <?php } ?>

<?php require_once $loadPage; ?>

</body>
</html>
## page_home.php

<?php

    $stmtIDrow1 = 'SELECT * FROM bn_publicacao WHERE "entry_type" = "post"';
    $IDrow1 = $conn->query($stmtIDrow1)->fetchAll();

     ?>

    <?php foreach ($IDrow1 as $IDr1) { ?>
      <a href="index.php?post=<?php echo htmlentities($IDr1['slug'], \ENT_QUOTES, 'UTF-8', false); ?>"><h2><?php echo htmlentities($IDr1['title'], \ENT_QUOTES, 'UTF-8', false); ?></h2></a>
    <?php } ?>

Só está carregando o header e o footer da página, não mostra nenhum erro na página, simplesmente não imprime os registros do Banco de dados, a página fica em branco, só com o header e o footer, já se eu tirar essa parte do código 'WHERE "entry_type" = "post"/"pagina"' os registros são imprimidos normalmente, mas não é assim que ele deve funcionar...

 

Como resolvo isso? Não consegui encontrar o erro.

 

Para sanar qualquer duvida sobre o meu Banco de dados, eu vou deixar duas imagens da minha tela com amostra do meu atual Banco de dados.

 

1378421186_CapturadeTela(193).thumb.png.70623bfb82547660d70a4a561fc4251a.png1378421186_CapturadeTela(193).thumb.png.70623bfb82547660d70a4a561fc4251a.png

Captura de Tela (194).png

Compartilhar este post


Link para o post
Compartilhar em outros sites

@unknn Olá,

não aparece com o where porque parece estar errado.

 

Não se usa aspas duplas ou simples no nome do campo.

 

Ao meu ver o correto seria:

 $stmtIDrow1 = 'SELECT * FROM bn_publicacao WHERE entry_type = "post"';

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 horas atrás, DiF disse:

@unknn Olá,

não aparece com o where porque parece estar errado.

 

Não se usa aspas duplas ou simples no nome do campo.

 

Ao meu ver o correto seria:


 $stmtIDrow1 = 'SELECT * FROM bn_publicacao WHERE entry_type = "post"';

 

Era isso mesmo, valeu!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×