Ir para conteúdo

Arquivado

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

RobertoSilva007

Matriz de Array

Recommended Posts

Fala aí galera...beleza?

 

Bom...não sei se expressei bem o meu problema aí no titulo do post.

 

Enfim...o problema que estou a enfrenta É:

 

Tenho um form com 4 campos input's para serem cadastrados no banco.

 

O detalhe é, exemplo:

 

O usuario digitará os valores nos 4 campos e irá adicionar tais valores em um array, depois digitará novos valores e adicionará os mesmos também no mesmo array, e assim ele fará quantas vezes precisar, digamos que...é algo parecido com produtos a serem adicionados no pedido, ou seja...o pedido pode ou não conter mais de um produto.

 

Com um unico campo eu consigo fazer, mais....pegar mais de um e inserir tudo na ordem correta, isso não estou conseguindo fazer.

 

Se alguem entendeu o que procuro, será que...alguem pode me ajudar?

 

Desde já agradeço pela atenção.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi, bastaria adicionar um par de chaves vazias no final do atributo name do elemento <input> e nomear todos os elementos <input> referentes à essa informação especifica com o valor:

 

<input type="text" name="item[]" id="item_1" />
<input type="text" name="item[]" id="item_2" />
<input type="text" name="item[]" id="item_3" />
<input type="text" name="item[]" id="item_4" />
<input type="text" name="item[]" id="item_5" />

No programa receptor, o índice name em $_POST, será um array, o qual você filtrará para remover os vazios e proceder com aquilo que quer fazer.

 

Se não for isso, explica melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Bruno, beleza?

 

Desde já....grato por sua atenção.

 

Pois é...eu já suspeitava que eu não tinha me expressado claramente...Sorry!

 

Bom...criei um pequeno exemplo, que demonstrará mais ou menos o meu problema.

 

<?php
session_start();
?>
<script type="text/javascript">
   function incluir(){
       document.getElementById('cmd').value = "incluir";
       document.form.submit();
   }
   function imprimir(){
       document.getElementById('cmd').value = "imprimir";
       document.form.submit();
   }
   function destruir(){
       document.getElementById('cmd').value = "destruir";
       document.form.submit();
   }
</script>
<form id="form" name="form" method="post" onsubmit="return false;">
   <input type="hidden" name="cmd" id="cmd" value="<?=$cmd?>">
   Nome: <input type="text" name="nome" id="nome" size="40"><br>
   Sobrenome:<input type="text" name="sobrenome" id="sobrenome" size="40"><br>
       <a href="#"   onclick="javascript:incluir();">Incluir</a>
       <a href="#"   onclick="javascript:imprimir();">Imprimir</a>
       <a href="#"   onclick="javascript:destruir();">Destruir</a>
</form>

<?php
$cmd = $_POST["cmd"];
if($cmd == "incluir"){
   $_SESSION['nome'][] = $_POST['nome'];


   $nome = $_SESSION["nome"];
  // $sobreNome = $_SESSION["sobrenome"];

   if($nome != null){

       foreach ($nome  as  $descNomes) { 
           echo $descNomes.'<br>'; 
       } 
  }
  else{
   echo "nada";
  }
}
if($cmd == "imprimir"){
  $nome =  $_SESSION['nome'];


 if($nome != null){

     foreach ($nome  as  $descNomes) { 
           echo $descNomes.'<br>'; 
       } 
  }
  else{
   echo "Não há dados na sessão";
  }
}
if($cmd == "destruir"){
   unset($_SESSION['nome']);
}
?>

 

Como pode ver...dessa forma aí, eu posso incluir quantos nomes que eu quiser...o problema é, inserir mais de um atributo, fazendo com que...ao mandar para o banco, eu possa cadastrá-los da seguinte forma:

 

INSERT INTO `array` (`id`, `nome`, `sobrenome`) VALUES 
 (1,'fulano 1',' da silva'),
 (2,'fulano 2',' de sousa');

 

 

Não sei se eu consegui me expressar melhor dessa vez, mais...é algo desse tipo.

 

Abraços cara...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Evandro, beleza?

 

Bom...foi uma forma que eu achei de ficar com os dados guardados antes de inserir...é que....nunca trabalhei com arrays e muito menos em enviá-las para um banco da forma correta, então...ainda estou no processo de testes...

 

Mas...se alguem tiver uma solução melhor....será bem vinda...pois com arrays...sou meio rodado...rssss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim nunca trabalhou com arrays? $_POST e $_SESSION são arrays. $nome que você extrai de um índice de $_SESSION e passa para o foreach iterar, é outro array.

 

Enfim...

 

O que eu disse ainda é válido. Uma vez que você tenha todos os valores para inserir, você constrói a query. Um exemplo rápido:

 

$data = array(

   array( 'Bruno', 'Augusto' ),
   array( 'Evandro', 'Oliveira' ),
   array( 'Roberto', 'Silva' )
);

$query = 'INSERT INTO `table` ( `firstName`, `lastName` ) VALUES ';

array_walk(

   $data,

   function( $current ) use( &$query ) {

       $query .= sprintf( '( "%s" ), ', implode( '", "', $current ) );
   }
);

$query = sprintf( '%s;', trim( $query, ', ' ) );

var_dump( $query );

Produz, com exceção da indentação manualmente adicionada:

 

INSERT INTO `table` ( `firstName`, `lastName` )
   VALUES
       ( "Bruno", "Augusto" ),
       ( "Evandro", "Oliveira" ),
       ( "Roberto", "Silva" );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno, tá dando erro nessa linha

 

function( $current ) use( &$query ) {

 

 

Versão do PHP inferior a 5.3

 

$query = 'INSERT INTO `table` ( `firstName`, `lastName` ) VALUES ';
foreach ($data as $item) {
   $query .= sprintf('("%s"),', implode('", "', $current));
}

var_dump($query);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quero agradecer aos amigos pela atenção ao meu problema...e me desculpe pela demora no retorno.

 

Bom, sim...dessa forma aí dá certinho Evandro Oliveira, porém...ainda tenho outro problema no formulario, como incrementar um array com dados vindo do form.

 

Detalhe: O que eu quero...não é criar vários input's com o mesmo 'name="nome[]"' não, e sim...criar por exemplo:

 

Nome: <input type="text" name="nome" id="nome" size="40"><br>
   Sobrenome:<input type="text" name="sobrenome" id="sobrenome" size="40">

 

Então o que eu quero agora é o seguinte.

O usuario digita por exemplo: Nome=João, Sobrenome=Cambão.

 

Após fazer isso, ele irá clicar em um botão e esses 2 atributos serão adicionados ao array.

 

Depois ele digitar novamente novos valores, e tais valores também irão para o array....e assim ele irá fazer quantas vezes ele desejar.

 

Daí....depois que tiver tudo ok, ou seja, com os valores a ser cadastrados no banco, já inseridos no array, aí sim...que ele irá mandar o array para a classe que irá cadastrar os dados no banco.

 

 

Bom...esse é o meu problema...e foi por isso que eu usei sessão, pois dessa forma ele adiciona...mas..não está indo adiante...rsss :clap:

 

 

Enfim...mais alguma luzinha por aí? :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, de fato com sessões fica mais fácil.

 

Mas se você adicionar os campos com JavaScript fica melhor. Se o JavaScript estiver desabilitado o usuário poderá inserir apenas um nome, se estiver habilitado, um botãozinho clicado criaria outros campos em tempo de execução.

 

Sem JavaScript, o botão em questão seria um submit para a própria URL, armazenando em sessão os novos dados:

 

if( isset( $_POST['nome_do_botao' ) ) {

   if( ! $_SESSION ) {
       session_start();
   }

   if( array_key_exists( 'nomes', $_SESSION ) ) {

       $_SESSION['nomes'] = array();
   }

   $_SESSION['nomes'][] = array( $_POST['firstName'], $_POST['lastName'] );
}

Algo assim.

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.