Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nerdmonkey

Página dinâmica

Recommended Posts

Bom dia a todos.

 

Estou criando páginas dinâmicas para meus sistemas de forma que possa alimentá-las de acordo com a url.

Meu problema é na edição de dados onde não estou sabendo ao certo como resgatar os valores pelo id do registro e compará-los para manter os valores nos campos. Está tudo muito simples, mas funciona legal

 

A página de edição

<?php
// Get params from url
$id = filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT);
$filter = filter_input(INPUT_GET,'filter',FILTER_VALIDATE_INT);
$type = filter_input(INPUT_GET,'type',FILTER_DEFAULT);
$url = filter_input(INPUT_GET,'url',FILTER_DEFAULT);
$pageActual = filter_input(INPUT_GET, 'atual', FILTER_VALIDATE_INT);
 
// Objects
$viewCad = new ViewCadControl($type,$id);
$funcoes = new Valid;
?>
 
<section class="content">
<header class="header-pages">
<hgroup class="left">
<h1>Edição de <?= ucwords($type); ?></h1>
<h2>Você está em modo de edição, as alterações feitas aqui, são aplicadas imediatamente sobre o módulo ativo.</h2>
</hgroup>
</header>
<article>
<?php 
foreach($viewCad->geteEditData() as $r):
echo 'Hi, i\'m a column of table. My name is: ' . $r . '<br>';
endforeach;
 
 
echo '<pre>';
var_dump($viewCad->geteEditData()); 
echo '</pre>';
?>
<form id="frms-edit-<?= $funcoes->retira_acentos(utf8_decode($type)); ?>" class="valid_ajax_form frms">
<input type="hidden" name="action" value="insert-new-<?= $funcoes->retira_acentos(utf8_decode($type)); ?>">
 
 
<?php 
foreach($viewCad->getDataFromTable() as $fields): 
if($fields->Field != 'id' && $fields->Field != 'data'):
?>
 
<!-- Select para clientes -->
<?php if($fields->Field == 'id_cliente'): ?>
 
<label>
<strong>Cliente</strong>
<select name="id_cliente" id="id_cliente">
<option value="0">Selecione</option>
 
<?php 
$read->ExeRead('sis_clientes','id,nome,sobrenome','WHERE status = :status', "status=1");
if($read->getResult()):
foreach($read->getResult() as $result): 
?>
 
<option value="<?= $result->id; ?>" <?php /*if($viewCad->geteEditData()['id_cliente'] == $result->id): echo 'selected'; endif;*/?>><?= $result->nome . ' ' . $result->sobrenome; ?></option>
 
<?php 
endforeach;
else:
?>
 
<option value="0">Nenhum cliente disponível</option>
 
<?php endif; ?>
 
</select>
</label>
 
<!-- Select para clientes -->
<?php elseif($fields->Field == 'id_servico'): ?>
 
<label>
<strong>Serviço relacionado</strong>
<select name="id_servico" id="id_servico">
<option value="0">Selecione</option>
 
<?php 
$read->ExeRead('sis_servicos','id,nome','WHERE status = :status', "status=1");
if($read->getResult()):
foreach($read->getResult() as $result): 
?>
 
<option value="<?= $result->id; ?>"><?= $result->nome; ?></option>
 
<?php 
endforeach;
else:
?>
 
<option value="0">Nenhum serviço disponível</option>
 
<?php endif; ?>
 
</select>
</label>
 
<!-- Select para status do registro -->
<?php elseif($fields->Field == 'status'): ?>
 
<label>
<strong>Status</strong>
<select name="status" id="status">
<option value="0">Selecione</option>
<option value="1">Ativo</option> 
<option value="2">Inativo</option> 
</select>
</label>
 
<!-- Select para status de aprovação do registro -->
<?php elseif($fields->Field == 'aprovado'): ?>
 
<label>
<strong>Aprovado</strong>
<select name="status" id="status">
<option value="0">Selecione</option>
<option value="1">Sim</option> 
<option value="2">Não</option> 
</select>
</label>
 
<!-- Select para definir se é parcelado ou não -->
<?php elseif($fields->Field == 'parcelado'): ?>
 
<label>
<strong>Parcelado</strong>
<select name="parcelado" id="parcelado">
<option value="0">Selecione</option>
<option value="1">Sim</option> 
<option value="2">Não</option> 
</select>
</label>
 
<!-- Máscara campos real -->
<?php elseif($fields->Field == 'valor' || $fields->Field == 'preco' || $fields->Field == 'v_parcelas'): ?>
 
<label>
<strong><?= ucfirst(preg_replace('/_/i',' ', $fields->Field)); ?></strong>
<input type="text" class="preco" name="<?= $fields->Field; ?>" id="<?= $fields->Field; ?>">
</label>
 
<!-- Input type data -->
<?php elseif($fields->Field == 'data' || $fields->Field == 'previsao' || $fields->Field == 'data_inicio' || $fields->Field == 'data_fim'): ?>
 
<label>
<strong><?= ucfirst(preg_replace('/_/i',' ', $fields->Field)); ?></strong>
<input type="text" class="datas" name="<?= $fields->Field; ?>" id="<?= $fields->Field; ?>">
</label> 
 
<!-- Input type cep -->
<?php elseif($fields->Field == 'cep'): ?>
 
<label>
<strong><?= ucfirst(preg_replace('/_/i',' ', $fields->Field)); ?></strong>
<input type="text" class="cep" name="<?= $fields->Field; ?>" id="<?= $fields->Field; ?>">
</label>
 
<!-- Input type cnpj -->
<?php elseif($fields->Field == 'cnpj'): ?>
 
<label>
<strong><?= ucfirst(preg_replace('/_/i',' ', $fields->Field)); ?></strong>
<input type="text" class="cnpj" name="<?= $fields->Field; ?>" id="<?= $fields->Field; ?>">
</label>
 
<!-- Input type cpf -->
<?php elseif($fields->Field == 'cpf'): ?>
 
<label>
<strong><?= ucfirst(preg_replace('/_/i',' ', $fields->Field)); ?></strong>
<input type="text" class="cpf" name="<?= $fields->Field; ?>" id="<?= $fields->Field; ?>">
</label> 
 
<?php else: ?>
 
<label>
<strong><?= ucfirst(preg_replace('/_/i',' ', $fields->Field)); ?></strong>
<input type="text" name="<?= $fields->Field; ?>" id="<?= $fields->Field; ?>">
</label> 
 
<?php 
endif;
endif;
endforeach; 
?> 
 
<button class="submit btn">Salvar alterações em <b><?= ucwords(substr($type, 0, strrpos($type, 's'))); ?></b></button>
<a href="relatorios?type=<?= $type; ?>">Voltar para listagem de <b><?= ucwords($type); ?></b></a>
</form>
</article>
</section>

A classe

<?php
/**
 * 
 * 
 */
class ViewCadControl {
/**
* 
* 
*/
private $table;
 
/**
* 
* 
*/
private $results;
 
 
/**
* 
* @param string $table
*/
public function __construct($table, $id = null) {
$this->table = 'sis_' . $table;
$this->id = $id;
}
 
/**
* 
* 
*/
public function getDataFromTable() {
$read = new Read;
$read->FullRead("SHOW COLUMNS FROM {$this->table}");
 
if($read->getResult()):
$this->results = $read->getResult();
endif;
 
return $this->results;
}
 
/**
* 
*/
public function geteEditData() {
$read = new Read;
$read->ExeRead($this->table, '*', 'WHERE id = :id LIMIT 1', "id={$this->id}");
if($read->getResult()):
foreach($read->getResult() as $results):
$this->results = $results;
return $this->results;
endforeach;
endif;
 
 
}
 
}

Minha dúvida é como persistir os dados. Já tentei englobar com o foreach, as me parece bem feio e além do mais não funciona, porque entra em outro loop e duplica os campos do formulário. Preciso de algumas dicas que talvez a minha ansiedade pelo fato de ter que ir ao dentista não me deixa ver claramente.

 

O debug[incluso na view]

<?php 
foreach($viewCad->geteEditData() as $r):
echo 'Hi, i\'m a column of table. My name is: ' . $r . '<br>';
endforeach;
 
 
echo '<pre>';
var_dump($viewCad->geteEditData()); 
echo '</pre>';
?>
 
Retorna
[code]
Hi, i'm a column of table. My name is: 1
Hi, i'm a column of table. My name is: Clientes
Hi, i'm a column of table. My name is: clientes
Hi, i'm a column of table. My name is: 0
Hi, i'm a column of table. My name is: 1
object(stdClass)#19 (5) {
["id"]=>
string(1) "1"
["nome"]=>
string(8) "Clientes"
["url"]=>
string(8) "clientes"
["type"]=>
string(1) "0"
["status"]=>
string(1) "1"
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como faço para retornar o nome da coluna dentro do segundo laço?

Assim não funcionou

foreach($viewCad->getDataFromTable() as $fields): 
    foreach($viewCad->geteEditData() as $fieldResult):
        // work right here
        echo $fieldResult->$fields->Field;
    endforeach;
endforeach;

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Luiz Henrique
      Olá pessoas.
      Segue code depois explico.
       
      class Usuario { public $email; private $senha; public function alteraSenha($senha) { $this->senha = md5($senha); } } class Cliente extends Usuario { public function __construct($email = null, $senha = null) { $this->email = $email; $this->senha = ($senha); } } $cliente = new Cliente("mail@mail.com","123456"); o retorno disso é: mail@mail.com / 123456. OK
      Porém preciso tratar a senha e passar pela função alteraSenha e já tentei:
      $cliente = new Cliente("mail@mail.com"); $cliente->alterSenha('12346'); Também assim dentro da classe Cliente:
      public function setSenha($senha) { parent::alteraSenha($senha); } Dentro do __construct:
      $this->senha = alteraSenha($senha);  
      E em todas as opções, o retorno da senha fica vazio, não dá erro mas volta vazio.
      A única forma de  funcionar é fazendo a declaração diferente:
      $cliente = new Cliente(); $cliente->email = "mail@mail"; $cliente->setSenha('12356'); Dessa forma funciona, mas eu queria a declaração da outra forma para otimizar linhas.
      O que estou fazendo errado.
       
      Obrigado
    • Por Sapinn
      Boa pessoal. Então, estou fazendo um sistema para uma loja de manutenção de aparelhos eletrônicos, e eu tenho um formulário de cadastro onde eu posso inserir os dados de um cliente e os dados do seu aparelho. E eu consigo cadastrar simultaneamente cada um em suas respectivas tabelas. O que eu gostaria de fazer era assim que cadastra-se o cliente pega-se o seu id( Nesse caso o ultimo id inserido) e inserisse na tabela serviços junto. No PDO tem um jeito de fazer isso que é usando o lastInsertId() mas eu não estou sabendo como retornar esse ultimo id para fazer essa inserção
    • Por Sapinn
      Iai galera beleza? Estou com um erro simples aqui como eu faço para estender minha conexão para outros arquivos ? Estou tentado fazer mas está dado um erro aqui
       
      arquivo connection.php
       
      <?php
      class Conexao{
          public $db_name = 'pessoa';
          public $host = 'localhost';
          public $user = 'root';
          public $pass = '';
       
          public function __construct()
          {
              try {
                  $pdo = new PDO("mysql:db_name=".$this->db_name.";host=".$this->host,$this->user,$this->pass);                                         
              } catch (PDOException $e) {
                  echo "Erro no banco ".$e->getMessage();
                  exit();
              }
          }
           
      }
       
      arquivo Pessoa.php
       
      <?php
      include 'connection.php';
      class Pessoa {
          private $pdo;
       
          public function __construct()
          {   
              $this->pdo = new Conexao();
          }
       
          public function buscarDados(){
              $stmt = [];
              $sql = $this->pdo->query("SELECT * FROM pessoa
              order by id desc");
              $stmt = $sql->fetchAll(PDO::FETCH_ASSOC);
              return $stmt;
          }
      }
       
      arquivo index.php
       
      <?php
          require_once 'models/Pessoa.php';
          $p = new Pessoa();
      ?>
      <!DOCTYPE html>
      <html lang="pt-br">
      <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">
          <link rel="stylesheet" href="assets/css/style.css">
          <title>Crud PDO </title>
      </head>
      <body>
          <section id="esquerda">
              <form action="">
                  <h2>Cadastrar Pessoa</h2>
                  <label for="nome">Nome: </label>
                  <input type="text" name="nome" id="nome">
                  <label for="telefone">Telefone: </label>
                  <input type="text" name="telefone" id="telefone">
                  <label for="email">Email:</label>
                  <input type="text" name="email" id="email">
                  <input type="submit" value="Cadastrar">
              </form>
          </section>
          <section id="direita">
          <?php
              $p->buscarDados();
          ?>
              <table>
                  <tr id="titulo">
                      <td>Nome</td>
                      <td>Telefone</td>
                      <td colspan="2">Email</td> 
                  </tr>
                  <tr>
                      <td>Maria</td>
                      <td>00000000</td>
                      <td>maria@gmail.com</td>
                      <td><a href="">Editar</a> <a href="">Excluir</a></td>
                  </tr>
              </table>
          </section>
      </body>
      </html>
       
      Erro que é apresentado:
      Fatal error: Uncaught Error: Call to undefined method Conexao::query()
    • Por Sapinn
      Estou com dificuldade para chamar um arquivo CSS usando a configuração de um arquivo php. O bootstrap também não surte efeito na paginas
       
      Vejam só
      Config.php
       
      <?php define('APP_NOME','Projeto GIBI'); define('URL','http://localhost/bora_php');  
       
      index.php
       
      <?php include './../app/configuracao.php'; include './../app/Libraries/Rota.php'; include './../app/Libraries/Controller.php'; ?> <!DOCTYPE html> <html lang="pt-br"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <link rel="stylesheet" href="<?=URL?>/public/css/estilos.css">     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" >         <title><?= APP_NOME?></title> </head> <body>     <?php         $rotas = new Rota();     ?>     <script src="https://code.jquery.com/jquery-3.5.1.min.js" ></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" ></script> <script src="<?=URL?>/public/css/script.js" ></script> </body> </html> estilo.css
      html{     background-color: red; }  
      Estou tentando seguir a padronização MVC(que por sinal eu tenho certa dificuldade), então não consigo achar onde estou errando
    • Por lucascientista
      Boa noite pessoal, sou iniciante no php e tenho uma dúvida que eu acho que pode ser bem simples para vocês que estão mais avançados do que eu. Bom, eu gostaria de saber como usar a orientação ao objeto para cadastro no banco de dados - mysql, só que eu não sei fazer da maneira orientada ao objeto e gostaria de saber.
       
      <?php class Pessoa { $nome; $sobrenome; $endereço; } gostaria de saber como usar uma classe parecida a de cima com o banco de dados
      Muito obrigado, toda ajuda é bem vinda
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.