Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá.. Será que vocês podem avaliar está classe que eu fiz? Tentei fazer do jeito mais simples possivel...
Quando eu digo avaliar é..
Se está simples.. Se tem como deixar c/ mais "perfomance".
Se usei algum comando que pode ser subtituido por outro.
Se ja existe, e eu fiz atoa rsrs.
E se possivel dar dicas aonde eu posso melhorar.
Bom eu não comentei o código então vou explicar..
Eu fiz este código para escrever variaveis em uma tabela (sql), com Nome da variavel, Index, Valor..
E depois é so eu puxar os dados..
Isso me economiza muito tempo, pois posso rapidamente armazenar uma informação, e nao preciso criar uma tabela so para o caso..
Bom eu fiz 7 funções.
Set() = Seta uma variavel ou array na tabela.
Get() = Puxa uma variavel ou array da tabela.
Count() = Conta quantas variaveis X tem na tabela.
Del() = Deleta uma variavel[x] da tabela.
Delarray() = Deleta uma array da tabela.
Copy = Copia uma variavel_x[x] ou para variavel_y[y].
Copyarray = Copia uma array_x para array_y.
Código:
<?php
/ ---------------------------------------------------- /
/* Informações
/* ----------------------------------------------------
/* Tabela SQL
CREATE TABLE IF NOT EXISTS cp_vars (str varchar(55) NOT NULL,index int(11) UNSIGNED NOT NULL DEFAULT '0',value varchar(255) NOT NULL,
PRIMARY KEY (str, index)
);
/ ---------------------------------------------------- /
/ ---------------------------------------------------- /
class eVar {
/ ---------------------------------------------------- /
/* Basic Config
/ ---------------------------------------------------- /
private $table = 'cp_vars'; //Tabela
/ ---------------------------------------------------- /
function checkIndex($str) {
if($str) {
$r = explode(']', $str);
return $r[0];
} else
return 0;
}
function set($str, $val) {
$str = explode('[', $str);
$index = $this->checkIndex($str[1]);
if(!is_array($val)) {
if(mysql_query("INSERT INTO `$this->table` (`str`, `index`, `value`) VALUES ('$str[0]', $index, '$val')")) return true;
else if(mysql_query("UPDATE `$this->table` SET `value` = '$val' WHERE `str` = '$str[0]' AND `index` = $index")) return true;
else return false;
}
else {
foreach($val as $value) {
if(!mysql_query("INSERT INTO `$this->table` (`str`, `index`, `value`) VALUES ('$str[0]', $index, '$value')"))
mysql_query("UPDATE `$this->table` SET `value` = '$value' WHERE `str` = '$str[0]' AND `index` = $index");
$index++;
}
return true;
}
return false;
}
function get($str) {
if(strpos($str, '[')) {
$str = explode('[', $str);
$index = $this->checkIndex($str[1]);
if($qr = mysql_query("SELECT `value` FROM `$this->table` WHERE `str` = '$str[0]' AND `index` = '$index'")) {
$r = mysql_fetch_row($qr);
return $r[0];
}
else return false;
}
else {
if($qr = mysql_query("SELECT `value` FROM `$this->table` WHERE `str` = '$str'")) {
$i = 0;
while($row = mysql_fetch_row($qr)) {
$r[$i] = $row[0];
$i++;
}
return $r;
}
else return false;
}
}
function count($str) {
if($qr = mysql_query("SELECT COUNT(*) FROM `$this->table` WHERE `str` = '$str'")) {
$r = mysql_fetch_row($qr);
return $r[0];
}
else return false;
}
function del($str) {
$str = explode('[', $str);
$index = $this->checkIndex($str[1]);
if(mysql_query("DELETE FROM `$this->table` WHERE `str` = '$str[0]' AND `index` = $index")) return true;
else return false;
}
function delarray($str) {
if(mysql_query("DELETE FROM `$this->table` WHERE `str` = '$str'")) return true;
else return false;
}
function copy($str, $new_str) {
$str = explode('[', $str);
$index = $this->checkIndex($str[1]);
$new_str = explode('[', $new_str);
$new_index = $this->checkIndex($new_str[1]);
if($qr = mysql_query("SELECT `value` FROM `$this->table` WHERE `str` = '$str[0]' AND `index` = '$index'")) {
$r = mysql_fetch_row($qr);
if(mysql_query("INSERT INTO `$this->table` (`str`, `index`, `value`) VALUES ('$new_str[0]', $new_index, '$r[0]')")) return true;
else if(mysql_query("UPDATE `$this->table` SET `value` = '$r[0]' WHERE `str` = '$new_str[0]' AND `index` = $new_index")) return true;
else return false;
}
else return false;
}
function copyarray($str, $new_str) {
if($qr = mysql_query("SELECT `index`, `value` FROM `$this->table` WHERE `str` = '$str'")) {
while($row = mysql_fetch_row($qr)) {
if(!mysql_query("INSERT INTO `$this->table` (`str`, `index`, `value`) VALUES ('$new_str', $row[0], '$row[1]')"))
mysql_query("UPDATE `$this->table` SET `value` = '$row[1]' WHERE `str` = '$new_str' AND `index` = $row[0]");
}
return true;
}
else return false;
}
}
?>
Grato...
Para separar o Var[1]
Separar o Var do [1]...
Para saber em qual o Index.
@edit
Ata o $r = explode(']', $str);
È para separar o 1]
E deixar somente o numero..
Antes eu utilizo o $r = explode('[', $str);
Tá, mas qual a INTENÇÃO disso tudo?
Exemplo:
$obj->set('Var[5]', 'valor');
Isso vai criar um registro na sql com
Str = Var
Index = 5
Value = valor
O objetivo é, que estou fazendo um painel de controle e tendo algo assim tudo fica muito mais rápido.
O objetivo é, que estou fazendo um painel de controle e tendo algo assim tudo fica muito mais rápido.
Rápido? Salvar variáveis no banco de dados vai deixar seu sistema mais rápido?
#not
Outra coisa, se você não for salvar um vetor, e sim uma primitiva? O que acontece com esse campo 'index'? Fica nulo?
Algumas notificações
Cara .. você tem idéia de quanta perda de processamento você teve aí ? vou apontar o trecho do código .. e o problema
function copyarray($str, $new_str) {
if($qr = mysql_query("SELECT `index`, `value` FROM `$this->table` WHERE `str` = '$str'")) {
while($row = mysql_fetch_row($qr)) {
if(!mysql_query("INSERT INTO `$this->table` (`str`, `index`, `value`) VALUES ('$new_str', $row[0], '$row[1]')"))
mysql_query("UPDATE `$this->table` SET `value` = '$row[1]' WHERE `str` = '$new_str' AND `index` = $row[0]");
}
return true;
}
else return false;
}
E Se você **NÃO** tiver esse campo 'index', como vais fazer ? como assim .. 'se não inserir' vai fazer update ? qual a lógica disso ? finalidade .. se não inserir não inseriu não tem que fazer update em nada .. até mesmo porque o registro pode ou não existir .. e o insert só vai te apontar erro ou falar, se tiver problema na query ou o índice já existir ..
Desnecessário esses 'return false' .. se não retornar nada, é porque não retornou true ... então é óbvio que não foi o retorno esperado ..
Você definiu o nome do método 'copyarray' .. o que você está copiando aí ?
Outra coisa .. seu método 'count' .. e se eu quiser a quantidade de registros existentes na tabela ? como faz .. ?
Mesma coisa que te falei sobre a coluna 'index' vale pro seu método del ..
function delarray($str) {
Deleta um array ? você recebe string .. se eu enviar
delarray( array( 1 , 2 , 3 , 4 ) )
vai dar erro ..
Amigo, estude um pouco sobre OOP, porque isso aí não está orientado a objetos .. e sim orientado a gambiarra .. sem ofensas .. tem vários tópicos
neste fórum abordando o assunto de orientação a objetos .. com um pouco mais de empenho e dedicação, acredito que você chegue lá !
>
Isso me economiza muito tempo, pois posso rapidamente armazenar uma informação, e nao preciso criar uma tabela so para o caso..
Isso te economiza tempo , mas te toma 100% de processamento em blocos de códigos desnecessários .. não é necessário criar uma tabela para guardar um valor, se criam registros em tabela ..
Outra coisa ..
$i = 0;
while($row = mysql_fetch_row($qr)) {
$r[$i] = $row[0];
$i++;
}
Qual o motivo da contagem ? não é mais fácil fazer ' [ ] = ' declarando $r um array ?
$R = Array( ) ;
while ( $row = mysql_fetch_row ( ... ) )
$R [ ] = $row[ 0 ] ;
...
[]'s
Obrigado Andrey está era a resposta que eu estava procurando...
E Se você NÃO tiver esse campo 'index', como vais fazer ? como assim .. 'se não inserir' vai fazer update ? qual a lógica disso ? finalidade .. se não inserir não inseriu não tem que fazer update em nada .. até mesmo porque o registro pode ou não existir .. e o insert só vai te apontar erro ou falar, se tiver problema na query ou o índice já existir ..
Então o index sempre vai existir... Se não existir então o registro tb não existi.. Naverdade é pq se não inseriu então era pra ele subtituir.. E não sabia outro jeito de fazer..
Estou fazendo as coisas com o que sei agora, pq se eu for parar para estudar vou querer refazer td.. Ciclo sem fim rsrs.
Outra coisa .. seu método 'count' .. e se eu quiser a quantidade de registros existentes na tabela ? como faz .. ?
Naverdade eu nunca vou querer contar quantos registros tem na tabela..
Então.. Isto que eu fiz é mais um conjunto de funções... Eu puis dentro de uma classe pq..... Acho que não muda nada..
E eu não pretendo usar isto para subtituir tudo.. Apenas vou utilizar quando quero armazenar dados pequeno, não muito significate.
Vlw pela resposta... Realmente é mais para uso pessoal, então eu sei quando vai dar erro.
Mais uma vez vlw pelas dicas..
Certo .. essa classe pode se aplicar à você .. mas o resto não poderá usa-la, ainda continuo falando .. prefira estudar mais, e fazer algo melhor !
eu prefiro usar a classe NATIVA mysqli e/ou query object....ou mesmo um framework maduro...
Pera aí cara, pra que serve tudo isso, não consegui entender.