Ir para conteúdo

POWERED BY:

Arquivado

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

pinoc

[Resolvido] Array direto por POST

Recommended Posts

Opa pessoal.

 

Tenho os seguintes inputs em um form.

 

<div class="local" id="adicionar_membro">
   <label for="textfield">Nome do membro:</label>
   <input type="text" name="msg[]" />
   <label for="textfield">Setor:</label>
   <input type="text" name="msg[]" />
   <label for="textfield">Função:</label>
   <input type="text" name="msg[]" />
   <label for="textfield">Foto:</label>
   <input type="file" name="foto[]" />
</div><!-- LOCAL -->

 

Preciso enviar todos os MSG[] para uma unica tabela do banco então obviamente preciso enviar do form para uma array.

 

Estou puxando do form direto para a array assim.

 

  $msg = array_search(1 , array_count_values($_POST['msg']));

 

Já ussei dessa forma em outra ocasião e funcionava, porem dessa vez não esta funcionando.

Quando do um echo "$msg"; ele exibi so o valor pro primeiro input cadastrado para todos os echos que eu der.

 

Alguem sabe uma forma de fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O valor do post 'msg' por si só é um vetor:

$_POST['msg']

 

Não entendi sua dúvida, pois array_search() serve para procurar um valor dentro de um array, e caso encontrado, retorna a sua chave.

 

Se você precisa salvar cada valor em um registro separado, utilize iterators estruturas de controle, tais como: for(); foreach; while. Caso necessite salvar todos os valores em um único registro, utilize implode().

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Gabriel já disse tudo, só um pequeno parêntese no comentário dele é que via de regra os itens por ele citados são estruturas de controle e não Iterators.

 

Iterator é a forma que o PHP 5 nos brindou para iterar objetos através de interfaces neles implementáveis.

 

As estruturas de controle, especificamente as de repetição, internamente ou não utilizam os métodos dessa(s) interface(s) para fazer o proposto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente cometi um erro e vou corrigi-lo, acabei confundindo algumas coisas. Mas devo dizer que você também cometeu Bruno. Em PHP conhecemos a interface Iterator, que é para a iteração de objetos. Mas o iterator não é uma interface.

 

Relembrando as estruturas de dados, coisa que pouco usamos em PHP. Em linhas gerais, o iterator é o identificador único em um estrutura de dados (pilha, lista, fila, arvores). O mais simples é o inteiro. Existem outros. Como neste exemplo:

for ($i=0; $i < 100; $i++) {
  $array[i] = 0;
}

O iterator é o "$i", pois ele identifica de forma única cada valor do array.

 

Apesar de haver muita discussão e várias definições sobre o que é um iterator, essa é a definição mais plausível que eu me lembro e o qual encontrei em alguns artigos. E gera bastante confusão por existir uma interface com o mesmo nome.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é ali em sima eu meio que viajei, esquece oque escrevi ali ta completamente errado da forma que tava fazendo para oque quero fazer.

 

Gabriel.

 

Poderia me explicar melhor como seria isso de separar os valores por registro.

Você diz por exemplo tenho o msg vamo se dizer que msg tem o valor de (um, dois, tres) o um ficaria em um id diferente dos outros? ou como seria isso não entendi muito bem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você diz por exemplo tenho o msg vamo se dizer que msg tem o valor de (um, dois, tres) o um ficaria em um id diferente dos outros?

 

Isso. Analisando dessa forma, você poderia utilizar da seguinte maneira:

foreach($_POST['msg'] AS $value){
   /** código necessário **/
}

O "código necessário" é referente a sua inclusão no SGBD. Cada loop é um valor, então você realizaria um INSERT por valor.

 

Como por exemplo, a saída desses em um array como esse:

$array = array(0 , 1 , 2 , 3 , 4);

Utilizando o seguinte código:

foreach($array AS $value){
printf('Valor -> %s;<br />' , $value);
}

 

Seria:

Valor -> 0;

Valor -> 1;

Valor -> 2;

Valor -> 3;

Valor -> 4;

 

 

Caso você necessite todos os valores agrupados, com o implode poderia ser da seguinte forma:

var_dump(implode(', ' , $_POST['msg']));

 

Utilizando os mesmos valores antes mencionados, sua saída seria a seguinte:

string(13) "0, 1, 2, 3, 4"

 

Vai depender de como você quer utilizar os valores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta deixa eu ver se entendi.

 

Se eu colocar o seguinte codigo.

foreach($_POST['msg'] AS $value){
   /** COLOCAR UM INSERT AQUI. **/
}

 

Na minha tabela seria inserido assim.

 

TABELA

 

ID    |    MSG
1          Valor 1
2          Valor 2
3          Valor 3
4          Valor 4
5          Valor 5

 

Vamo supor que eu envie 50 array eu consigu dar echo em cada array com esse codigo?

 

foreach($array AS $value){
       printf('Valor -> %s;<br />' , $value);
}

 

Não entendi muito bem essa de inprimir depois.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta deixa eu ver se entendi.

 

Se eu colocar o seguinte codigo.

foreach($_POST['msg'] AS $value){
   /** COLOCAR UM INSERT AQUI. **/
}

 

Na minha tabela seria inserido assim.

 

TABELA

 

ID    |    MSG
1          Valor 1
2          Valor 2
3          Valor 3
4          Valor 4
5          Valor 5

Sim, basicamente desse modo. Basta criar o comando de INSERT.

 

Vamo supor que eu envie 50 array eu consigu dar echo em cada array com esse codigo?

 

foreach($array AS $value){
       printf('Valor -> %s;<br />' , $value);
}

 

Não entendi muito bem essa de inprimir depois.

Você não estaria enviando 50 arrays, estará enviando um array com 50 valores. E sim, você consegue dar um echo em cada valor. O printf() é uma forma de output strings, no qual a "pode" ser formatada(na real é formatada, mas se não passar formato algum, ela não é formatada... sim, o manual é confuso em alguns pontos mesmo), assim como o echo também é uma forma de output strings.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O foreach serve, basicamente, para executar um comando para cada elemento de um array, não importando a quantidade de valores do seu array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não estaria enviando 50 arrays, estará enviando um array com 50 valores. E sim, você consegue dar um echo em cada valor. O printf() é uma forma de output strings, no qual a "pode" ser formatada(na real é formatada, mas se não passar formato algum, ela não é formatada... sim, o manual é confuso em alguns pontos mesmo), assim como o echo também é uma forma de output strings.

 

Entendi o esquema de enviar mais ou menos ainda.

Porem no meu form no caso estou enviando 7 inputs com valores diferentes. (ele crio 30 registro para min não sei porque mais enfim). Minha duvida ainda é, vamo suporte que o usuario envie esses 7 inputs cria 7 registro quero dar print nos 7 ok sem problema, mas se o usuario cadastrar mais 7 inputs seria possivel eu separar o primeiro cadastro do segundo, no print?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Minha duvida ainda é, vamo suporte que o usuario envie esses 7 inputs cria 7 registro quero dar print nos 7 ok sem problema, mas se o usuario cadastrar mais 7 inputs seria possivel eu separar o primeiro cadastro do segundo, no print?

Isso vai depender única, e exclusivamente, da forma que você for separar os dados no SGBD. Para esse fim, você pode utilizar chaves estrangeiras (Foreign Keys).

 

Observe essa image (encontrada no Google Images):

ForeignKey.jpg

Existem duas tabelas:

- Produto (Product);

- Categoria (Category).

 

Elas estão ligadas por uma seta que vai de Categoria (Category) para Produto (Product).

A seta indica que há uma relação entre as tabelas.

 

Indo pela lógica básica, cada Produto possui uma Categoria e cada Categoria possui vários Produtos.

 

Logo a relação é:

1 (Categoria) x N (Produto).

 

Nas tabelas, você verá que existe um campo em comum em ambas as tabelas, chamado CategoryID.

 

Na tabela Categoria (Category), o campo CategoryID é a chave primária (Primary Key) e na tabela Produto (Product) o campo CategoryID é uma chave estrangeira (Foreign Key). Isso porque CategoryID da tabela Produto faz referência ao campo CategoryID da tabela Categoria.

 

A direção, e tipo, da seta, mencionada anteriormente, indica qual o tipo de relação entre as tabelas. Nesse caso indica a relação 1:N (Categoria -> Produto).

 

É dessa forma que cada Produto é separado para um única Categoria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel Heming

 

Cara muito obrigado pelas suas explicações, entendi oque precisava para agora.

mais percebi que tenho muito que estudar ainda HAHAH.

 

Abraço e obrigado denovo pela ajuda.

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.