Ir para conteúdo

POWERED BY:

Arquivado

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

lins.drt

[Resolvido] Error Number: 1064 (CodeIgniter)

Recommended Posts

Bom dia a todos!

 

Estou com um problema ao tentar cadastrar dados no banco de dados - estou usando CodeIgniter.

 

Tenho uma página/form que envia dados para um controle que faz uma solicitação a um model para executar o cadastro, no post tenho dados comuns (input texts, select option e textarea) e tenho checkboxes que vão em forma de vetor, no model (também tentei fazer o código direto no controle) tenho o código de insert dentro de dois loops, um vai ler o vetor cores[] e o outro o vetor tamanhos[]. O insert está dentro do loop mais interno.

 

O código executa normalmente, pois antes de tentar fazer insert tinha dado um echo dentro do loop e os dados foram exibidos corretamente ...

 

Segue o código:

 

for($i=0;$i<count($data['cores']);$i++){
  for($j=0;$j<count($data['tamanhos']);$j++){
     $cod=random_string('nozero', 6).random_string('numeric', 10);
     $this->db->query("
        INSERT INTO
           produtos(
	'id',
               'codigo',
	'artigo',
	'preco',
	'categoria',
	'modelagem',
	'classe',
	'cor',
	'tamanho',
	'observacao',
	'ordem_tamanhos',
	'desconto'
    )
 VALUES(
	'',
	'".$cod."',
	'".$data['artigo']."',
	'".$data['preco']."',
	'".$data['categoria']."',
	'".$data['modelagem']."',
	'".$data['classe']."',
	'".$data['cores'][$i]."',
	'".$data['tamanhos'][$j]."',
	'','','')
 ");
   }
}

 

someone?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos!

 

Estou com um problema ao tentar cadastrar dados no banco de dados - estou usando CodeIgniter.

 

Tenho uma página/form que envia dados para um controle que faz uma solicitação a um model para executar o cadastro, no post tenho dados comuns (input texts, select option e textarea) e tenho checkboxes que vão em forma de vetor, no model (também tentei fazer o código direto no controle) tenho o código de insert dentro de dois loops, um vai ler o vetor cores[] e o outro o vetor tamanhos[]. O insert está dentro do loop mais interno.

 

O código executa normalmente, pois antes de tentar fazer insert tinha dado um echo dentro do loop e os dados foram exibidos corretamente ...

 

Segue o código:

 

for($i=0;$i<count($data['cores']);$i++){
  for($j=0;$j<count($data['tamanhos']);$j++){
     $cod=random_string('nozero', 6).random_string('numeric', 10);
     $this->db->query("
        INSERT INTO
           produtos(
	'id',
               'codigo',
	'artigo',
	'preco',
	'categoria',
	'modelagem',
	'classe',
	'cor',
	'tamanho',
	'observacao',
	'ordem_tamanhos',
	'desconto'
    )
 VALUES(
	'',
	'".$cod."',
	'".$data['artigo']."',
	'".$data['preco']."',
	'".$data['categoria']."',
	'".$data['modelagem']."',
	'".$data['classe']."',
	'".$data['cores'][$i]."',
	'".$data['tamanhos'][$j]."',
	'','','')
 ");
   }
}

 

someone?

 

Resolvido! Eram as malditas aspas simples!

 

Veja abaixo o correto:

 

for($i=0;$i<count($data['cores']);$i++){
  for($j=0;$j<count($data['tamanhos']);$j++){
     $cod=random_string('nozero', 6).random_string('numeric', 10);
     $this->db->query("
        INSERT INTO
           produtos(
               id,
               codigo,
               artigo,
               preco,
               categoria,
               modelagem,
               classe,
               cor,
               tamanho,
               observacao,
               ordem_tamanhos,
               desconto
           )
        VALUES(
               '',
               '".$cod."',
               '".$data['artigo']."',
               '".$data['preco']."',
               '".$data['categoria']."',
               '".$data['modelagem']."',
               '".$data['classe']."',
               '".$data['cores'][$i]."',
               '".$data['tamanhos'][$j]."',
               '','','')
        ");
   }
}

 

Os campos da tabela não podem/devem ser referenciados entre aspas!...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother apenas uma dúvida, você está usando o FOR dentro do MODEL(o certo não seria fazer isso no controller ?), e outra porque não usa o ACTIVE RECORD do próprio CI ?

 

$this->db->insert('produtos', $dados);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pow André, até que eu queria utilizar de forma mais elegante os recursos do CodeIgniter mais não descubri uma forma de utilizar corretamente active records e respeitar o modelo MVC pra minha necessidade.

 

É o seguinte: Tenho um form para cadastrar produtos (camisas), mais camisas tem modelagens diferentes, cores, tamanhos etc...

 

A forma que fiz foi para fazer um cadastro rápido, caso contrário eu deveria cadastrar produto por produto, o que me consumiria um tempo precioso, por exemplo, ao cadastrar uma camisa eu tenho que especificar:

 

 

codigo, artigo, preco, categoria, modelagem, classe, cor, tamanho, observacao e ordem_tamanhos, mas se eu utilizar AR, não consigo abrir o vetor cor e tamanho para cadastrar varios produtos em uma unica vez, porque uma camisa com nome A com preço B, da categoria C, modelagem D, da classe E pode ter os tamanhos P, M, G, GG, XGG etc e as cores azrul royal, branca, preto, verde bandeira etc que tornam um produto parecido com tamanhos e cores distintas...é complicado explicar isso, mas a unica forma que achei foi fazer foi abrir os vetores cor e tamanho com loop e cadastrar os produtos individualmente com um código único para cada um e o cadastro fica +- assim:

 

009863 | Camisa | 9.90 | Meia manga | Unissex | Produto | Preto | P

498575 | Camisa | 9.90 | Meia manga | Unissex | Produto | Preto | M

288765 | Camisa | 9.90 | Meia manga | Unissex | Produto | Preto | G

265492 | Camisa | 9.90 | Meia manga | Unissex | Produto | Preto | GG

356647 | Camisa | 9.90 | Meia manga | Unissex | Produto | Preto | XGG

986678 | Camisa | 9.90 | Meia manga | Unissex | Produto | Verde bandeira | P

238746 | Camisa | 9.90 | Meia manga | Unissex | Produto | Verde bandeira | M

019724 | Camisa | 9.90 | Meia manga | Unissex | Produto | Verde bandeira | G

875678 | Camisa | 9.90 | Meia manga | Unissex | Produto | Verde bandeira | GG

 

O cadastro por AR é fácil e prático mas neste caso eu deveria cadastrar produto por produto, entendeu? você pode me ajudar nisso?...A ideia de utilizar AR para fazer isso seria excelente! o que me ajudaria também a respeitar nosso querido MVC...abrçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Lins, na verdade voce esta seguindo padrao MVC, ate porque você esta deixando a insercao no model e tals, o AR no caso seria apenas uma forma de insercao, que no caso você teria apenas que mudar o $this->db->query() para $this->db->insert();

 

Vou deixar um exemplo de uma forma de usar o ActiveRecord nessa situação:

 

model

function insert($table, $dados) {
$this->db->insert($table, $dados);
}

controller

function add_camisa() {

// carega o model
$this->load->model('camiseta_model', 'camiseta');

$data['codigo']    = random_string('nozero', 6).random_string('numeric', 10);
$data['artigo']    = $this->input->post('codigo');
$data['preco']     = $this->input->post('codigo');
$data['categoria'] = $this->input->post('codigo');
$data['modelagem'] = $this->input->post('codigo');
$data['classe']    = $this->input->post('codigo');

$cores = $this->input->post('cores'); // Aqui você recebe os vetores
$taman = $this->input->post('tamanho'); // Aqui você recebe os vetores

// Aqui você addiciona os registros de acordo com a posicao dos vetores;
for($i=0;$i<count($cores);$i++){

  for($j=0;$j<count($taman);$j++){
    $data['cores']   = $cores[$i];
    $data['tamanho'] = $taman[$j];    
    // envia os dados para o model e salva no banco de dados    
    $this->camisa->add_camisa('tabela_camisa', $data); 

  }

}


}

 

 

Abraços e até mais :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

puts André, tú é o cara!!! joia.gif

 

Pow cara, vlw mesmo, vou testar o código depois e posto se der tudo ok, aparentemente a lógica faz muito sentido e é o que eu queria fazer e não estava conseguindo...vou tentar e posto depois....abs

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.