Ir para conteúdo

[Arquivado]PHP/MYSQL CRUD - Criação website


Jakimif

Posts Recomendados

Olá a todos, nesses últimos tempos andei pesquisando sobre criação de website para Open Tibia, não achei muita coisa por ai na internet, então resolvi analisar o banco de dados de um servidor de tibia,e cá pra nos os sites atuais não vão muito alem de um crud,para quem não sabe crud são operações basicas feita no banco de dados .

C create (criar) R read (ler) U (update) D (delete)

Pensando nisso comecei a desenvolver um website para esse fim, criei algumas classe para fazer todo esse processo e resolvi compartilhar,não vou dar muitos detalhes sobre a classe,apenas postarei exemplos de utilização

 

A primeira classe vem com nome de banco.class.php responsavel pela conexão com banco de dados e operações CRUD

<?php
    abstract class banco{
    /*Propriedades*/
        public $servidor = "localhost";
        public $usuario =    "root";
        public $senha =    "senha";
        public $nomebanco =    "nome";
        public $conexao =     NULL;
        public $dataset         =     NULL;
        public $extras_select     =     NULL;
        public $linhaafetadas      = -1;
        
        /*Metodos*/
            
            public function __construct(){
                $this->conecta();
            }
            public function __destruct(){
                if($this->conexao != NULL):
                mysql_close($this->conexao);        
                endif;
            }
        
            public function conecta(){
                
                $this->conexao = mysql_connect($this->servidor,$this->usuario,$this->senha,TRUE)
                or die($this->trataerro(__FILE__,__FUNCTION__,mysql_errno(),mysql_error(),true));
                mysql_select_db($this->nomebanco)
                or die($this->trataerro(__FILE__,__FUNCTION__,mysql_errno(),mysql_error(),true));
                mysql_query("SET NAMES 'utf8'");
                mysql_query("SET character_set_connection=utf8");
                mysql_query("SET character_set_client=utf8");
                mysql_query("SET character_set_results=utf8");
            }

            
            public function inserir($objeto){
                $sql = "INSERT INTO ".$objeto->tabela." (";
                for($i=0;$i<count($objeto->campos_valores);$i++):
                    $sql .= key($objeto->campos_valores);
                    if($i < (count($objeto->campos_valores)-1)):
                        $sql .= ", ";
                        else:
                        $sql .= ") ";
                    endif;
                    next($objeto->campos_valores);
                    endfor;
                    reset($objeto->campos_valores);
                    $sql .= "VALUES (";
                    for($i=0;$i<count($objeto->campos_valores);$i++):
                    $sql .= is_numeric($objeto->campos_valores[key($objeto->campos_valores)]) ?
                    $objeto->campos_valores[key($objeto->campos_valores)] :
                    "'".$objeto->campos_valores[key($objeto->campos_valores)]."'";
                    if($i < (count($objeto->campos_valores)-1)):
                        $sql .= ", ";
                        else:
                        $sql .= ") ";
                    endif;
                    next($objeto->campos_valores);
                    endfor;
                return $this->executaSQL($sql);
            }// inserir
        
            public function atualizar($objeto){
                $sql = "UPDATE ".$objeto->tabela." SET ";
                for($i=0;$i<count($objeto->campos_valores);$i++):
                    $sql .= key($objeto->campos_valores)."=";
                    $sql .= is_numeric($objeto->campos_valores[key($objeto->campos_valores)]) ?
                    $objeto->campos_valores[key($objeto->campos_valores)] :
                    "'".$objeto->campos_valores[key($objeto->campos_valores)]."'";
                    if($i < (count($objeto->campos_valores)-1)):
                        $sql .= ", ";
                        else:
                        $sql .= " ";
                    endif;
                    next($objeto->campos_valores);
                    endfor;
                    $sql .="WHERE ".$objeto->id."=";
                    $sql .= is_numeric($objeto->valorid) ? $objeto->valorid : "'".$objeto->valorid."'";
                echo $sql;
                return $this->executaSQL($sql);
            }//atualizar
            
            public function deletar($objeto){
            $sql = "DELETE FROM ".$objeto->tabela;
                    $sql .=" WHERE ".$objeto->id."=";
                    $sql .= is_numeric($objeto->valorid) ? $objeto->valorid : "'".$objeto->valorid."'";
                return $this->executaSQL($sql);        
            }//delete
            public function selecionaTudo($objeto){
                $sql = "SELECT * FROM ".$objeto->tabela;
                if($objeto->extras_select != NULL):
                    $sql .= " ".$objeto->extras_select;
                endif;
                return $this->executaSQL($sql);
            }//seleciona tudo
            
            public function selecionaCampos($objeto){
                
                $sql = "SELECT ";
                for($i=0;$i<count($objeto->campos_valores);$i++):
                    $sql .= key($objeto->campos_valores);
                    if($i < (count($objeto->campos_valores)-1)):
                        $sql .= ", ";
                        else:
                        $sql .= " ";
                    endif;
                    next($objeto->campos_valores);
                    endfor;
                
                $sql .= " FROM ".$objeto->tabela;
                if($objeto->extras_select != NULL):
                    $sql .= " ".$objeto->extras_select;
                endif;
                return $this->executaSQL($sql);
            }//seleciona tudo
        
            public function executaSQL($sql=NULL){
                if($sql != NULL):
                    $query = mysql_query($sql) or $this->tratarerro(__FILE__,__FUNCTION__);
                    $this->linhasafetadas = mysql_affected_rows($this->conexao);
                    if(substr(trim(strtolower($sql)),0,6)=='select'):
                        $this->dataset = $query;
                        return $query;                
                    else:
                        return $this->linhasafetadas;
                    endif;
                else:
                    $this->trataerro(__FILE__,__FUNCTION__,NULL,'Ocorreu um erro interno,desculpe',false);
                endif;
            }// executa SQL
            public function retornaDados($tipo=NULL){
                switch(strtolower($tipo)):
                case "array":
                    return mysql_fetch_array($this->dataset);
                    break;
                case "assoc":
                    return mysql_fetch_assoc($this->dataset);
                    break;
                case "object":
                    return mysql_fetch_object($this->dataset);
                    break;
                default:
                    return mysql_fetch_object($this->dataset);
                    break;
                endswitch;
            }//retorna dados
            
            public function trataerro($arquivo=NULL,$rotina=NULL,$numerro=NULL,$msgerro=NULL,$geraexcept=FALSE){
                if($arquivo == NULL) $arquivo="Não informado";
                if ($rotina == NULL) $rotina="Não informada";
                if ($numerro == NULL) $numerro=mysql_errno($this->conexao);
                if ($msgerro == NUll) $msgerro=mysql_error($this->conexao);
                $resultado = 'Ocorreu um erro com os seguintes detalhes:<br />
                            <strong>Arquivo:</strong> '.$arquivo.'<br />
                            <strong>Rotina:</strong> '.$rotina.'<br />
                            <strong>Código:</strong> '.$numerro.'<br />
                            <strong>Arquivo:</strong> '.$msgerro.'';
                            if($geraexcept = false):
                                echo($resultado);
                            else:
                                die($resultado);
                            endif;
                
            }
    }
?>

Uma segunda classe precisou ser criada por fim de organização com o nome de base.class.php responsavel por de fato pegar o nome da tabela no banco de dado e executar as operações

<?php
    require_once("banco.class.php");
    abstract class base extends banco{
        public $tabela = NULL;
        public $campos_valores = array();
        public $id = NULL;
        public $valorid = NULL;
        public $extras_select = NULL;
        
        public function addCampo($campo=NULL,$valor=NULL){
            if($campo != NULL):
                $this->campos_valores[$campo] = $valor;
            endif;
        }
        
        public function delCampo($campo=NULL){
            if(array_key_exists($campo,$this->campos_valores)):
                unset ($this->campos_valores[$campo]);
            endif;
        }
        
        public function setValor($campo=NULL,$valor=NULL){
            if($campo != NULL && $valor != NULL):
                $this->campos_valores[$campo] = $valor;
            endif;
        }
        public function getValor($campo=NULL){
            if($campo != NULL && array_key_exists($campo,$this->campos_valores)):
                return $this->campos_valores[$campo];
                else:
                    return FALSE;
                endif;
        }
    }
?> 

Agora vamos preparar a classe para executar as operações desejadas na tabela "accounts" accounts.class.php

<?php
require_once ("base.class.php");
    class accounts extends base{
        public function __construct($campos=array()){
            parent::__construct();
            $this->tabela = "accounts"; /*Seleciona a tabela*/
            if(sizeof($campos)<= 0):
            $this->campos_valores = array(
                "email" => 'andre_garehotmail.com'
            );
            else:
                $this->campos_valores = $campos;
                endif;
                $this->id = "id";
        }
    
    }
?>

E por fim exemplo de utilização para começar a utilizar a classe precisamos importar ela na página

<?php
require_once ("accounts.class.php");
$accounts = new accounts();

Um exemplo pratico atualizando campos na tabela accounts,pode pegar este dados de um formulario, como geralmente é feito

$accounts->setValor('name','Rodrigo'); ## Atualizando o nome 'Rodrigo' na tabela accounts ##
$accounts->setValor('password','123455');## Adicionando o 'password' na tabela accounts ##
$accounts->atualizar($accounts);

Selecionando todos os dados da account,um exemplo disso é o characters.php onde lista as informações do personagem(este exemplo foi feito com account,poderia ser na tabela players)

$accounts->extras_select = "WHERE id = 5"; /*selecionar id,name,email da account ID = 5*/
$accounts->selecionaTudo($accounts);
while($res = $accounts->retornaDados()):

    echo $res->id .' / '.$res->name .' / '.$res->email.'<br/>';
endwhile; 

Deletando a account no banco de dados

$accounts->valorid = 55;
$accounts->deletar($accounts);

Adicionando uma account, lembrando que pode pegar os dados pelo formulario,como geralmente é feito no exemplo foi feito so Account Name e Password

$accounts->addCampo('name','Jakimif');
$accounts->addCampo('password','123456');
$accounts->inserir($accounts);
  • isso não foi um tutorial e sim exemplo de utilização da classe.
  • poderia ser feito tudo na mesma página,mas dificultaria a manutenção
  • criando a classe você pode utilizar em qualquer página do site com uma simples linha,como feito nos exemplos acima
Editado por Jakimif
Link para o comentário
Compartilhar em outros sites

  • 4 years later...
Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...