Ir para conteúdo

Arquivado

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

DinhoPHP

Realizar conexão com a tabela do BD por variável

Recommended Posts

Tenho o seguinte código e gostaria de realizar a conexão com as tabelas do banco de dados, por meio de variável para não precisar fazer diferentes arquivos. Desde já, agradeço!

 

 

<?php
 
require_once 'Crud.php';
 
class Usuarios extends Crud{
 
protected $table = 'nome_da_tabela'; <=QUANDO INSIRO UMA VARIÁVEL COM A STRING VINDA DE OUTRO ARQUIVO AQUI, NÃO FUNCIONA.
private $lembrete;
private $dirigente;
private $integrantes;
private $festividade;
 
 
public function setLembrete($lembrete){
$this->lembrete = $lembrete;
}
 
public function getLembrete(){
return $this->lembrete;
}
 
public function setDirigente($dirigente){
$this->dirigente = $dirigente;
}
 
public function setIntegrantes($integrantes){
$this->integrantes = $integrantes;
}
 
public function setFestividade($festividade){
$this->festividade = $festividade;
}
 
public function insert(){
 
//Verifica se há registros, e se houver, segue com a inserção
 
$linhas="SELECT * FROM $this->table";
$linhas2=DB::prepare($linhas);
$linhas2->execute();
if($linhas2->rowCount() == 0):
 
$sql  = "INSERT INTO $this->table (lembrete, dirigente, integrantes, festividade) VALUES (:lembrete, :dirigente, :integrantes, :festividade)";
$stmt = DB::prepare($sql);
$stmt->bindParam(':lembrete', $this->lembrete);
$stmt->bindParam(':dirigente', $this->dirigente);
$stmt->bindParam(':integrantes', $this->integrantes);
$stmt->bindParam(':festividade', $this->festividade);
 
//Executa o cadastro
return $stmt->execute();
 
else:
  $msg="Sorry! Já existe informações cadastradas no sistema, sendo possível apenas editá-las ou excluí-las.";
endif;
 
}
 
public function update($id){
 
$sql  = "UPDATE $this->table SET lembrete = :lembrete, dirigente = :dirigente, integrantes = :integrantes, festividade = :festividade WHERE id = :id";
$stmt = DB::prepare($sql);
$stmt->bindParam(':lembrete', $this->lembrete);
$stmt->bindParam(':dirigente', $this->dirigente);
$stmt->bindParam(':integrantes', $this->integrantes);
$stmt->bindParam(':festividade', $this->festividade);
$stmt->bindParam(':id', $id);
return $stmt->execute();
 
}
 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A propriedade $table é protegida (protected). Logo, não é possível alterá-la fora da classe. Uma alternativa é criar um método setTable, que você utilizará para alterar o nome da tabela.

 

Por exemplo:

 

public function setTable( $table )
{
    $this->table = $table
}

 

Depois é só fazer:

 

$Usuarios = new Usuarios;
$Usuarios->setTable( 'nome_da_tabela' );
// ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado! Beraldo. Mas eu já havia pensado em algo assim, isto até ajuda só que eu quero utilizar uma variável com um valor resgatado de outra página, ou seja, um campo hidden que já contenha o nome_da_tabela para passar para o método sugerido por você.

 

$usuarios = new Usuarios;

&usuaruios->setTable($variavel);

 

Ok! :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Campo hidden? Tem certeza? Eu poderia editar o valor desse campo usando o Firebug e gerar um erro na sua aplicação. Ou pior, remover uma tabela ou até a base de dados toda.

 

Se fizer isso, seu sistema estará vulnerável a SQL Injection

Compartilhar este post


Link para o post
Compartilhar em outros sites

Confesso não ser perito em segurança nesse ponto, mas Beraldo, para entender melhor o que quero dizer, visite este link http://assembleiadedeusdarenovacao.com/dep_homelog_pentecostes01.php%C2'> clique em clicar para alterar. Será carregada uma página neste iframe composta por quatro arquivos; para não criar uma página pra cada departamento e esta ser carregado no iframe, eu gostaria que a tabela ($variavel) recebesse o valor que corresponde a tabela do departamento evitando assim, criar um arquivo para cada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual link? :unsure:

 

Olha, até dá pra fazer isso. E, pelo que entendi, a saída é usar o setTable mesmo. Apenas tome cuidado, validando o valor vindo do campo hidden. Use um switch() (ou if/else) para aceitar apenas valores possíveis. Se você usar o valor literal informado pelo usuário, poderá ter problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Endereço: assembleiadedeusdarenovacao.com/dep_homelog_pentecostes01.php

 

Tudo bem, pensarei no If/else ou switch, pois o nome da tabela recebida pela setTable virá da página anterior com o nome certo da tabela. Breve retornarei com os resultados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O switch é simples:

 

 

switch ( $tabela_vinda_do_form )
{
    case 'tabel1':
        $tabela = 'tabela1';
        break;
 
        case 'tabel2':
            $tabela = 'tabela2';
            break;
 
    default:
         echo "Tabela inválida. Possível ataque detectado";
         exit;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinto pela demora de resposta, mas preferi fazer uso dessa sua dica

 

$Usuarios = new Usuarios;

$Usuarios->setTable( 'nome_da_tabela' );

 

criando assim, apenas mais desses arquivos com o nome de cada tabela. Um dia farei algo mais sofisticado e irei rir disto assim como dos meus emaranhados códigos do passado. Muito obrigado por todo apoio. :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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