Skip to content

um sistema de suporte simples Utilizando a tecnologia PHP e o banco de dados MySql!!

Notifications You must be signed in to change notification settings

Gabs1405dragon/Sistema_de_Suporte

Repository files navigation

Documentação Sistema_de_Suporte

um sistema de suporte simples Utilizando a tecnologia PHP e o banco de dados MySql!!

O propósito dessa documentação é explicar como funciona o sistema passo a passo!

Vamos começar com o banco de dados!

Esse banco de dados contem relacionamento de tabelas!

  • Primeiro criar um banco de dados e dá um nome a ela!
  • Segundo criar uma tabela com o nome "chamados", os campos da tabela vão ser o (id) para ficar incrementando na hora de fazer o INSERT. A (pergunda) que vai ser a pergunda da duvida do cliente que está ultilizando o suporte.o (email) do usuário .por último um (token) para ser gerado um token aleatório do usuário que está fazendo a pergunta!
  • Terceiro criar a ultima tabela para o banco! ela irá se chamar de "interacao_chamado", essa tabela vai ser para a interação que vai responder o usuário que está fazendo a pergunda no suporte!! os campos que vão ser necessarios para ser criados são: também vai conter o (id) ,campo da (chamada_id) que vai ser o campo para recuperar o token do usuário que fez a pergunda do suporte.A (mensagem) que vai ser a resposta do administrador para o usuário.o (admin) que vai ser quem tá respondendo se é o usuário ou administrador. e o (status) para ver se foi respondido o suporte ou administrador.

Vamos começar no front-end do suporte!

No front do suporte vai ser bem simples,irá conter um formulário com o campo para o usuário enviar o E-mail,O campo para o usuário fazer mandar uma duvidar,e o campo para enviar os dados para o administrador!

form

Lembrando que o foco da documentação não é o CSS, mais sim a lógica do backend.

Agora o próximo passo é recupera os dados do formulário via $_POST[] para enviar para o banco de dados e mandar um email para o usuário que vez a pergunda para ele entrar na tela do chamado pelo o token dele que foi cadastrado!

  1. Verificar se existe o name do submit do formulário usando a função nativa do php que é isset() e o valor do token vai ser a função uniqid() que é gerar uma chave aleatória .
  2. Recuperar os dados do formulário pelo o attr "NAME" usando o $_POST[] e colocar dentro de uma $variavel!!
  3. Verificar se todos os campos estão vázios usando a função empty() usar as variveis atribuidas no parâmetro individualmente.
  4. Verificar se é um e-mail mesmo a $variavel email usando a função filter_var() e passar como parâmetro a $variavel do "email" e "FILTER_VALIDATE_EMAIL".
  5. Agora inserir todos os dados na tabela chamados! usando o INSERT.
  6. E mandar um email para o usuário ,e nesse email vai conter um link para direcionar ele para a tela de chamados!

Para fazer o envio de email vai ser necessario instalar uma dependência no projeto via composer, o nome da dependência é PHPMailer!

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\PHPException;

if(isset($_POST['enviar_chamada'])){
   $email = $_POST['email'];
   $pergunta = $_POST['pergunta'];
    $token = md5(uniqid());

  if(empty($email) || empty($pergunta)){
	  echo 'Preenchar os campos de email e pergunta....';
}else{
	if(filter_var($email,FILTER_VALIDATE_EMAIL)){
		$inserir = \MySql::connect()->prepare("INSERT INTO chamados (id,pergunta,email,token) VALUES (null,?,?,?)");
		$inserir->execute(array($pergunta,$email,$token));
		$mail = new PHPMailer(true);
		try{
                
			$mail->SMTPDebug = 0;
			$mail->isSMTP();
			$mail->Host = 'smtp.gmail.com';
			$mail->SMTPAuth = true;
			$mail->Username = 'email';
			$mail->Password = 'senha';
			$mail->Port = 587;
		
			$mail->isHTML(true);
			$mail->CharSet = 'UTF-8';
			$mail->setFrom('email','Gabs');
			$mail->addAddress($email, '');
		
			//$email->isHTML(true);
			$mail->Subject = 'Seu chamado foi aberto';
			$url = BASE3.'chamado?token='.$token;
			$informacoes =  
			'
			Olá o seu chamado foi criado com sucesso!!<br/>utilize o link abaixo para interagir <br/><a href="'.$url.'" >Acessar chamado</a>
			'
			;
			$mail->Body =  $informacoes;
			$mail->AltBody = $informacoes;
		
			if($mail->send()){
				echo 'email enviado com sucesso!';
			}else{
				echo 'email não enviado';
			}
			
		}catch(Exception $e){
			echo "Erro ao enviar o email: {$mail->ErrorInfo}";
		}
		echo '<script>alert("cadastrado com sucesso!");location.href="home"</script>';
	}else{
		echo 'E-mail inválido...';
	}
}
}

Para deixar a tela de chamados segura Vai ser necessario verificar se o token da query da url via $_GET[] se já existe cadastrado na tabela do banco.

se existir na tabela vai ser rederizada a tela de chamado ,caso não exista vai aparece um erro na tela e redirecionar para a tela de suporte novamente.

Agora tem que puxar todas as informações da tabela "interacao_chamado" onde o campo "chamada_id" vai ser o $_GET['token'] da pagina.

E agora usar a função foreach() para fazer um loop de cada inserção de dados que é inserido na tabela com base no campo "chamada_id". Vamos passar como parâmetro a $variavel que foi criada que está armazenada todas as informações da tabela e a $variavel $value.

Depois fazer uma verificação com o if() que a condição vai ser o $value['admin'] com o campo admin é ingual a 1. se for é o administrador que irá responder o chamado caso ao contrário é o usuário que vai responder!!

$puxandoInteracao = \MySql::connect()->prepare("SELECT * FROM interacao_chamado WHERE chamada_id = ?");
  $puxandoInteracao->execute(array($token));
  $puxandoInteracao = $puxandoInteracao->fetchAll();
  foreach($puxandoInteracao as $key => $value){
      if($value['addmin'] == '1'){
          echo '<div class="circler blue" ></div><p class="admin" >Admin: '.$value['mensagem'].'</p>';
          echo '<div class="clear" ></div>';
      }else{
          echo '<span class="circler orange" ></span><p class="admin" >Eu: '.$value['mensagem'].'</p>';
          echo '<div class="clear" ></div>';
      }
  }

Agora verificar se o administrador já respondeu a pergundar

  1. Fazer uma query da tabela "interacao_chamada" com base no campo "chamada_id" passando como valor o $_GET['token'] e colocar em uma nova $variavel!
  2. Verificar com a função if() se o a coluna da tabela é 0,se for zero isso significar que o administrador ainda não respondeu o usuário e então vai aparece uma mensagem para aguardar. caso ao contrário vai ser necessario criar mais uma $variavel para puxar todos os dados da tabela e fazer mais uma verificação com o if() que vai ser essa condição -> ($fetch[0]['addmin'] == -1). e então vai aparece uma mensagem para aguardar o administrador responder,caso ao contrário vai gerar um formúlario com o campo mandar outrar mensagem par conversar com o administrador ,e o botão para mandar a mensagem!
  $sql = \MySql::connect()->prepare("SELECT * FROM interacao_chamado WHERE chamada_id = ? ORDER BY id DESC");
  $sql->execute(array($token));
  if($sql->rowCount() == 0){
      echo 'aguarde até a resposta do admin para continua o suporte.';
  }else{
      $fetch = $sql->fetchAll();
      if($fetch[0]['addmin'] == -1){
          echo 'aguarde até a resposta do admin para continua o suporte.';
      }else{
          echo '
              <form method="post">
                  <textarea value="'.\models\FuncModel::pegarPost('mensagem').'" name="mensagem"  ></textarea>
                  <input type="submit" name="responder" value="mandar" >
              </form>
          ';
      }
  }

Agora verificar se o existe o attr "NAME" com a função isset() e inserir na tabela "interacao_chamada" só que no caso do valor do campo "admin" vai ter que ser insirido -1 ,Por que é o usuário que está respondendo!!

   if(isset($_POST['responder'])){
      $mensagem = $_POST['mensagem'];
      if(empty($mensagem)){
          echo 'preenchar o campo da mensagem';
      }else{
          $responder = \MySql::connect()->prepare("INSERT INTO interacao_chamado (id,chamada_id,mensagem,addmin,statos) VALUES (null,?,?,?,0)");
          $responder->execute(array($token,$mensagem,-1));
          echo '<script>alert("sua resposta foi enviada com sucesso!! aguarde o admin responde-lo(a)")</script>';
          echo '<script>location.href="chamado?token='.$token.'"</script>';
      }
  }

O front da tela de chamado é essa imagem abaixo!!

chamado

Agora fazer a última tela que é a tela do Administrador<>

Vamos começar puxando todos os dados da tabela "chamados" e colocar tudo em uma $variavel e em seguida fazer um foreach(), e dentro desse foreach() fazer mais uma query que vai ser um seguinte pegar a tabela "interacao_chamada" com base no campo "chamada_id" e passar como o valor o $value['token'], para pegar o usuário especifico.

Depois usar a função if() e passar como condição a $variavel que acabou de ser atribuida : ($variavel->rowCount() >= 1) caso bata essa condição vai dar um continue.

Em seguida fazer um formulário dentro do foreach() com o campo para enviar a mensagem o botão para enviar a mensagem para o usuário e dois campos ocultos que vai ter como valor o $value['email'] para recupera o email do usuário e o campo do $value['token].

      <?php
      $pegarChamados = \MySql::connect()->prepare("SELECT * FROM chamados ORDER BY id DESC");
      $pegarChamados->execute();
      $pegarChamados = $pegarChamados->fetchAll();
      foreach($pegarChamados as $value){
      $pegarInteracao = \MySql::connect()->prepare("SELECT * FROM interacao_chamado WHERE chamada_id = ?");
      $pegarInteracao->execute(array($value['token']));
      if($pegarInteracao->rowCount() >= 1){
          continue;
      }

      ?>
      <h2><?php echo $value['pergunta'];?></h2>
      <form method="post">
          <textarea name="mensagem" placeholder="Sua resposta"></textarea>
          <input type="submit" name="responder_chamada" value="resposta">
          <input type="hidden" name="email" value="<?php echo $value['email']?>">
          <input type="hidden" name="token" value="<?php echo $value['token'] ?>">
      </form>

      <?php } ?>

Depois só recuperar os dados via $_POST[] e inserir na tabela "interacao_chamado" só que desta vez o valor do campo "admin" vai ser o 1 porque é o administrador que está respondendo.

      if(isset($_POST['responder_chamada'])){
        $mensagem = $_POST['mensagem'];
        $email = $_POST['email'];
        $token = $_POST['token'];
        if(empty($mensagem)){
            echo '<script>alert("preenchar o campo da mensagem")<script>';
        }else{
            $sql = \MySql::connect()->prepare("INSERT INTO interacao_chamado VALUES (null,?,?,?,1)");
            $sql->execute(array($token,$mensagem,1));
            echo '<script>alert("sucesso!")<script>';

        }
    }

Parte final!! agora é para verificar se o usuário mandou uma nova mensagem para o administrador!!

  1. Fazer uma query para puxando todos os dados da tabela "interacao_chamado" onde o campo "admin" é ingual a -1 e o campo "statos" é ingual a 0 ,encapsular toda essa query em uma $variavel e usar um foreach() !
  2. E criar um formulário com os seguintes campos: campo (mensagem) dois campos ocultos com o $value['token'] e $value['id'] e o botão para mandar os valores!!
        <?php 
    $interacaoChamada = \MySql::connect()->prepare("SELECT * FROM interacao_chamado WHERE addmin = -1 AND statos = 0 ORDER BY id DESC");
    $interacaoChamada->execute();
    $interacaoChamada = $interacaoChamada->fetchAll();
    foreach($interacaoChamada as $value2){
    ?>
    <h3><?php echo $value2['mensagem']?></h3>
    <a href="chamado?token=<?php echo $value2['chamada_id']?>">Clique aqui para seber quem é o cliente!</a>

    <form method="post">
        <div class="form__group">
            <textarea name="mensagem" placeholder="Sua resposta..." ></textarea>
        </div>
        <div class="form__group">
          <input type="submit" value="responder" name="interacao_novo_chamado"  >
        <input type="hidden" name="id" value="<?php echo $value2['id']; ?>"  >
        <input type="hidden" name="token" value="<?php echo $value2['chamada_id']; ?>" >  
        </div>

    </form>

    <?php } ?>

<h3>Agora para terminar, recuperar todos os dados do formulário!</h3>
<p>Antes de fazer a inserção dos dados fazer uma atualização da tabela com o <a href="">UPDATE</a> onde vai ser alterado o statos para 1 e onde o id do campo é o $_POST['id'].</p>
<p>Agora fazer pode inserir os dados do formulário mais os valores do campo "statos" e "admin" ambos seram 1.</p>

        if(isset($_POST['interacao_novo_chamado'])){
          $mensagem = $_POST['mensagem'];
          $token = $_POST['token'];
          if(empty($mensagem)){
              echo '<script>alert("preenchar o campo da mensagem")<script>';
          }else{
              $sql1 = \MySql::connect()->exec("UPDATE interacao_chamado SET statos = 1 WHERE id = $_POST[id] ");

              $sql2 = \MySql::connect()->prepare("INSERT INTO interacao_chamado VALUES (null,?,?,1,1)");
              $sql2->execute(array($token,$mensagem));
              echo '<script>alert("sucesso!")<script>';

          }
      }

O Front-end da tela do administrador é a imagem abaixo!!

administrador

Muito obrigado por ter lido a documentação até aqui, eu espero que a minha didática tenha ajudado a você entender melhor o meu Código :)

Minhas redes sociais.

Releases

No releases published

Packages

No packages published