Larback - Retornando conhecimento

A fila do lado sempre anda mais rápido. Não adianta trocar de fila.

Agenda WEB - Parte três - Listando os contatos cadastrados

Continuando nosso sistema, faremos agora a visualização dos contatos cadastrados. Para isso, alteraremos a classe Contato acrescentando dois métodos que retornarão os dados da tabela. O primeiro método (getContatos()) irá retornar todos os contatos cadastrados sem nenhum filtro, já o segundo (getContatosByResponsavel($responsavel)) irá retornar todos os contatos cadastrados por um "responsável" específico. O arquivo Contato.class.php vai ficar assim:
Arquivo: Contato.class.php
<?php
class Contato {
  const USUARIO = "root";
  const SENHA = "SENHA DO BANCO";
  public function conectar() {
    $con = new PDO("mysql:host=localhost;dbname=agenda", self::USUARIO,self::SENHA);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $con;
  }
  public function novo($nome,$email,$telefone,$responsavel){
    $con = $this->conectar();
    $stm = $con->prepare("insert into contatos (nome,email,telefone,responsavel) values (?,?,?,?)");
    $stm->bindParam(1,$nome);
    $stm->bindParam(2,$email);
    $stm->bindParam(3,$telefone);
    $stm->bindParam(4,$responsavel);
    $stm->execute();
    
  }
  public function getContatos() {
	  $con = $this->conectar();
	  $stm = $con->prepare("select * from contatos");
	  $stm->execute();
	  return $stm->fetchAll(PDO::FETCH_ASSOC);
  }
  public function getContatosByResponsavel($responsavel) {
	  $con = $this->conectar();
	  $stm = $con->prepare("select * from contatos 
										where responsavel=?");
	  $stm->bindParam(1,$responsavel);
	  $stm->execute();
	  return $stm->fetchAll(PDO::FETCH_ASSOC);
  }
}
?>

Para apresentar os dados retornados por estes métodos na tela, criaremos o arquivo lista_contatos.inc.php. O que este arquivo fará é receber os dados do banco e exibí-los em uma tabela HTML.
Arquivo: lista_contatos.inc.php
<?php
session_start();
if (!$_SESSION['autenticado']){
  include_once "index.php";
  exit("<div class='alert alert-danger col-sm-12'>Para acessar o sistema você deve efetuar login</div>");
}
include_once "Contato.class.php";
$contato = new Contato();
try {
	if (!isset($_GET['r']))
		$dados = $contato->getContatos();
	else
		$dados = $contato->getContatosByResponsavel($_GET['r']);
	?>
	  <table class="table table-striped">
    <thead>
      <tr>
        <th>Nome</th>
        <th>E-mail</th>
        <th>Telefone</th>
        <th>Responsável</th>
      </tr>
    </thead>
    <tbody>
    <?php
	foreach($dados as $dado){
	?>
		<tr>
			<td><?=$dado['nome'];?></td>
			<td><?=$dado['email'];?></td>
			<td><?=$dado['telefone'];?></td>
			<td><a href="?q=2&r=<?=$dado['responsavel'];?>"><?=$dado['responsavel'];?></td>
		</tr>
	<?php
	}
	
	?> 
		<tfoot>
			<tr>
				<td colspan="4"><?=count($dados);?> contatos cadastrados.</td>
			</tr>
		</tfoot>
    </tbody>
  </table>
	<?php
	
}catch (PDOException $p) {
	exit("Ocorreu um erro ao tentar exibir os contatos. <br>-->" .$p->getMessage());
}

?>

Por último, precisamos apenas criar o link para esta página em nossa página principal - Lembrando que o link vai apontar para a própria página principal.php apenas informando um novo valor para o parâmetro q - dentro de principal.php, temos um switch que testa o valor de q e inclui a página requisitada.

Para evitarmos pequenos problemas, vou postar a página principal completa novamente:
Arquivo: principal.php
<?php
session_start();
// error_reporting(0);
?>
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="utf-8">

 <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<title>Agenda Web</title>

</head>

<body>
<?php

if (!$_SESSION['autenticado']){
  include_once "index.php";
  exit("<div class='alert alert-danger col-sm-12'>Para acessar o sistema você deve efetuar login</div>");
}
?>
<div class="container">    
        <div id="loginbox" style="margin-top:50px;" class="mainbox">                    
            <div class="panel panel-info" >
                    <div class="panel-heading">
                        <div class="panel-title">Agenda Web - Bem vindo <b><?=$_SESSION['usuario'];?></b></div>
                        
                        <div style="float:right; font-size: 80%; position: relative; top:-10px"><a href="logout.php"> Sair </a></div>
                    </div>     
            </div>
            
              <!-- Menu dropdown com bootstrap -->
              <div class="dropdown">
              <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Ações
              <span class="caret"></span></button>
              <ul class="dropdown-menu">
                    <li><a href="?q=1">Cadastrar Contato</a></li>
                    <li><a href="?q=2">Visualizar Contatos</a></li>
                    <li><a href="#">Localizar</a></li>
              </ul>
              </div>

<?php
  if (isset($_GET['q'])){
    switch($_GET['q']) {
      case '1':
        include_once 'novoContato.inc.php';
        break;
      case '1b':
        include_once 'Contato.class.php';
        $contato = new Contato();
        try {
          $contato->novo($_POST['nome'],$_POST['email'],$_POST['telefone'],$_SESSION['usuario']);
          echo "<br /><br /><div class='alert alert-success col-sm-12'>Contato salvo com sucesso.</div>";
        } catch(PDOException $p) {
          echo "Ocorreu um erro inesperado: ". $p->getMessage();
        }
        break;
      case '2':
		include_once 'lista_contatos.inc.php';
		break;
	  
    }
  } else {
    ?>
         <div style="font-size:60px;color:white;text-shadow: 2px -5px 3px skyblue;margin:0 auto;width:50%">Agenda WEB 1.0</div> 
    <?php
  }      
?>
            
            
            
        </div>
</div>
</body>
</html>



Qualquer dúvida, poste um comentário. Abraços