Jump to content

Search the Community

Showing results for tags 'mysql'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Comunidade
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Apresentação de Projectos de Programação
    • Downloads
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Pascal
    • Python
    • Bases de Dados
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • Apresentação de Software
  • Informática
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica e Automação Industrial
    • Matemática
    • Software de Contabilidade, Finanças e Admin. Pública
    • Dúvidas e Discussão de Programação
    • Tutoriais
    • Snippets / Armazém de Código
  • Outras Áreas
    • Notícias de Tecnologia
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categories

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website


GitHub


LinkedIn


Twitter


Facebook

  1. <?php // Require composer autoload require '../pdf/fpdf.php'; $db = new PDO('mysql:host=localhost;dbname=******', 'root', ''); class myPDF extends FPDF { public function header() { $ano = $_POST['ano']; $this->Image('../fimg/image.png', 10, 6, 50); $this->SetFont('arial', 'B', 14); $this->Cell(260, 5, 'RESTRIÇÕES ALIMENTARES', 0, 0, 'C'); $this->Ln(); $this->SetFont('arial', '', 12); $this->Cell(260, 10, 'Ano: ' . $ano, 0, 0, 'C'); $this->Ln(30); } public function footer() { $this->SetY(-15); $this->SetFont('arial', '', 8); $this->Cell(0, 10, 'Página ' . $this->PageNo() . '/{nb}', 0, 0, 'C'); } public function headerTable() { $this->SetFont('arial', 'B', 14); $this->cell(10); $this->cell(260, 10, 'LISTAGEM', 1, 0, 'C'); $this->Ln(); $this->cell(10); $this->SetFont('arial', 'B', 12); //$this->Cell(100, 7, 'Grupo', 1, 0, 'C'); $this->Cell(70, 7, 'País', 1, 0, 'C'); $this->Cell(100, 7, 'Nome', 1, 0, 'C'); $this->Cell(90, 7, 'Restrição', 1, 0, 'C'); $this->Ln(); } public function viewtable($db) { $ano = $_POST['ano']; $this->SetFont('times', '', 9); $stmt = $db->query("SELECT tbl_grupos.*, tbl_inscricoes.*, tbl_elementos_grupos.* FROM tbl_grupos LEFT JOIN tbl_inscricoes ON tbl_grupos.idgrupo = tbl_inscricoes.idgrupo LEFT JOIN tbl_elementos_grupos ON tbl_grupos.idgrupo = tbl_elementos_grupos.idgrupo WHERE tbl_inscricoes.anoinscricao = $ano AND tbl_inscricoes.validado = 1 AND tbl_elementos_grupos.restricoesgel!='Nenhuma' OR tbl_elementos_grupos.restricoesoutrogel!='' GROUP BY tbl_elementos_grupos.nomegel ORDER BY tbl_elementos_grupos.idgrupo ASC"); while ($data = $stmt->fetch(PDO::FETCH_OBJ)) { $this->SetFont('arial', '', 9); $this->cell(10); //$this->cell(100, 7, base64_decode($data->gnome), 1, 0, 'J'); $this->Cell(70, 7, base64_decode($data->gpais), 1, 0, 'C'); $this->Cell(100, 7, base64_decode($data->nomegel), 1, 0, 'C'); $this->Cell(90, 7, $data->restricoesgel . ', ' . $data->restricoesoutrogel, 1, 0, 'C'); $this->Ln(); } } } $pdf = new myPDF(); $pdf->AliasNbPages(); $pdf->AddPage('L', 'A4', 0); $pdf->headerTable(); $pdf->viewtable($db); $pdf->Ln(15); $pdf->Output(); ?> <script src="../js/sweetalert.js"></script> Bom dia. Tenho o código acima para gerar um relatório baseado em 3 tabelas. Preciso que o relatório me apresente apenas os dados relativos a restrições alimentares para os grupos que estejam inscritos e aprovados para participar nas atividades em um determinado ano. Com o código acima, são-me apresentados os dados de todos os elementos que tenham restrições allimentares independentemente do ano para que tenham sido aprovados. Poderiam ajudar-me com esta situação? Já tentei de diversas formas mas não funciona corretamente.
  2. Boa noite, Tenho um arquivo executavel.jar e um Banco de Dados MySQL que fiz com a intenção de ajudar uma amigo, porem mesmo estando funcionando sem erros, me falta o conhecimento para exporta-lo de forma que funcione em outro computador. Poderiam me ajudar a concluir esse projeto. De já, agradeço sua ajuda.
  3. Boa noite amigos, venho mais uma vez humildemente pedir vossa ajuda, estou implementando um pequeno projeto e esbarrei nessa dificuldade, não consigo salvar, atualizar, excluir nem limpar os campos, por favor peço que me ajudem a descobrir esse erro. De já meu muito obrigado. //Classe Menu import java.awt.EventQueue; import javax.swing.JFrame; import java.awt.Panel; import javax.swing.BoxLayout; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import Conexao.DAOPessoas; import Conexao.Pessoas; import javax.swing.JMenuBar; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.event.ActionListener; import java.util.List; import java.awt.event.ActionEvent; public class Menu { private JFrame frame; private JTable table; private JTextField txtDigiteONome; private DAOPessoas dao; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Menu window = new Menu(); window.frame.setVisible(true); } catch (NullPointerException e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } /** * Create the application. * @throws Exception */ public Menu() throws Exception{ try { dao = new DAOPessoas(); initialize(); }catch(Exception e) { JOptionPane.showMessageDialog(null, this,"[ERRO] "+e.getMessage(), 0, null); } } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 600, 450); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.X_AXIS)); frame.setLocationRelativeTo(null); frame.setResizable(true); Panel panel = new Panel(); frame.getContentPane().add(panel); panel.setLayout(null); table = new JTable(); table.setBounds(278, 18, 0, 0); panel.add(table); JMenuBar menuBar = new JMenuBar(); frame.setJMenuBar(menuBar); JButton btnNewButton_1 = new JButton("CADASTRAR"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ try { Cadastro cadastroForm = new Cadastro(); cadastroForm.setVisible(true); }catch(Exception ex) { JOptionPane.showMessageDialog(btnNewButton_1, this,"[ERRO] "+ex.getMessage(), 0, null); } } }); menuBar.add(btnNewButton_1); txtDigiteONome = new JTextField(); txtDigiteONome.setToolTipText(""); menuBar.add(txtDigiteONome); txtDigiteONome.setColumns(10); JButton btnNewButton = new JButton("BUSCAR"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { carregarDados(txtDigiteONome.getText()); } }); menuBar.add(btnNewButton); // JTable e JScrollPane table = new JTable(); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setBounds(10, 50, 560, 300); // Ajuste as dimensões conforme necessário panel.add(scrollPane); carregarDados(""); } public void carregarDados(String nome) { List<Pessoas> lista = dao.listar(); String[] colunas = {"ID","Nome", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}; DefaultTableModel modelo = new DefaultTableModel(colunas, 0); for (Pessoas p : lista) { if (nome.isEmpty() || p.getNome().toUpperCase().contains(nome.toUpperCase())) { Object[] linha = { p.getId(), p.getNome(), p.getAgosto(), p.getSetembro(), p.getOutubro(), p.getNovembro(), p.getDezembro() }; modelo.addRow(linha); } table.setModel(modelo); } } } //Classe Cadastro import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; import Conexao.DAOPessoas; import Conexao.Pessoas; public class Cadastro extends JFrame implements ActionListener{ /** * */ private static final long serialVersionUID = 1L; private JLabel lbID; private JTextField txtID; private JLabel lbNome; private JTextField txtNome; private JLabel lbAgosto; private JCheckBox cbAgosto; private JLabel lbSetembro; private JCheckBox cbSetembro; private JLabel lbOutubro; private JCheckBox cbOutubro; private JLabel lbNovembro; private JCheckBox cbNovembro; private JLabel lbDezembro; private JCheckBox cbDezembro; private JButton btSalvar; private JButton btAtualizar; private JButton btExcluir; private JButton btLimpar; private DAOPessoas dao; public Cadastro() throws Exception { try { dao = new DAOPessoas(); //Configuração visual da rela setTitle("Cadastro dos Esponjinhas"); setSize(350, 350); setLayout(new GridBagLayout()); setResizable(false); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setLocationRelativeTo(null); // Centraliza a janela na tela //Configurando o Layout "x" e "y" do formulário GridBagConstraints gbc = new GridBagConstraints(); Insets margens = new Insets(4,3,4,3); JLabel lbID = new JLabel("ID"); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; // Alinha à esquerda gbc.insets = margens; add(lbID,gbc); JTextField txtID = new JTextField(2); txtID.setEnabled(false); gbc.gridx = 1; gbc.gridy = 0; gbc.fill = GridBagConstraints.HORIZONTAL; // Preenche horizontalmente gbc.insets = margens; add(txtID, gbc); JLabel lbNome = new JLabel("Nome"); gbc.gridx = 0; gbc.gridy = 1; gbc.insets = margens; add(lbNome, gbc); JTextField txtNome = new JTextField(); gbc.gridx = 0; gbc.gridy = 2; gbc.gridwidth = 3; // Ocupa duas colunas gbc.fill = GridBagConstraints.HORIZONTAL; // Preenche horizontalmente gbc.insets = margens; add(txtNome, gbc); JLabel lbAgosto = new JLabel("Agosto"); gbc.gridx = 0; gbc.gridy = 3; gbc.gridwidth = 1; // Restaura gridwidth para 1 gbc.fill = GridBagConstraints.NONE; // Restaura fill para NONE gbc.insets = margens; add(lbAgosto, gbc); JCheckBox cbAgosto = new JCheckBox(); cbAgosto.setSelected(false); gbc.gridx = 1; gbc.gridy = 3; gbc.insets = margens; add(cbAgosto, gbc); JLabel lbSetembro = new JLabel("Setembro"); gbc.gridx = 0; gbc.gridy = 4; gbc.insets = margens; add(lbSetembro, gbc); JCheckBox cbSetembro = new JCheckBox(); cbSetembro.setSelected(false); gbc.gridx = 1; gbc.gridy = 4; gbc.insets = margens; add(cbSetembro, gbc); JLabel lbOutubro = new JLabel("Outubro"); gbc.gridx = 0; gbc.gridy = 5; gbc.insets = margens; add(lbOutubro, gbc); JCheckBox cbOutubro = new JCheckBox(); cbOutubro.setSelected(false); gbc.gridx = 1; gbc.gridy = 5; gbc.insets = margens; add(cbOutubro, gbc); JLabel lbNovembro = new JLabel("Novembro"); gbc.gridx = 0; gbc.gridy = 6; gbc.insets = margens; add(lbNovembro, gbc); JCheckBox cbNovembro = new JCheckBox(); cbNovembro.setSelected(false); gbc.gridx = 1; gbc.gridy = 6; gbc.insets = margens; add(cbNovembro, gbc); JLabel lbDezembro = new JLabel("Dezembro"); gbc.gridx = 0; gbc.gridy = 7; gbc.insets = margens; add(lbDezembro, gbc); JCheckBox cbDezembro = new JCheckBox(); cbDezembro.setSelected(false); gbc.gridx = 1; gbc.gridy = 7; gbc.insets = margens; add(cbDezembro, gbc); JButton btSalvar = new JButton("Salvar"); gbc.gridx = 0; gbc.gridy = 8; gbc.insets = margens; add(btSalvar, gbc); JButton btAtualizar = new JButton("Atualizar"); gbc.gridx = 1; gbc.gridy = 8; gbc.insets = margens; add(btAtualizar, gbc); JButton btExcluir = new JButton("Excluir"); gbc.gridx = 2; gbc.gridy = 8; gbc.insets = margens; add(btExcluir, gbc); JButton btLimpar = new JButton("Limpar"); gbc.gridx = 3; gbc.gridy = 8; gbc.insets = margens; add(btLimpar,gbc); btSalvar.addActionListener(this); btAtualizar.addActionListener(this); btExcluir.addActionListener(this); btLimpar.addActionListener(this); setVisible(true); }catch(Exception e) { JOptionPane.showMessageDialog(this,e.getMessage()); } } public void salvar() { try{ Pessoas pessoas= new Pessoas(); //Verifica se o campo está vaisio String nome = txtNome.getText(); if (nome.isEmpty()) { JOptionPane.showMessageDialog(this, "O campo Nome não pode estar vazio.", "Erro de Validação", JOptionPane.ERROR_MESSAGE); return; } pessoas.setNome(nome); pessoas.setAgosto(cbAgosto.isSelected()); pessoas.setSetembro(cbSetembro.isSelected()); pessoas.setOutubro(cbOutubro.isSelected()); pessoas.setNovembro(cbNovembro.isSelected()); pessoas.setDezembro(cbDezembro.isSelected()); dao.salvar(pessoas); JOptionPane.showMessageDialog(this,"Salvo com sucesso!"); }catch(Exception e){ JOptionPane.showMessageDialog(this,"Erro ao Salvar! "+e.getMessage()); } } public void excluir(){ try{ Pessoas pessoas = new Pessoas(); pessoas.setNome(txtNome.getText()); dao.excluir(pessoas); JOptionPane.showMessageDialog(this,"Excluido com sucesso!"); }catch(Exception e){ JOptionPane.showMessageDialog(this,"Exclusão mal sucedida!"); } } public void atualizar(){ try{ Pessoas pessoas = new Pessoas(); pessoas.setId(Integer.parseInt(txtID.getText())); pessoas.setNome(txtNome.getText()); pessoas.setAgosto(cbAgosto.isSelected()); pessoas.setSetembro(cbSetembro.isSelected()); pessoas.setOutubro(cbOutubro.isSelected()); pessoas.setNovembro(cbNovembro.isSelected()); pessoas.setDezembro(cbDezembro.isSelected()); dao.atualizar(pessoas); JOptionPane.showMessageDialog(this,"Atualizado com sucesso!"); }catch(Exception e){ JOptionPane.showMessageDialog(this,"Erro ao Atualizar!"); } } public void limpar(){ txtID.setText(""); txtNome.setText(""); cbAgosto.setSelected(false); cbSetembro.setSelected(false); cbOutubro.setSelected(false); cbNovembro.setSelected(false); cbDezembro.setSelected(false); } public void actionPerformed(ActionEvent pessoas){ if (pessoas.getSource() == btSalvar) { salvar(); } else if (pessoas.getSource() == btAtualizar) { atualizar(); } else if (pessoas.getSource() == btExcluir) { excluir(); } else if (pessoas.getSource() == btLimpar) { limpar(); } } } //Classe DAOPessoas package Conexao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.swing.JOptionPane; public class DAOPessoas { private Connection con = null; private PreparedStatement stmt = null; private ResultSet rs = null; public DAOPessoas() throws SQLException, ClassNotFoundException{ try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/confra","root",""); }catch(SQLException e) { JOptionPane.showMessageDialog(null, e.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE); }catch (ClassNotFoundException ex) { System.out.println("Erro: Não encontrou o driver do BD."); ex.printStackTrace(); } } public void desconectar(Connection con) throws SQLException{ try { if (con != null && !con.isClosed()) { con.close(); System.out.println("Desconectou do banco de dados."); } } catch (SQLException ex) { System.out.println("Não conseguiu desconectar do BD."); ex.printStackTrace(); } } public void salvar(Pessoas pessoas) throws Exception{ try { stmt = con.prepareStatement("INSERT INTO PESSOAS(NOME, AGOSTO, SETEMBRO, OUTUBRO, NOVEMBRO, DEZEMBRO) VALUES(?,?,?,?,?,?)"); stmt.setString(1, pessoas.getNome()); stmt.setBoolean(2, pessoas.getAgosto()); stmt.setBoolean(3, pessoas.getSetembro()); stmt.setBoolean(4, pessoas.getOutubro()); stmt.setBoolean(5, pessoas.getNovembro()); stmt.setBoolean(6, pessoas.getDezembro()); stmt.executeUpdate(); }finally { if (stmt != null) { stmt.close(); } if (con != null) { desconectar(con); } } } public void atualizar(Pessoas pessoas) throws Exception{ try { stmt = con.prepareStatement("UPDATE PESSOAS SET NOME = ?, AGOSTO = ?, SETEMBRO = ?, OUTUBRO = ?, NOVEMBRO = ?, DEZEMBRO = ? WHERE ID = ?"); stmt.setString(1, pessoas.getNome()); stmt.setBoolean(2, pessoas.getAgosto()); stmt.setBoolean(3, pessoas.getSetembro()); stmt.setBoolean(4, pessoas.getOutubro()); stmt.setBoolean(5, pessoas.getNovembro()); stmt.setBoolean(6, pessoas.getDezembro()); stmt.setInt(7, pessoas.getId()); stmt.executeUpdate(); }finally { if (stmt != null) { stmt.close(); } if (con != null) { desconectar(con); } } } public void excluir(Pessoas pessoas)throws Exception{ try { stmt = con.prepareStatement("DELETE FROM PESSOAS WHERE NOME = ?"); stmt.setString(1,pessoas.getNome()); stmt.executeUpdate(); }finally { if (stmt != null) { stmt.close(); } if (con != null) { desconectar(con); } } } public List<Pessoas> listar() { List<Pessoas> lista = new ArrayList<>(); try { String sql = "SELECT * FROM PESSOAS"; stmt = con.prepareStatement(sql); rs = stmt.executeQuery(); while (rs.next()) { Pessoas pessoa = new Pessoas(); pessoa.setId(rs.getInt("ID")); pessoa.setNome(rs.getString("NOME")); pessoa.setAgosto(rs.getBoolean("AGOSTO")); pessoa.setSetembro(rs.getBoolean("SETEMBRO")); pessoa.setOutubro(rs.getBoolean("OUTUBRO")); pessoa.setNovembro(rs.getBoolean("NOVEMBRO")); pessoa.setDezembro(rs.getBoolean("DEZEMBRO")); lista.add(pessoa); } }catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); }if (stmt != null) { stmt.close(); }if (con != null) { desconectar(con); } } catch (SQLException e) { e.printStackTrace(); } } return lista; } } //Classe Pessoas package Conexao; public class Pessoas { //Objetos da classe private int id; private String nome; private Boolean agosto; private Boolean setembro; private Boolean outubro; private Boolean novembro; private Boolean dezembro; //Getters e Setters public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Boolean getAgosto() { return agosto; } public void setAgosto(Boolean agosto) { this.agosto = agosto; } public Boolean getSetembro() { return setembro; } public void setSetembro(Boolean setembro) { this.setembro = setembro; } public Boolean getOutubro() { return outubro; } public void setOutubro(Boolean outubro) { this.outubro = outubro; } public Boolean getNovembro() { return novembro; } public void setNovembro(Boolean novembro) { this.novembro = novembro; } public Boolean getDezembro() { return dezembro; } public void setDezembro(Boolean dezembro) { this.dezembro = dezembro; } }
  4. Boa noite amigos. Tenho uma página web para apresentar os dados da tabela, os quais deverão ser separados por categoria e uso o seguinte código: <div class="container" style="align-items:center; width:90%"> <?php $categorias = mysqli_query($conectar, "SELECT * FROM tbl_cateventos ORDER BY idcatevento ASC"); $linhas2 = mysqli_fetch_array($categorias); $total = mysqli_num_rows($categorias); $i = 1; while ($i <= $total) : $catdesc = mysqli_query($conectar, "SELECT * FROM tbl_cateventos WHERE idcatevento=$i"); $catresulta = mysqli_fetch_array($catdesc); ?> <div class="heading"> <h1> <?php echo $catresulta['descatevento'] . ' - ' . $i ?> </h1> </div> <?php $sql = mysqli_query($conectar, "SELECT * FROM tbl_menueventos WHERE categoria=$i ORDER BY descritivo ASC"); ?> <table id="example" class="table table-striped table-bordered"> <thead> <tr> <th>Descritivo</th> <th>Preço por unidade</th> <th>Preço por pessoa</th> <th>Preço por Kg</th> <th>Tabuleiro p/ 4 pessoas</th> <th>Tabuleiro p/ 6 pessoas</th> <th>Tabuleiro p/ 10 pessoas</th> <th>Tabukeiro p/ 15 pessoas</th> <th>Mínimo para encomenda</th> </tr> </thead> <?php while ($linhas = mysqli_fetch_array($sql)) : echo "<tr>"; echo "<td>" . $linhas['descritivo'] . "</td>"; echo "<td>" . $linhas['unidade'] . "</td>"; echo "<td>" . $linhas['pessoa'] . "€" . "</td>"; echo "<td>" . $linhas['kg'] . "€" . "</td>"; echo "<td>" . $linhas['tab4'] . "€" . "</td>"; echo "<td>" . $linhas['tab6'] . "€" . "</td>"; echo "<td>" . $linhas['tab10'] . "€" . "</td>"; echo "<td>" . $linhas['tab15'] . "€" . "</td>"; echo "<td>" . $linhas['minimo'] . "</td>"; endwhile; $i++; endwhile; ?> </table> </div> Acontece que os dados são apresentados, mas os dados referentes ao código do primeiro evento aparecem associados ao segundo código e assim sucessivamente, sendo que os dados referentes ao último código não são apresentados.
  5. Boa noite, estou a desenvolver um projecto e gostaria da vossa opinião, em uma tabela vou colocar um campo com o numero do processo: Exemplo: 2024/0001 2024/0002 Esse número será fechado ano a ano. Por ter a barra ( / ) coloco como tipo varchar com tamanho 9 ou o que aconselham?
  6. Classe inicial import GUI.Tela; /* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license */ /** * * @author User */ public class Principal { public static void main(String[] args) { Tela tela = new Tela(); tela.setVisible(true); } } Este é o DAO: package Conexao; import OBJ.Residencia; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; /** * * @author User */ public class DAO { private Connection con = null; private PreparedStatement stmt = null; private ResultSet rs = null; public DAO() throws Exception{ Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/locar","root",""); } public void incluir(Residencia residencia) throws Exception{ stmt = con.prepareStatement("INSERT INTO CAD(NOME, ENDERECO, ESTADO, IPTU, TIPO) VALUES(?,?,?,?,?)"); stmt.setString(1, residencia.getNome()); stmt.setString(2, residencia.getEndereco()); stmt.setString(3, residencia.getEstado()); stmt.setDouble(4, Double.valueOf(residencia.getIptu())); stmt.setString(5, residencia.getTipo()); stmt.executeUpdate(); stmt.close(); } public void alterar(Residencia residencia) throws Exception{ stmt = con.prepareStatement("UPDATE CAD SET NOME = ?, ENDERECO = ?, ESTADO = ?, IPTU = ?, TIPO = ? WHERE CODIGO = ?"); stmt.setString(1, String.valueOf(residencia.getCodigo())); stmt.setString(2, residencia.getNome()); stmt.setString(3, residencia.getEndereco()); stmt.setString(4, residencia.getEstado()); stmt.setDouble(5, residencia.getIptu()); stmt.setString(6, residencia.getTipo()); stmt.executeUpdate(); stmt.close(); } public void excluir(Residencia residencia) throws Exception{ stmt = con.prepareStatement("DELETE FROM CAD WHERE CODIGO = ?"); stmt.setInt(1, residencia.getCodigo()); stmt.executeUpdate(); stmt.close(); } public void consultar(Residencia residencia) throws Exception{ stmt = con.prepareStatement("SELECT * FROM CAD WHERE CODIGO = ?"); stmt.setInt(1 , residencia.getCodigo()); rs = stmt.executeQuery(); if(rs.next()){ residencia.setCodigo(rs.getInt(1)); residencia.setNome(rs.getString(2)); residencia.setEndereco(rs.getString(3)); residencia.setEstado(rs.getString(4)); residencia.setIptu(rs.getDouble(5)); residencia.setTipo(rs.getString(6)); } stmt.close(); } } Aqui temos a classe que capta os dados e cuida do grafico package GUI; import Conexao.DAO; import OBJ.Residencia; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.WindowConstants; /** * * @author User */ public class Tela extends JFrame implements ActionListener { private JLabel lbNome = null; private JTextField txtNome = null; private JLabel lbCodigo = null; private JTextField txtCodigo = null; private JLabel lbEstado = null; private JComboBox<String> cbEstado = null; private JLabel lbIPTU = null; private JTextField txtIPTU = null; private JRadioButton rbCasa = null; private JRadioButton rbApartamento = null; private ButtonGroup bgEscolha = null; private JLabel lbEndereco = null; private JTextField txtEndereco = null; private JButton bntIncluir = null; private JButton bntAlterar = null; private JButton bntExcluir = null; private JButton bntConsultar = null; private JButton bntLimpar = null; private JButton bntSair = null; private DAO dao; public Tela(){ super("SYS LOCAÇÂO"); try{ dao = new DAO(); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setLayout(new FlowLayout()); setSize(600,200); setResizable(false); setLocationRelativeTo(null); String[] estados = { " - ESCOLHA - ", "ALAGOAS", "BAHIA", "CEARÁ", "MARANHÃO", "PIAUÍ", "PARAIBA", "PERNAMBUCO", "RIO GRANDE DO NORTE", "SERGIPE" }; lbEndereco = new JLabel(); lbEndereco.setText("Endereço: "); txtEndereco = new JTextField(45); rbCasa = new JRadioButton("Casa"); rbCasa.setSelected(true); rbApartamento = new JRadioButton("Apartamento"); bgEscolha = new ButtonGroup(); bgEscolha.add(rbCasa); bgEscolha.add(rbApartamento); lbNome = new JLabel(); lbNome.setText("Nome: "); txtNome = new JTextField(45); lbCodigo = new JLabel(); lbCodigo.setText("Código: "); txtCodigo = new JTextField(10); lbEstado = new JLabel(); lbEstado.setText("Estado: "); cbEstado = new JComboBox<>(estados); lbIPTU = new JLabel(); lbIPTU.setText("Valor IPVA: "); txtIPTU = new JTextField(45); bntIncluir = new JButton(); bntIncluir.setText("Incluir"); bntAlterar = new JButton(); bntAlterar.setText("Alterar"); bntExcluir = new JButton(); bntExcluir.setText("Excluir"); bntConsultar = new JButton(); bntConsultar.setText("Consultar"); bntLimpar = new JButton(); bntLimpar.setText("Limpar"); bntSair = new JButton(); bntSair.setText("Sair"); rbCasa.addActionListener(this); rbApartamento.addActionListener(this); bntIncluir.addActionListener(this); bntAlterar.addActionListener(this); bntExcluir.addActionListener(this); bntConsultar.addActionListener(this); bntLimpar.addActionListener(this); bntSair.addActionListener(this); add(lbCodigo); add(txtCodigo); add(rbCasa); add(rbApartamento); add(lbEstado); add(cbEstado); add(lbNome); add(txtNome); add(lbEndereco); add(txtEndereco); add(lbIPTU); add(txtIPTU); add(bntIncluir); add(bntAlterar); add(bntExcluir); add(bntConsultar); add(bntLimpar); add(bntSair); }catch(Exception e){ JOptionPane.showMessageDialog(rootPane, "[ERRO] - "+e.getMessage()); } } private void incluir(){ try{ Residencia imovel = new Residencia(); if (rbCasa.isSelected()) { imovel.setTipo("Casa"); } else if (rbApartamento.isSelected()) { imovel.setTipo("Apartamento"); } imovel.setNome(txtNome.getText()); imovel.setEndereco(txtEndereco.getText()); imovel.setEstado(String.valueOf(cbEstado.getSelectedItem())); imovel.setIptu(Double.valueOf(txtIPTU.getText())); dao.incluir(imovel); JOptionPane.showMessageDialog(rootPane, "Inclusão efetuada com sucesso!"); }catch(Exception e){ JOptionPane.showMessageDialog(rootPane, "Erro ao tentar Incluir!"+ e.getMessage()); } } private void alterar(){ try{ Residencia imovel = new Residencia(); imovel.setCodigo(Integer.valueOf(txtCodigo.getText())); imovel.setNome(txtNome.getText()); imovel.setEndereco(txtEndereco.getText()); imovel.setEstado(String.valueOf(cbEstado.getSelectedItem())); imovel.setIptu(Double.valueOf(txtIPTU.getText())); if (rbCasa.isSelected()) { imovel.setTipo("Casa"); } else if (rbApartamento.isSelected()) { imovel.setTipo("Apartamento"); } dao.alterar(imovel); JOptionPane.showMessageDialog(rootPane, "Alteração efetuada com sucesso!"); }catch(Exception e){ JOptionPane.showMessageDialog(rootPane, "Erro ao tentar Alterar!"+ e.getMessage()); } } private void excluir(){ try{ Residencia imovel = new Residencia(); imovel.setCodigo(Integer.valueOf(txtCodigo.getText())); dao.excluir(imovel); JOptionPane.showMessageDialog(rootPane, "Exclusão efetuada com sucesso!"); }catch(Exception e){ JOptionPane.showMessageDialog(rootPane, "Erro ao tentar Excluir!"); } } private void consultar(){ try{ Residencia imovel = new Residencia(); imovel.setCodigo(Integer.valueOf(txtCodigo.getText())); dao.consultar(imovel); txtCodigo.setText(String.valueOf(imovel.getCodigo())); txtNome.setText(imovel.getNome()); txtEndereco.setText(imovel.getEndereco()); cbEstado.setSelectedItem(imovel.getEstado()); txtIPTU.setText(String.valueOf(imovel.getIptu())); if (imovel.getTipo().equals("Casa")) { rbCasa.setSelected(true); } else { rbApartamento.setSelected(true); } }catch(Exception e){ JOptionPane.showMessageDialog(rootPane, "Erro ao tentar Consultar!"+ e.getMessage()); } } private void limpar(){ txtCodigo.setText(null); txtNome.setText(null); txtEndereco.setText(null); txtIPTU.setText(null); cbEstado.setSelectedIndex(0); } private void sair(){ dispose(); } public void actionPerformed(ActionEvent aux){ if(aux.getSource() == bntIncluir){ incluir(); }else if(aux.getSource() == bntAlterar){ alterar(); }else if(aux.getSource() == bntExcluir){ excluir(); }else if(aux.getSource() == bntConsultar){ consultar(); }else if(aux.getSource() == bntLimpar){ limpar(); }else if (aux.getSource() == bntSair){ sair(); } } } Aqui a Classe que recebe os dados: package Negocios; /** * * @author User */ public class Produtos { private String codigo; private String descricao; private double valorUnit; private int qtEstoque; public String getCodigo() { return codigo; } public void setCodigo(String codigo) { this.codigo = codigo; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public double getValorUnit() { return valorUnit; } public void setValorUnit(double valorUnit) { this.valorUnit = valorUnit; } public int getQtEstoque() { return qtEstoque; } public void setQtEstoque(int qtEstoque) { this.qtEstoque = qtEstoque; } } Baco de dados: CREATE TABLE CAD( CODIGO INT PRIMARY KEY AUTO_INCREMENT, NOME VARCHAR(40) NOT NULL, ENDERECO VARCHAR(40) NOT NULL, ESTADO VARCHAR(20) NOT NULL, IPTU DOUBLE NOT NULL, TIPO VARCHAR(20) );
  7. Boa noite a todos, Tenho um projeto para cadastro de produtos, existem dois campos (valor de compra e valor de venda) que são em euros, ou seja, por exemplo 300.0€ Já coloquei na Base de dados MYSQL o tipo "decimal" e "int" mas recebo o seguinte erro: SQLSTATE[01000]: Warning: 1265 Data truncated for column 'compra' at row 1 Que tipo devo utilizar?
  8. Boa tarde, Alguém por aqui pode ajudar: Como posso criar um grupo de distribuição através do php. A ideia será poder criar um grupo de distribuição através de php/msql e ele coloque os email desse grupo agrupados no PARA do Outlook. Isto é em vez de colocar p.e.: exemplo1@sapo.pt; exemplo2@yahoo.com; exemplo3@gmail.com Colocaria + Nome do Grupo Julgo que consegui explicar-me.
  9. Bom dia, Tenho uma função para validar se os documentos já foram cadastrado com outro técnico. Mas preciso verificar o tipo do documento e o número do documento e ignorando o proprio id. Mas preciso que tudo seja verdadeiro, mas infelizmente não devolve resultado. O que errei? public function validateDocuments(int $tipodoc, string $docIdentify, string $paisnif, string $nif, bool|null $edit = null, int|null $id = null): void { $this->tipodoc = $tipodoc; $this->docIdentify = $docIdentify; $this->paisnif = $paisnif; $this->nif = $nif; $this->edit = $edit; $this->id = $id; $verifyDocuments = new \App\adms\helpers\AdmsRead(); if (($this->edit == true) and (!empty($this->id))) { $verifyDocuments->fullRead("SELECT id FROM adms_tecnicos WHERE (tipodoc=:tipodoc AND numero_doc=:numero_doc AND paisnif=:paisnif AND nif=:nif AND id <>:id) LIMIT :limit", "tipodoc={$this->tipodoc}&numero_doc={$this->docIdentify}&paisnif={$this->paisnif}&nif={$this->nif}&id={$this->id}&limit=1"); } else { $verifyDocuments->fullRead("SELECT id FROM adms_tecnicos WHERE id =:id LIMIT :limit", "id={$this->id}&limit=1"); } $this->resultBd = $verifyDocuments->getResult(); if (!$this->resultBd) { $this->result = true; } else { $this->utils->setSessionMsg('Erro: Técnico já cadastrado, por favor verifique!', 'danger'); $this->result = false; } }
  10. Boa noite. Eu estou a criar uma base de dados com contactos. O que eu gostava de fazer era o seguinte. Eu estou a listar todos os contactos numa tabela e depois posso clicar no botão à frente do contacto e ele redireciona-me para outra pagina com os dados desse respetivo contacto. Eu estou a passar o id desse contacto através da URL. Mas eu gostaria de esconder o ID e ficar apenas com a url p.e www.contactos.viewcontact.php. O meu codigo é este: while($dados_viewuser = mysqli_fetch_array($result_viewuser, MYSQLI_ASSOC)) { echo'<tr class="odd">'; echo '<td class="dtr-control sorting_1" tabindex="0" id="" name="">'.$dados_viewuser['id_user'] ;'</td>'; echo '<td id="" name="">' .$dados_viewuser['nome_user']; '</td>'; if($dados_viewuser['estado_user']=='1'){ echo '<td id="estado_user" name="estado_user">Ativo</td>'; } else { echo '<td id="estado_user" name="estado_user">Inativo</td>'; } echo '<td id="" name="">' .$dados_viewuser['dataregisto_user']; '</td>'; printf ('<td><a class="btn-xs btn-success" href="/edit_user.php?idedit=%d"><i class="fa fa-edit"></i>&nbsp; View </a></td>',$dados_viewuser['id_user']); echo '</tr>'; $number++; } Estou a passar o valor através da tag <a>. Como posso passar essa variavel mas escondida no URL para não mostrar o ID.
  11. Boa noite pessoal, uma pessoa amiga ajudou me a preencher os campos selects conforme precisava, e os louvores são dele e não meu. Mas preciso da vossa ajuda para o seguinte: Conforme clico no botão cadastrar e é encontrado algum erro ou falta algum campo obrigatório, nos campos selects não recupera os dados que selecionei e nos outros campos sim. Espero que alguém possa me ajudar. Criamos uma view da seguinte forma: <div class="column"> <label for="adms_distrito_id" class="title-input">Distrito:<span class="text-danger">*</span> </label> <select class="input-adm" name="adms_distrito_id" id="adms_distrito_id" data-autofill data-target='#adms_concelho_id' data-href='load-concelhos/index'> <option value="">Carregando...</option> </select> <div class="content-adm-alert"></div> </div> <div class="column"> <label for="adms_concelho_id" class="title-input">Concelho:<span class="text-danger">*</span> </label> <select class="input-adm" name="adms_concelho_id" id="adms_concelho_id" data-target='#adms_freguesia_id' data-href='load-freguesias/index'> <option value="">Selecione um Distrito</option> </select> </div> <div class="column"> <label for="adms_freguesia_id" class="title-input">Freguesia:<span class="text-danger">*</span> </label> <select class="input-adm" name="adms_freguesia_id" id="adms_freguesia_id"> <option value="">Selecione um Concelho</option> </select> </div> e um arquivo js da seguinte forma: const loadJson = async (url, method = 'get') => { const headers = { method } const retorno = { statusCode: 200, body: [] } const request = await fetch(url, headers) if (request.headers.get('content-type').includes('json')) { const data = await request.json() retorno.body = data } else { adms_distrito_id.nextElementSibling.innerHTML = await request.text() } return retorno } const fillSelect = (selector, data, callback) => { // define se select element to be feed const selectToFill = document.querySelector(selector) const selectOptions = [] selectToFill.innerHTML = '<option value="">loading data...</option>' selectToFill.classList.remove('is-invalid') for (const obj of data) { const [key, val] = Object.keys(obj) selectOptions.push(`<option value="${obj[key]}">${obj[val]}</option>`) } if (selectOptions.length) { selectToFill.innerHTML = selectOptions.join() selectToFill.disabled = false } else { selectToFill.classList.add('is-invalid') selectToFill.disabled = true selectToFill.innerHTML = '<option value="">No registers found.</option>' } callback(selectToFill) } loadJson('/load-distritos/index').then((obj) => { for (const select of document.querySelectorAll('select[data-autofill]')) { fillSelect('#' + select.id, obj.body, (e) => { e.dispatchEvent(new Event('change')) }) } }) // Listen the changeEvent for all selects with [data-target][data-href] const selectsToFillAnother = document.querySelectorAll('select[data-target][data-href]') for (const select of selectsToFillAnother) { select.onchange = async ({ target }) => { const id = target.value const href = target.dataset.href const targetSelect = target.dataset.target const nextElement = targetSelect document.querySelector(targetSelect).innerHTML = '<option value="">loading data...</option>' let body = [{ id: '', value: 'Selecione um concelho' }] if (id) { body = await loadJson(`/${href}/${id}`).then(({ body }) => body) } fillSelect(targetSelect, body, (e) => { e.dispatchEvent(new Event('change')) }) } }
  12. Boa tarde a todos, Tenho um formulário com 3 campos selects, consoante o que selecionar no primeiro gostaria que fosse feito uma pesquisa e preenchido o segundo e assim sucessivamente. fiz da seguinte forma, mas não resultou. Alias até funciona se eu digitar directamente na url o seguinte caminho: "http://projecto/load-concelho/index?distrito=2" no console me devolve correctamente, mas quando tento manipular o select não resulta. Na linha 6 já tentei: fetch("LoadConcelhos.php/index?distrito=" + adms_distrito_id) fetch("LoadConcelhos/index?distrito=" + adms_distrito_id) fetch("../LoadConcelhos.php/index?distrito=" + adms_distrito_id) fetch("http://projecto/LoadConcelhos.php/index?distrito=" + adms_distrito_id) fetch("load-concelhos.php/index?distrito=" + adms_distrito_id) fetch("../Controllers/LoadConcelhos.php/index?distrito=" + adms_distrito_id) LoadConcelho.php (2º select) <?php namespace App\adms\Controllers; use PDO; class LoadConcelhos { public function index() { $adms_distrito_id = $_GET['distrito']; $listConcelhos = new \App\adms\helpers\AdmsRead(); $listConcelhos->fullRead("SELECT id, name_concelho FROM adms_concelhos WHERE adms_distrito_id=:adms_distrito_id ORDER BY name_concelho ASC", "adms_distrito_id={$adms_distrito_id}"); $registry = $listConcelhos->getResult(); foreach ($registry as $concelhos) { ?> <option value="<?php echo $concelhos['id'] ?>" <?php echo $concelhos['name_concelho'] ?>></option> <?php } } } concelho.js 1 const selectDistrito = document.getElementById('adms_distrito_id') 2 selectDistrito.onchange = () => { 3 const selectConcelho = document.getElementById('adms_concelho_id') 4 const adms_distrito_id = selectDistrito.value; 5 console.log(adms_distrito_id); 6 fetch("LoadConcelhos.php/index?distrito=" + adms_distrito_id) 7 .then(response => { 8 return response.concelhos(); 9 }) 10 .then(bodyContent => { 11 selectConcelho.innerHTML = bodyContent; 12 }); 13 }
  13. Bom dia a todos, estou desenvolvendo um projeto através de umas aulas com a CELKE. Mas esta acontecendo uma coisa tão estranha e não consigo resolver, por isso estou pedindo a vossa ajuda. fiz um formulário de pesquisa pelos distritos de Portugal, tenho um base de dados com todos os distritos cadastrado. a pesquisa esta a funcionar não a 100% por os distritos de "Faro" e "Castelo Branco" são os únicos que dão erro e não efectuam a pesquisa e por vezes tenho que fazer a pesquisa duas vezes para funcionar. Quando não é encontrado ao invés de devolver a mensagem "Distrito não encontrado" não acontece nada. Quem souber ajude me por favor. Helpers AdmsRead: <?php namespace App\adms\helpers; use PDO; use PDOException; /** * Classe genérica para selecionar registro no banco de dados * * @author John Trindade */ class AdmsRead extends AdmsConn { /** @var string $select Recebe o QUERY */ private string $select; /** @var array $values Recebe os valores que deve ser atribuidos nos link da QUERY com bindValue */ private array $values = []; /** @var array $result Recebe os registros do banco de dados e retorna para a Models */ private array|null $result; /** @var object $query Recebe a QUERY preparada */ private object $query; /** @var object $conn Recebe a conexao com BD */ private object $conn; /** * @return array Retorna o array de dados */ function getResult(): array|null { return $this->result; } /** * Recebe os valores para montar a QUERY. * Converte a parseString de string para array. * @param string $table Recebe o nome da tabela do banco de dados * @param string $terms Recebe os links da QUERY, ex: sts_situation_id =:sts_situation_id * @param string $parseString Recebe o valores que devem ser subtituidos no link, ex: sts_situation_id=1 * * @return void */ public function exeRead(string $table, string|null $terms = null, string|null $parseString = null): void { if(!empty($parseString)){ parse_str($parseString, $this->values); } $this->select = "SELECT * FROM {$table} {$terms}"; $this->exeInstruction(); } public function fullRead(string $query, string|null $parseString = null): void { $this->select = $query; if (!empty($parseString)) { parse_str($parseString, $this->values); } $this->exeInstruction(); } private function exeInstruction():void { $this->connection(); try{ $this->exeParameter(); $this->query->execute(); $this->result = $this->query->fetchAll(); }catch(PDOException $err){ $this->result = null; } } private function connection():void { $this->conn = $this->connectDb(); $this->query = $this->conn->prepare($this->select); $this->query->setFetchMode(PDO::FETCH_ASSOC); } private function exeParameter():void { if($this->values){ foreach($this->values as $link => $value){ if(($link == 'limit') or ($link == 'offset') or ($link == 'id')){ $value = (int) $value; } $this->query->bindValue(":{$link}", $value, (is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR)); } } } } helpers Pagination: <?php namespace App\adms\helpers; /** * Classe genérica para gerar a paginação * * @author John Trindade */ class AdmsPagination { /** @var integer $page Recebe o numero da pagina que o usuario esta*/ private int $page; /** @var integer $limitResult Recebe o limite de resultado*/ private int $limitResult; /** @var integer $offset Recebe o calculo entre a quantidade de paginas e o limite de resultado*/ private int $offset; /** @var string $query Recebe a query que será feita a paginação*/ private string $query; /** @var string|null $parseString Recebe a parseString*/ private string|null $parseString; /** @var array $resultBd Recebe o resultado que vem do banco de dados*/ private array $resultBd; /** @var string|null $result Recebe o resultado TRUE ou FALSE*/ private string|null $result; /** @var integer $totalPages Recebe o total de paginas*/ private int $totalPages; /** @var integer $maxLinks Recebe o número maximo de paginas*/ private int $maxLinks = 2; /** @var string $link Recebe o link da pagina*/ private string $link; /** @var string|null $var Recebe a informação relacionada com a pagina*/ private string|null $var; /** @return integer Recebe o resultado do calculo entre a quantidade de paginas e o linmite de resultado*/ function getOffset(): int { return $this->offset; } /** @return string|null Recebe o resultado TRUE ou FALSE*/ function getResult(): string|null { return $this->result; } /** * Metodo para criar o link da pagina * * @param string $link * @param string|null|null $var */ function __construct(string $link, string|null $var = null) { $this->link = $link; $this->var = $var; } /** * Metodo recebe a pagina e o limite de resultado a ser exibido * * @param integer $page * @param integer $limitResult * @return void */ public function condition(int $page, int $limitResult): void { $this->page = (int) $page ? $page : 1; $this->limitResult = (int) $limitResult; $this->offset = (int) ($this->page * $this->limitResult) - $this->limitResult; } /** * Metodo recebe a query que será feita a paginação e a parseString * Chama o helper AdmsRead para fazer a pesquisa no banco de dados * @param string $query * @param string|null|null $parseString * @return void */ public function pagination(string $query, string|null $parseString = null): void { $this->query = (string) $query; $this->parseString = (string) $parseString; $count = new \App\adms\helpers\AdmsRead(); $count->fullRead($this->query, $this->parseString); $this->resultBd = $count->getResult(); $this->pageInstruction(); } /** * Metodo faz o calculo do total de paginas * Chama o metodo layoutPagination * @return void */ private function pageInstruction(): void { $this->totalPages = (int) ceil($this->resultBd[0]['num_result'] / $this->limitResult); if ($this->totalPages >= $this->page) { $this->layoutPagination(); } else { header("Location: {$this->link}"); } } /** * Metodo com o layout da paginação que será exibida na view * @return void */ private function layoutPagination(): void { $this->result = "<div class='content-pagination'>"; $this->result .= "<div class='pagination'>"; $this->result .= "<a href='{$this->link}{$this->var}'>Primeira</a>"; for ($beforePage = $this->page - $this->maxLinks; $beforePage <= $this->page - 1; $beforePage++) { if ($beforePage >= 1) { $this->result .= "<a href='{$this->link}/$beforePage{$this->var}'>$beforePage</a>"; } } $this->result .= "<a href='#' class='active'>{$this->page}</a>"; for ($afterPage = $this->page + 1; $afterPage <= $this->page + $this->maxLinks; $afterPage++) { if ($afterPage <= $this->totalPages) { $this->result .= "<a href='{$this->link}/$afterPage{$this->var}'>$afterPage</a>"; } } $this->result .= "<a href='{$this->link}/{$this->totalPages}{$this->var}'>Última</a>"; $this->result .= "</div>"; $this->result .= "</div>"; } } model: <?php namespace App\adms\Models\distritos; /** * Listar distritos do banco de dados */ class AdmsList { /** @var bool $result Recebe true quando executar o processo com sucesso e false quando houver erro */ private bool $result; /** @var array|null $resultBd Recebe os registros do banco de dados */ private array|null $resultBd; /** @var int $page Recebe o número página */ private int $page; /** @var int $page Recebe a quantidade de registros que deve retornar do banco de dados */ private int $limitResult = 15; /** @var string|null $page Recebe a páginação */ private string|null $resultPg; /** @var string|null $searchEmail Recebe o email do distrito */ private string|null $searchDistrito; /** @var string|null $searchNameValue Recebe o nome do distrito */ private string|null $searchNameValue; /** * @return bool Retorna true quando executar o processo com sucesso e false quando houver erro */ function getResult(): bool { return $this->result; } /** * @return bool Retorna os registros do BD */ function getResultBd(): array|null { return $this->resultBd; } /** * @return bool Retorna a paginação */ function getResultPg(): string|null { return $this->resultPg; } /** * Metodo faz a pesquisa dos distritos na tabela adms_distritos e lista as informações na view * Recebe o paramentro "page" para que seja feita a paginação do resultado * @param integer|null $page * @return void */ public function listDistritos(int $page = null): void { $this->page = (int) $page ? $page : 1; $pagination = new \App\adms\helpers\AdmsPagination(URLADM . 'list-distritos/index'); $pagination->condition($this->page, $this->limitResult); $pagination->pagination("SELECT COUNT(dist.id) AS num_result FROM adms_distritos dist"); $this->resultPg = $pagination->getResult(); $listDistrito = new \App\adms\helpers\AdmsRead(); $listDistrito->fullRead("SELECT dist.id, dist.name_distrito FROM adms_distritos AS dist ORDER BY dist.id ASC LIMIT :limit OFFSET :offset", "limit={$this->limitResult}&offset={$pagination->getOffset()}"); $this->resultBd = $listDistrito->getResult(); if ($this->resultBd) { $this->result = true; } else { $_SESSION['msg'] = "<p class='alert-danger'>Erro: Nenhum Distrito encontrado!</p>"; $this->result = false; } } /** * Metodo faz a pesquisa dos distritos na tabela adms_distritos e lista as informações na view * Recebe o paramentro "page" para que seja feita a paginação do resultado * Recebe o paramentro "search_distrito" para pesquisar o distrito atraves do nome * @param integer|null $page * @param string|null $search_distrito * @return void */ public function listSearchDistrito(int $page = null, string|null $search_distrito): void { $this->page = (int) $page ? $page : 1; $this->searchDistrito = trim($search_distrito); $this->searchNameValue = "%" . $this->searchDistrito . "%"; if ((!empty($this->searchDistrito))) { $this->searchUserName(); } else { $this->listDistritos(); } } /** * Metodo pesquisar pelo nome do distrito * @return void */ public function searchUserName(): void { $pagination = new \App\adms\helpers\AdmsPagination(URLADM . 'list-distritos/index', "?search_name={$this->searchDistrito}"); $pagination->condition($this->page, $this->limitResult); $pagination->pagination("SELECT COUNT(dist.id) AS num_result FROM adms_distritos dist WHERE name_distrito LIKE :search_distrito", "search_distrito={$this->searchNameValue}"); $this->resultPg = $pagination->getResult(); $listUsers = new \App\adms\helpers\AdmsRead(); $listUsers->fullRead("SELECT dist.id, dist.name_distrito FROM adms_distritos AS dist WHERE dist.name_distrito LIKE :search_distrito ORDER BY dist.id ASC LIMIT :limit OFFSET :offset", "search_distrito={$this->searchNameValue}&limit={$this->limitResult}&offset={$pagination->getOffset()}"); $this->resultBd = $listUsers->getResult(); if ($this->resultBd) { $this->result = true; } else { $_SESSION['msg'] = "<p class='alert-danger'>Erro: Nenhum distrito encontrado!</p>"; $this->result = false; } } } Controler: <?php namespace App\adms\Controllers; /** * Controller da página listar distritos * @author John Trindade <jht_pt@icloud.com> */ class ListDistritos { /** @var array|string|null $data Recebe os dados que devem ser enviados para VIEW */ private array|string|null $data; /** @var array|null $data Recebe os dados que devem do formulario */ private array|null $dataForm; /** @var string|int|null $page Recebe o numero da pagina que usuario esta */ private string|int|null $page; /** @var string|null $searchDistrito Recebe o nome do distrito */ private string|null $searchDistrito; public function index(string|int|null $page = null) { $this->page = (int) $page ? $page : 1; $this->dataForm = filter_input_array(INPUT_POST, FILTER_DEFAULT); $this->searchDistrito = filter_input(INPUT_GET, 'search_distrito', FILTER_DEFAULT); if (!empty($this->dataForm['SearchDistrito'])) { $listSearchDistrito = new \App\adms\Models\distritos\AdmsList(); $listSearchDistrito->listSearchDistrito($this->page, $this->dataForm['search_distrito']); if ($listSearchDistrito->getResult()) { $this->data['list'] = $listSearchDistrito->getResultBd(); $this->data['pagination'] = $listSearchDistrito->getResultPg(); } else { $this->data['list'] = []; $this->data['pagination'] = ""; } $this->data['form'] = $this->dataForm; } elseif (!empty($this->searchDistrito)) { $listSearchDistrito = new \App\adms\Models\distritos\AdmsList(); $listSearchDistrito->listSearchDistrito($this->page, $this->searchDistrito); if ($listSearchDistrito->getResult()) { $this->data['list'] = $listSearchDistrito->getResultBd(); $this->data['pagination'] = $listSearchDistrito->getResultPg(); } else { $this->data['list'] = []; $this->data['pagination'] = ""; } $this->data['form'] = $this->dataForm; } else { $listDistritos = new \App\adms\Models\distritos\AdmsList(); $listDistritos->listDistritos($this->page); if ($listDistritos->getResult()) { $this->data['list'] = $listDistritos->getResultBd(); $this->data['pagination'] = $listDistritos->getResultPg(); } else { $this->data['list'] = []; $this->data['pagination'] = ""; } } $this->data['sidebarActive'] = "list-distritos"; $loadView = new \Core\ConfigView("adms/Views/distritos/list", $this->data); $loadView->loadView(); } } Formulário: <?php if (isset($this->data['form'])) { $valorForm = $this->data['form']; } ?> <!-- Inicio do conteudo do Administrativo --> <div class="wrapper"> <div class="row"> <!-- Inicio menu pesquisa --> <div class="top-list"> <form method="POST" action=""> <div class="row-input-search"> <?php $search_distrito = ""; if (isset($valorForm['search_distrito'])) { $search_distrito = $valorForm['search_distrito']; } ?> <div class="column"> <label class="title-input-search">Pesquisar Distrito: </label> <input type="text" name="search_distrito" id="search_distrito" class="input-search" placeholder="Pesquisar pelo nome do Distrito..." value="<?php echo $search_distrito; ?>" autofocus> </div> <div class="column margin-top-search"> <button type="submit" name="SearchDistrito" class="btn-info" value="Pesquisar">Pesquisar</button> </div> </div> </form> </div> <div class="content-adm-alert"> <?php if (isset($_SESSION['msg'])) { echo $_SESSION['msg']; unset($_SESSION['msg']); } ?> </div> <!-- Inicio da Tabela Listar --> <table class="table-list"> <thead class="list-head"> <tr> <th class="list-head-content table-md-none">ID</th> <th class="list-head-content">Distrito</th> </tr> </thead> <tbody class="list-body"> <?php foreach ($this->data['list'] as $distritos) { extract($distritos); ?> <tr> <td class="list-body-content table-md-none"><?php echo $id; ?></td> <td class="list-body-content"><?php echo $name_distrito; ?></td> </tr> <?php } ?> </tbody> </table> <!-- Final da Tabela Listar --> <!-- Inicio da Paginação --> <?php echo $this->data['pagination']; ?> <!-- Final da Paginação --> </div> </div> <!-- Final do conteudo do Administrativo-->
  14. PHP + MYSQL Estou com um problema, atendendo que o formato da hora hh:mm tenho de somar as horas mas acontece que nalguns registos ultrapassa as 99:99 ou seja tenho somas de 125:35 horas como representar essas horas? Converter em dias? Alguém já passou por isso? Sugestão?
  15. Boas, Eu tenho o objetivo de tentar relacionar a tabela «ROTAS» com «PRODUTOS» onde irei criar a tabela «CARGA» para ajudar(eu acho😅) ROTAS(ID_ROTA, ID_CAMIAO, ID_CLIENTE, ID_CARGA) CARGA(ID_CARGA, "aqui eu iria criar uma tabela 'temporaria' «PRODUTO_CARGA»") |------------CARGA---------- | | id_carga | aqui supostamente o id da tabela(produto_carga) | | 213 | 27 | PRODUTO_CARGA(ID_PRODUTO, QNT) |---PRODUTO_CARGA--- | | id_produto | QNT | | 213 | 27 | |etc... PRODUTO(ID_PRODUTO, NOME, MARCA, VALOR) Mas como consigo fazer a parte de ir buscar uma tabela inteira e não so uma "row"? Agradeço desde já:) FOTO DA BASE DE DADOS (phpMyAdmin DESIGNER)
  16. Boa tarde a todos, Ver se consigo explicar-me: Tenho uma tabela de contactos (tbl_contactos) em que tem vários campos, um deles o email_principal. Faço um SELECT tbl_contactos.email_principal FROM tbl_contactos. A minha ideia é em PHP/MYSQLI passar as colunas, dos email, mas em linhas em que cada email fica separado por ponto e virgula (;) para posteriormente poder utilizar uma botão, que vai abrir o outlook através a <a href="mailto:$variavel_com_o_emails_todos">ENVIAR EMAIL</a> A minha duvida é como consigo colocar todos os email do SELECT separados por ponto e virgula e passar para a variável para posteriormente remeter para todos os destinatários SELECCIONADOS. Obrigado pela vossa ajudar, se conseguirem.
  17. Olá a todos, Estou a ter uma dificuldade, ver se consigo explicar. Tenho um DASHBOARD que vai buscar dados ao mysql. Por sua vez este mysql é alimentado através de um backoffice. A minha dificuldade neste momento é quando insiro dados no mysql através do backoffice, como consigo atuaizar o dashboard logo automaticamente esteja ele aberto onde for, no meu pc ou noutro?
  18. Boa noite a todos! Estou desenvolvendo uma query que possa me proporcionar um relatório de vendas especificando os produtos de cada nota de venda. O problema é que, como a numeração das notas se repete (pois uma nota pode ter mais de um produto relacionado), o valor total de cada nota é trazido mais de uma vez. No final das contas, o somatório dos valores totais das notas difere muito pois considera todas as duplicatas de valor. Há algum modo de ignorar ou excluir ou substituir os valores repetidos (por um valor nulo, por exemplo, que não interfira no somatório) utilizando SQL? Eis a minha query até o momento: SELECT NFVENDA.nf_numero AS NUMERO, NFVENDA.nf_serie AS SERIE, NFVENDA.nf_modelo AS MODELO, NFVENDA.dt_emissao AS EMISSAO, ITEM.id_identificador AS CODIGO, ESTOQUE.descricao AS PRODUTO, ITEM.cfop AS CFOP, ITEM.qtd_item AS QUANTIDADE, ITEM.vlr_unit AS VAL_UNITARIO, ITEM.vlr_total AS TOTAL_ITEM, TOTAIS.tot_nf AS TOTAL_NF FROM tb_nfv_item ITEM, tb_nfvenda NFVENDA, tb_estoque ESTOQUE, tb_nfvenda_tot TOTAIS WHERE NFVENDA.dt_emissao BETWEEN '01.07.2022' AND '31.07.2022' AND ITEM.id_nfvenda = NFVENDA.id_nfvenda AND estoque.id_estoque = item.id_identificador AND TOTAIS.id_nfvenda = NFVENDA.id_nfvenda ORDER BY NFVENDA.nf_numero A saída que eu tenho é semelhante a isto (https://drive.google.com/file/d/17Rq5bGfaZ6CrAFFWwE0fx72wwJDUW1xC/view?usp=sharing)
  19. Boa tarde, Necessito de responder a 3 questões de um exercício através de funções ou procedimentos e não consigo, dá sempre erros. Seria possível ajudarem-me pf? Obrigada. create table venda ( idVenda int not null, dataVenda timestamp, valorFaturado float, idCliente int not null, primary key(idVenda), constraint FK_idCliente foreign key (idCliente) references cliente (idCliente) on delete no action on update no action ); create table artigo ( idArtigo int not null, nomeArtigo varchar(255), qtdArtigo int(3), precoArtigo float, primary key(idArtigo)); Questões: -- a. Obtenha a faturação anual por ano. -- b. Obtenha a faturação total de um dado ano. -- c. Coloque a quantidade dos artigos todos a zero.
  20. Olá, Preciso enviar os 10 ultimos itens de um mysql para todos os e-mails cadastrados, com codigo abaixo não acontece nada. <?php $conn = new mysqli("localhost","user","pass","db"); $sql = mysqli_query($conn, "SELECT * FROM jobs"); $numRows = mysqli_num_rows($sql); $mail_body = ''; while($row = mysqli_fetch_array($sql)){ $id = $row["id"]; $salary = $row["salary"]; $cargo=$row["title"]; $description = $row["plot"]; $mail_body = ''; } //colocar a chamada mail dentro do loop que itera sobre os clientes: $sql = mysqli_query($conn, "SELECT email FROM subscriptions WHERE id=4168"); $numRows = mysqli_num_rows($sql); $subject = "New jobs"; $headers = "From:info@umsite.com\r\n"; $headers .= "Content-type: text/html\r\n"; while($row = mysqli_fetch_array($sql)){ $email = $row["email"]; $name = $row["firstname"]; $mail_result = mail($email, $subject, $mail_body, $headers); if ($mail_result) { echo 'ok'; } } ?> grato por qualquer ajuda
  21. Numa tabela com as datas das consultas queria que não fosse permitido ao utilizador alterar os dados da consulta a menos de 72 horas da data da consulta marcada. O projeto de avaliação que estou a fazer esta tabela é gerada em php diretamente da base de dados. Mas para exemplificar resumi a uma tabela. Já tentei fazer um loop mas não estou a conseguir, apenas consegui umas dicas com o código a seguir: <!DOCTYPE html> <html lang="pt"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> table td { padding: 15px; } </style> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <table> <thead> <tr> <th>ID_CONSULTA</th> <th>UTILIZADOR</th> <th>DATA</th> <th>OBSERVAÇÕES</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>marco</td> <td id="data-consulta">2022-06-16</td> <td>marcação1</td> <td><button id="editar">Editar</button></td> </tr> <tr> <td>2</td> <td>martim</td> <td id="data-consulta">2022-06-20</td> <td>marcação2</td> <td><button id="editar">Editar</button></td> </tr> <tr> <td>3</td> <td>carlos</td> <td id="data-consulta">2022-06-15</td> <td>marcação3</td> <td><button id="editar">Editar</button></td> </tr> </tbody> </table> <script src="script.js"></script> </body> </html> var inputConsulta = document.querySelector('#data-consulta'); var editar = document.querySelector('#editar'); function calcularDiferenca() { var dataConsulta = inputConsulta.innerHTML; //var dataAtual = inputAtual.value; var dataAtual = new Date().toISOString().slice(0, 10); dataConsulta = new Date(dataConsulta).toISOString().slice(0, 10); //dataConsulta = new Date(dataConsulta); //dataAtual= new Date(dataAtual); var diffInTime = Math.abs(dataConsulta - dataAtual); var timeInOneDay = 1000 * 60 * 60 * 24; var diffInDays = diffInTime / timeInOneDay; if (diffInDays >= 3) { alert('Você escolher alterar a marcação!'); } else { alert('O prazo de 72 para alterar a marcação expirou!'); } } editar.addEventListener('click', () => { var diffInDays = calcularDiferenca(); if (diffInDays >= 3) { ('#editar').prop('disabled', false); alert('Você escolheu alterar uma marcação!'); } else { $('#editar').prop('disabled', true); alert('O prazo para alterar a marcação foi expirado!\nPor favor, entre em contacto com a empresa!'); } });
  22. Eu queria depois de validar o login para redirecionar para a página dependendo do nível de acesso, agradeceria que alguem me ajudasse o mais rápido possível, obrigado aqui está a página de login de validação: <?php session_start(); include ("config.php"); if(isset($_POST['submit'])){ $Nmutilizador = mysqli_real_escape_string($conn, $_POST['username']); $pass = md5($_POST['Password']); $lvlacesso = $_POST['NivelAcesso']; $select = " SELECT * FROM users WHERE NmUtilizador = '$Nmutilizador' && PalavraPasse = '$pass' "; $result = mysqli_query($conn, $select); if(mysqli_num_rows($result) > 0){ $row = mysqli_fetch_array($result); if ($_SESSION['NivelAcesso'] == '1') { // check the value of the 'status' in the db //go to admin area header("Location: indexadmin.php"); } else { //go to members area header("Location: indexposlogin.php"); } }else{ $error[] = 'incorrect email or password!'; } }; ?> pagina de login: <?php session_start(); echo '<!doctype html> <html lang="en"> <head> <title>Página de Login</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="css/stylelogin.css"> <style> h3{ text-align: center; } .disclaimer{ visibility: hidden; } </style> </head> <body> <section class="ftco-section"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-6 text-center mb-5"> <h2 class="heading-section">Inicie sessão</h2> </div> </div> <div class="row justify-content-center"> <div class="col-md-7 col-lg-5"> <div class="wrap"> <div class="img" style="background-image: url(Imagens/imagemlogin.png);"></div> <div class="login-wrap p-4 p-md-5"> <div class="d-flex"> <div class="w-100"> <h3 class="mb-4">Login</h3> </div> </div> <form action="validalogin.php" class="signin-form"> <div class="form-group mt-3"> <input name="username" type="text" class="form-control" required> <label class="form-control-placeholder" for="username">Nome de Utilizador</label> </div> <div class="form-group"> <input name="pass" id="password-field" type="password" class="form-control" required> <label class="form-control-placeholder" for="password">Palavra-Passe</label> <span toggle="#password-field" class="fa fa-fw fa-eye field-icon toggle-password"></span> </div> <div class="form-group"> <button type="submit" class="form-control btn btn-primary rounded submit px-3">Entrar</button> </div> <div class="form-group d-md-flex"> <div class="w-50 text-left"> <label class="checkbox-wrap checkbox-primary mb-0">Lembrar me <input type="checkbox" checked> <span class="checkmark"></span> </label> </div> <div class="w-50 text-md-right"> <a href="#">Esqueci me da palavra-passe</a> </div> </div> </form> <p class="text-center">Não és membro? <a data-toggle="tab" href="registar.php">Registar me</a></p> <p class="text-center"><a data-toggle="tab" href="https://ingamept.000webhostapp.com/">Voltar</a></p> </div> </div> </div> </div> </div> </section> <script src="js/jquery.min.js"></script> <script src="js/popper.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/main.js"></script> </body> </html>
  23. Boa tarde, Venho aqui para recorrer à vossa ajuda, porque estou bloqueado e já não sei o que fazer. Eu estou a tentar fazer um trigger que me permita atualizar alguns campos de uma tabela, tendo por base o valor doutra tabela. No entanto, eu até consigo deixar o trigger a funcionar com a condição AFTER INSERT, mas não consigo deixar a funcionar com o AFTER UPDATE. Já simplifiquei coisas, editei código, adicionei e acrescentei variáveis, mas não estou a perceber o que estou a fazer mal para que isto não funcione com o AFTER UPDATE. Pus o código mais simples que tenho aqui, porque já sei se as mudanças que andei para aqui a fazem o mínimo sentido, mas como não tinha resultados, não quis inventar mais. Alguém consegue explicar-me o que estou a fazer de errado? Obrigado. BEGIN update documentsheaders inner join entity_stockdocument_extrafields on entity_stockdocument_extrafields.StockDocument_id=documentsheaders.id set documentsheaders.entitykeyid=entity_stockdocument_extrafields.entity where documentsheaders.DocumentKeyId='ES' and documentsheaders.entitykeyid<>entity_stockdocument_extrafields.entity update documentsheaders inner join entities on entities.KeyId=documentsheaders.EntityKeyId set documentsheaders.EntityDescription=entities.Name where documentsheaders.DocumentKeyId='ES' and documentsheaders.EntityKeyId=entities.KeyId; END
  24. Boa tarde, Já levo umas horas valentes a tentar encontrar o erro, ou uma solução o que acontece é o seguinte: eu tenho uma tabela que, com a instrução onchange atualiza os valores de base de dados, mas, graficamente tanto muda como não muda o conteúdo, se fizer o refresh/F5 manual fica tudo ok, mas o objetivo era ser automático. As instruções funcionam o graficamente não, isso é que me esta a intrigar. function CriarProcesso(){ var NomeProcesso = document.getElementById("NomeProcesso").value; var dadosajax = { 'NomeProcesso' : NomeProcesso }; pageurl = 'URL/CriarProcesso.php'; $.ajax({ url: pageurl, data: dadosajax, type: 'POST', dataType: "text", cache: false, error: function(){ toastr.danger('Erro: Inserir Registo!!'); }, success: function(result){ if($.trim(result) == '1'){ toastr.success('O registo foi editado com sucesso'); $("#table-custo").load(location.href + " #table-custo"); } else{ toastr.danger('Não é possível registar.Tente mais tarde.'); } } }); } Mesmo com load em divs diferentes ou mesmo o Append, não estão a fazer o refresh.
  25. Olá a todos, Necessito de uma pequena ajuda para construir uma Query onde vou apenas quero ver cada utilizador com o registo mais recente. Exemplo pratico : Tabela Ficha : ID | ID_user | Data_registo | Valor 1 | 1 | 01-01-2020 | 2 2 | 2 | 01-02-2021 | 5 3 | 1 | 06-01-2021 | 7 4 | 1 | 01-03-2022 | 8 neste exemplo de tabela quero ver apenas o registo mais recente de cada ID_user 2 | 2 | 01-02-2021 | 5 4 | 1 | 01-03-2022 | 8 existe forma de ir so buscar o mais recente de cada ID_user? Obrigado
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.