Ir para conteúdo
Fórum Script Brasil
  • 0

Apresentar dados agrupados por dia


Adampt

Pergunta

Olá amigos.

Estou a fazer um site para apresentação dos pratos da semana para um restaurante. Gravo os dados na tabela e tenho um campo "pdiasemana" onde coloco números de 1 a 7 para indicar os dias da semana.

O código que uso para apresentar os dados da tabela é:

<?php
include_once('conect/conect.php');
$loja = $_GET['loja'];

$sqloja = mysqli_query($conectar, "SELECT * FROM tbl_lojas WHERE idloja=$loja");
$lojan = mysqli_fetch_array($sqloja);
?>
<!DOCTYPE html>
<html lang="pt">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Pratos do dia</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.1/css/fontawesome.min.css">
    <link rel="stylesheet" href="css/table.css">

</head>


<body>
    <?php include_once('topmenu.php') ?>
    <section>
        <div class="container">
            <div class="heading">
                <h1> pratos do dia - <?php echo $lojan['loja'] ?></h1>

            </div>
            <?php
            $sql = mysqli_query($conectar, "SELECT * FROM tbl_pdia WHERE pdialoja='$loja' ORDER BY pdiasemana ASC");

            while ($row = mysqli_fetch_array($sql)) {
                $img = $row['pdiaimg'];
                $descricao = $row['pdianome'];
                $caminho = "tablemenu/img_menu/";
                $preço = $row['pdiapreco'];
                $diasemana = $row['pdiasemana'];
            ?>

                <div class="heading h2">
                    <?php switch ($diasemana) {
                        case 1:
                            echo "Domingo";
                            break;
                        case 2:
                            echo "Segunda-feira";
                            break;
                        case 3:
                            echo "Terça-feira";
                            break;
                        case 4:
                            echo "quarta-feira";
                            break;
                        case 5:
                            echo "quinta-feira";
                            break;
                        case 6:
                            echo "sexta-feira";
                            break;
                        case 7:
                            echo "sábado";
                            break;
                    } ?>
                </div>

                <div class="card">
                    <div class="content">
                        <div class="imgBx"><img src=<?php echo $caminho . $img ?>></div>
                        <div class="contentBx">
                            <h3><?php echo $descricao ?><br>
                                <br>
                                <p class="preço"><?php echo $preço . "€" ?></p>
                            </h3>
                        </div>
                    </div>
                </div>
            <?php } ?>

        </div>

    </section>
</body>

</html>

Anexo uma imagem de como os dados estão a ser apresentados e de como eu gostaria que aparecessem.

Já tentei de várias formas e não estou a conseguir.
Podem ajudar-me por favor?

3.jpg

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 1

Prezado sr. @Frank K Hosaka, sua sugestão foi a mais testável de todas.
Só que o database está vazio.
Consegue enviar os inserts para seja possível testarmos?
Ou ainda melhor: Consegue disponibilizar num repositório git?

Editado por lowys
Link para o comentário
Compartilhar em outros sites

  • 0

Olá @Adampt, vamos lá, primeiramente respondendo sua pergunta, vamos ao "gambiarres":

Você pode fazer dois laços de repetição, começando assim:

Laço de repetição(While) de 1 a 7 para acessar a entidade maior(dias da semana) e dentro outro laço de repetição acessando a entidade menor que são os itens.

<div class="heading">
                <h1> pratos do dia - <?php echo $lojan['loja'] ?></h1>

            </div>
            <?php
			$i = 1;
			while(i<=7)
			{
              	switch ($diasemana) {
                        case 1:
                            echo "Domingo";
                            break;
                        case 2:
                            echo "Segunda-feira";
                            break;
                        case 3:
                            echo "Terça-feira";
                            break;
                        case 4:
                            echo "quarta-feira";
                            break;
                        case 5:
                            echo "quinta-feira";
                            break;
                        case 6:
                            echo "sexta-feira";
                            break;
                        case 7:
                            echo "sábado";
                            break;
                    }
              
            	$sql = mysqli_query($conectar, "SELECT * FROM tbl_pdia WHERE pdialoja='$loja' and pdiasemana='$i' ORDER BY pdiasemana ASC");
				
				while ($row = mysqli_fetch_array($sql)) {
                	$img = $row['pdiaimg'];
	                $descricao = $row['pdianome'];
    	            $caminho = "tablemenu/img_menu/";
        	        $preço = $row['pdiapreco'];
                  
                  	echo '<div class="card">
                    <div class="content">
                        <div class="imgBx"><img src=' . $caminho . $img '></div>
                        <div class="contentBx">
                            <h3><?php echo $descricao ?><br>
                                <br>
                                <p class="preço"'. $preço . "€" . '</p>
                            </h3>
                        </div>
                    </div>';
				}
            }
?>

Uma possível melhoria, como os dias da semana são fixos, você poderia dar um SELECT, individualmente por dia da semana, para não precisar de dois laços de repetição, ou seja, você faz seu SELECT dando um WHERE especificamente nos itens daquele dia da semana, assim, você teria acesso aos dados do dia da semana, poderia exibi-los normalmente e no próximo dia você filtra eles novamente.

Agora um pouco fora do tópico, é até difícil contribuir com uma tecnologia tão antiga, recomendo que tente utilizar algum framework como o Laravel, ou pelo menos atue com PDO, tanto por questão de segurança, quanto por questão de aprendizado mesmo.

De qualquer forma, espero ter ajudado, boa sorte.

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela resposta @Robert Souza.

No entanto, já fiz algumas tentativas, mas todas elas sem sucesso, pois dá-me erro nesta parte do código:

echo '<div class="card">
                    <div class="content">
                        <div class="imgBx"><img src=' . $caminho . $img '></div>
                        <div class="contentBx">
                            <h3><?php echo $descricao ?><br>
                                <br>
                                <p class="preço"'. $preço . "€" . '</p>
                            </h3>
                        </div>
                    </div>';

 

Link para o comentário
Compartilhar em outros sites

  • 0

Eu sou péssimo para trabalhar com <div>. Se fosse comigo, eu iria apelar para a <table>, assim:

<?php
// mysql: tbl_pdia(id int,pdiasemana int,pdianome varchar)
// (2,0,prato)(3,0,sopa)(4,0,sobremesa)
// (5,1,prato)(6,1,sopa)(7,1,sobremesa) 0=segunda,1=terça...
$mysqli=new mysqli("localhost","root","","laravel");
$diaDaSemana=['Segunda','Terça']; 
$caminho="./";
$img=$caminho."prato.png";
echo "<table style='width:500;margin:0 auto'>";
foreach($diaDaSemana as $indice => $dia){
    echo "<th><th>$dia<tr>";
    $query=$mysqli->query("select * from tbl_pdia where pdiasemana=$indice");
    while($row=$query->fetch_assoc()){
        echo "<td>".$row['pdianome']."<br><img src=$img width=100 height=100>";}
    echo "<tr>";}  
echo "</table>";

 

 

Captura de tela 2023-10-30 234515.png

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0

Poderia dizer que erro específico está ocorrendo? Pelo código, eu percebi que tem um erro no HTML formado, não sei se é porque aqui formatou errado, ou se no seu código realmente está assim, mas nesse trecho:

<p class="preço"'. $preço . "€" . '</p>

Está faltando um > para fechar o <p

<p class="preço"'. $preço . "€" . '> ALGO AQUI </p>

Sem contar que o class preço, não tenho certeza se class name aceita ç 

Aliás, o mesmo para o nome da variável aqui

 $preço = $row['pdiapreco'];

nome de variável em PHP não pode conter ç

Link para o comentário
Compartilhar em outros sites

  • 0
59 minutos atrás, Frank K Hosaka disse:
<?php
$preço=1.00;
$café=2.50;
echo "$preço $café";
$mysqli=new mysqli("localhost","root","","laravel");
$query=$mysqli->query("select * from tbl_lojabrás");
$row=$query->fetch_assoc();
echo $row['função'];

o meu PHP bem como o MySQL aceitam os acentos utilizados na língua portuguesa.

 

Que legal, não sabia que dava pra fazer isso. Bom, então talvez não seja esse o problema dele. Vamos ver a resposta de qual erro especificamente está ocorrendo.

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui está a minha experiência com grid, só não consegui diminuir o tamanho da imagem.
 

<?php
$conectar=new mysqli("localhost","root","","laravel");
$loja=1;
$sqloja=mysqli_query($conectar,"select * from tbl_lojas where idloja=$loja");
$lojan=mysqli_fetch_array($sqloja); 
$diasDaSemana=['segunda-feira','terça-feira']; //,'quarta-feira','quinta-feira','sexta-feira','sábado','domingo'];?>
<title>Pratos do dia</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" 
    rel="stylesheet">
<div class="w-50 m-auto"><input type=submit value="Top Menu"></div>
<h1 class="w-50 m-auto">Pratos do dia - <?=$lojan['loja']?></h1>
<div class="container w-50">
  <?php foreach($diasDaSemana as $indice=>$dia){ ?>
  <div class=row>
    <div class="col text-center fs-1"><?=$dia?></div>
  </div>
  <div class=row>
  <?php $sql=mysqli_query($conectar,"select * from tbl_pdia where pdialoja=$loja
    and pdiasemana=$indice"); 
    while($row=mysqli_fetch_array($sql)){
        $img="tablemenu/img_menu/".$row['pdiaimg'];
        $descricao=$row['pdianome'];
        $preço=$row['pdiapreco'];?>
  <div class=col>
        <div class=row><img src=<?=$img?>></div>
        <div class=row><div class=text-center><?=$descricao?></div></div>
        <div class=row><div class=text-center><?=$preço?></div></div>
  </div>
  <?php } ?>
  </div>
  <?php } ?>
</div>

A estrutura das tabelas é a seguinte:

CREATE TABLE `tbl_lojas` (
  `idloja` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `loja` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`idloja`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

REATE TABLE `tbl_pdia` (
  `id` int NOT NULL AUTO_INCREMENT,
  `pdiasemana` int NOT NULL,
  `pdianome` varchar(45) DEFAULT NULL,
  `pdialoja` int DEFAULT NULL,
  `pdiaimg` varchar(45) DEFAULT NULL,
  `pdiapreco` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COMMENT='Teste'

 

Captura de tela 2023-11-02 023514.png

Link para o comentário
Compartilhar em outros sites

  • 0
5 horas atrás, lowys disse:

Prezado sr. @Frank K Hosaka, sua sugestão foi a mais testável de todas.
Só que o database está vazio.
Consegue enviar os inserts para seja possível testarmos?
Ou ainda melhor: Consegue disponibilizar num repositório git?

Eu não sei mexer no gitHub, consegui criar o frankhosaka/repositorioDoFrank (github.com), mas como fazer o upload do arquivo sql, isso eu não tenho a menor ideia. Mas posso fazer uma lista:

 

INSERT INTO `tbl_lojas` VALUES (0000000001,'Sabor Vida'),(0000000040,'Maria');

INSERT INTO `tbl_pdia` VALUES (2,0,'prato',1,'prato.png',1),(3,0,'sopa',1,'prato.png',2),(4,0,'sobremesa',1,'prato.png',3),(5,1,'prato',1,'prato.png',4),(6,1,'sopa',1,'prato.png',5),(7,1,'sobremesa',1,'prato.png',6);

Eu segui mais ou menos o primeiro código no início desse tema. Eu trabalhei com apenas um único arquivo png na pasta tablemenu/img_menu.

Para criar o arquivo prato.png eu fiz assim: pedi imagens de prato para o Google, pedi para o Windows 11 capturar a tela, selecionei a figura desejada, e assim criei o arquivo png.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...