Ir para conteúdo

Arquivado

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

Andrey Knupp Vital

[Resolvido] Array , Loop ..

Recommended Posts

Opá pessoal , to com um problema aqui ..

 

e o seguinte , to fazendo um sistema de contabilidade , jquery e php .. a duvida e que se tem como fazer

quando o cara sair do foco , conta1 ele criar um input em baixo com o nome & id conta2 , ai se sair do conta2 criar o 3

assim por diante ..

 

mais agora oque presiso mais mesmo e que eu tenho um array

 

$conta = array();

 

 

então suponha que tenha 28 contas

(cada conta = 1 linha no banco)

 

então o cara vai fazendo ate 14 .. de um total de 28

e eu so vo jogando no array as contas assim

 

  $conta[1] .= $_POST['conta1'];
  $conta[2] .= $_POST['conta2'];
  $conta[3] .= $_POST['conta3'];

 

to usando keyup pra cada input botar a conta no array .. jquery ajax . queria saber como eu faço a chave de 1 linha no array ser 1 linha no banco

 

tipo

 

$conta[1] .= $_POST['conta1'] 

e não vai entrar so as contas , vai entrar debito , credito etc etc .. então vai ter Conta , Debito , Credito

 

$conta[1]

$debito[1]

$credito[1]

 

ai ele pegar todos $conta1 , $debtito1 , $credito1 e gravar essa linha no banco , assim por diante

 

algem tem ideia melhor ? o porque disso e porque no final de todos imputs vai ter um botão gravar , ai sobre keyup nesses inputs o cara pode alterar algo se ele errou antes de gravar no banco ..

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

ixi.. complicado isso cara.

 

explica ai o 'problema' e não a solução que você tentou dar.

 

assim, e pq não 'grava' só no fim?

você está 'desperdiçando ajax a toa'.

 

Eu ainda trabalharia com array no lado do html:

 

$_POST['conta'][1];

$_POST['conta'][2];...

 

pq deve estar mó trabalheira fazer os inputs com name diferente, e ficar acrescentando o contador na session (se não você perde o teu array, já q o php deixa de executar, qndo acontece o req.responseText)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Willian .. minha duvida mesmo e criar a chaves e ler cada chave como uma linha no banco

 

e incrementando os arrays a cada conta , ou seja oque tiver vazio nos campos tipo

ele fez so 14 contas o resto não grava .. so grava oque ele jogar dentro do array ..

 

algem sabe como se faz?

 

Tipo a do Input seria algo +/- assim

 

	  $("#conta1").blur(function(){

	       $("#div1").html("Conta2: <input type=\"text\" id=\"conta2\">");

	  });

 

quero saber como faço pros outros .. porque ele so gera quando eu saio com o foco do campo conta1

 

ai queria que quando sair do foco do campo2 criaçe o campo conta3

Compartilhar este post


Link para o post
Compartilhar em outros sites

dúvida de jQuery [javascript]

<html>
<head>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var i = 1;
$('#campos input').live('blur', function(){
	i++
	$('#campos').append( '<label>Conta '+i+':<input type="text" name="conta[]" /></label>' );
});
});
</script>
</head>
<body>
<fieldset id="campos">
	<label>Conta 1:<input type="text" name="conta[]" /></label>

</fieldset><!-- /campos -->
</body>
</html>

adicionar o contador ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

arrebento a boca do balão bruno .. agora esses inputs estão de forma bem mais facil de trabalhar , no caso agora e so o array no php com as chaves pra cada linha

 

tipo

 

array conta1 = 1 linha no banco

 

assim por diante , tem sugestoes?

 

tem como você por limite nos campos , tipo , quando chegar ao campo 30 ele para de adicionar

Compartilhar este post


Link para o post
Compartilhar em outros sites
no caso agora e so o array no php com as chaves pra cada linha

array conta1 = 1 linha no banco

sinceramente não entendi isso, hehe

espera um pouco.. talvez alguém com a cabeça mais fria te entenda e te ajude.

 

 

 

tem como você por limite nos campos , tipo , quando chegar ao campo 30 ele para de adicionar

fácil.

Dá uma pensada cara.. tem um contador ali.. var i

vamos reescrever oque você precisa (algoritmo)

 

-> adicione campos, e incremente um contador [já está feito]

-> se este contador chegar a 30, então não adicione mais.

 

conseguiu pegar a essência ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não , não sei muito de jquery não ..

 

o array e o seguinte , a cada campo criado , ele vai ser uma chave no array de contas

 

tipo eu tenho

$contas = array(); // aqui vem todas as contas que foram resgatadas nos campos 
$contas[conta1] .= $_POST['conta1'] // id gerado la na sua funçao de js
// assim pra todas 30 , então quando ele for inserir , ele vai inserir uma por uma ou seja
// 30 inserts 

;) ;)

 

de jquery eu so sei o basico mesmo , ajax , get , post .. to tentando entender esses loops hehehe

 

resolvi os campos assim :lol:

 

     var i = 1;

            $('#campos input').live('blur', function(){
               i++
							var campos = $("#campos input").size();
			if(campos == '30'){
			  return false;
			}
               $('#campos').append( '<label>Conta '+i+':<input type="text" id="conta[]" name="conta[]" /></label><br />' );

          });
	});

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara...completamente desnecessário

foi oque eu disse diga o problema e não a solução.

 

esse array complicado, e essa atribuição ai, é a tua possível solução, e não 'o teu problema'.

Pensa assim: Uma solução errada, só vai te trazer mais problemas (foi isso que o teu array te fez).

 

beleza.. precisa inserir cada input em uma linha do banco.

Só fazer assim:

<?php
if( $_SERVER['REQUEST_METHOD']=='POST' )
{
	$values = Array();
	foreach( $_POST['conta'] AS $conta )
	{
		$values[] = "(NULL, '{$conta}')";
	}
	$sql = "INSERT INTO `table` ( `id`, `conta` ) VALUES ".implode( ', ', $values );
	echo $sql;	
}
?>
<html>
<head>

</head>
<body>
<form action="" method="post">
	<fieldset id="campos">
		<label>Conta 1:<input type="text" name="conta[]" value="10" /></label>
		<label>Conta 2:<input type="text" name="conta[]" value="30" /></label>
		<label>Conta 3:<input type="text" name="conta[]" value="40" /></label>
		<label>Conta 4:<input type="text" name="conta[]" value="15" /></label>
		<label>Conta 5:<input type="text" name="conta[]" value="15" /></label>
		<label>Conta 6:<input type="text" name="conta[]" value="17" /></label>
	</fieldset><!-- /campos -->
	<label><input type="submit" name="ok" value="ok" /></label>
</form>
</body>
</html>

saída:

INSERT INTO `table` ( `id`, `conta` ) VALUES (NULL, '10'), (NULL, '30'), (NULL, '40'), (NULL, '15'), (NULL, '15'), (NULL, '17') 

isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

+/- , vejo que o seu jquery ele ta abrindo 1 campo quando tira o foco de outro , isso não e problema mais como eu faria pra so abrir outro campo se o campo acima tiver valor ?

:(

 

 

Desculpa o encomodo e chatise rsrs

 

a saida com 3 campos conta em array do seu script foi essa

a do jquery .. que vai botando os campos

INSERT INTO `table` ( `id`, `conta` ) VALUES (NULL, '1')

Compartilhar este post


Link para o post
Compartilhar em outros sites

ops..

 

<?php
if( $_SERVER['REQUEST_METHOD']=='POST' )
{
	$values = Array();
	foreach( $_POST['conta'] AS $conta )
	{
		if( !empty( $conta ) )
			$values[] = "(NULL, '{$conta}')";
	}
	$sql = "INSERT INTO `table` ( `id`, `conta` ) VALUES ".implode( ', ', $values );
	echo $sql;	
}
?>
<html>
<head>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var i = 1;
$('#campos input').live('blur', function(){		
	if( $( this ).val()!='' && $('#campos input:last').val()!='' )
	{
		if( i<10 )//limitar em 10 campos
		{
			i++
			$('#campos').append( '<label>Conta '+i+':<input type="text" name="conta[]" value="" id="'+i+'" /></label>' )
				.find('input:last').focus();
		}
	}
});
});
</script>
</head>
<body>
<form action="" method="post">
	<fieldset id="campos">
		<label>Conta 1:<input type="text" name="conta[]" /></label>

	</fieldset><!-- /campos -->
	<label><input type="submit" name="ok" value="ok" /></label>
</form>
</body>
</html>

enviando os 3 campos:

INSERT INTO `table` ( `id`, `conta` ) VALUES (NULL, '12'), (NULL, '23'), (NULL, '23') 

 

não fiz nada demais, e nem mudei tanto.

 

@edit: melhoria no script

Compartilhar este post


Link para o post
Compartilhar em outros sites

não ta funcionando :S

 

ele so esta verificando o valor do primeiro , se o primeiro tiver valor ele abre os outros ..

não tem como verificar todos não ?

 

é a saida de cada campo ainda continua sendo

 

INSERT INTO `table` ( `id`, `conta` ) VALUES (NULL, 'f')

 

ele so pega o valor do primeiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

você alterou alguma coisa no script?

 

rodei FF, Chrome e IE6 ! funcionou perfeito aqui. (win xp)

 

 

correção:

1. jogar focus() no input criado

2. não criar inputs se o último não tiver preenchido

$(document).ready(function(){
var i = 1;
$('#campos input').live('blur', function(){		
	if( $('#campos input:last').val()!='' )
	{
		if( i<10 )//limitar em 10 campos
		{
			i++
			$('#campos').append( '<label>Conta '+i+':<input type="text" name="conta[]" value="" id="'+i+'" /></label>' )
				.find('input:last').focus();
		}
	}
});
});

 

3: melhorar if, estava redundante :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara.. aqui não:

INSERT INTO `table` ( `id`, `conta` ) VALUES (NULL, '123'), (NULL, '123'), (NULL, '123'), (NULL, '123'), (NULL, '123')

faz um

var_dump( $_POST );

ai, você alterou algo no php ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

INSERT INTO `table` ( `id`, `conta` ) VALUES (NULL, '10')array(2) { ["conta"]=> array(1) { [0]=> string(2) "10" } ["ok"]=> string(2) "ok" }

 

o input de submit que eu acho que ta dando pal , não tem como identificar os campos de text sem ser aberto a todos não ? todos que estão dentro do div , porque não vai entrar so conta ali ..vai entrar varios outros ^_^

 

Não Alterei Nada No Php :D

 

e o form ta assim

 

 		<div id="campos">
                       <form method="post" action="">

                       <label>Conta 1:<input type="text" name="conta[]" /></label>
                </div>

               <label><input type="submit" name="ok" value="ok" /></label>

				</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o input de submit que eu acho que ta dando pal , não tem como identificar os campos de text sem ser aberto a todos não ? todos que estão dentro do div , porque não vai entrar so conta ali ..vai entrar varios outros ^_^

não está 'aberto a todos'.

Já está identificando apenas os que estão dentro do fieldset:

$('#campos input')

... só os inputs que estiverem dentro do fieldset#campos

 

é seletor css cara.. se quiser especificar mais.. é só fazer.

testei ie6, ff e chrome.. não sei onde tá o teu erro.

Coloca online ai pra eu ver.

 

ps: deixe o teu html igual o meu, o seu está incorreto, e semanticamente errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta feito

 

http://www.mbiosinformatica.com.br/teste/

 

o Script todo está assim

 

<?php

       if( $_SERVER['REQUEST_METHOD']=='POST' )
       {
               $values = Array();
               foreach( $_POST["conta"] as $conta )
               {
                               $values[] = "(NULL, '{$conta}')";
               }
               $sql = "INSERT INTO `table` ( `id`, `conta` ) VALUES ".implode( ', ', $values );
               echo $sql;   
				 var_dump($_POST);
       }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
<head>
  <title></title>
  <link type="text/css" rel="stylesheet" href="css/style_sheet.css"/>
  <script type="text/javascript" language="javascript" src="./jscript/jquery-1.5.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
       var i = 1;
       $('#campos input').live('blur', function(){             
               if( $( this ).val()!='' && $('#campos input:last').val()!='' )
               {
                       if( i<10 )
                       {
                               i++
                               $('#campos').append( '<label>Conta '+i+':<input type="text" name="conta[]" value="" id="'+i+'" /></label>' )
                                       .find('input:last').focus();
                       }
               }


		});

});
</script>
</head>
     <body>
    <hr>
	  		<div id="campos">
                       <form method="post" action="">

                       <label>Conta 1:<input type="text" name="conta[]" /></label>
                </div>

               <label><input type="submit" name="ok" value="ok" /></label>

				</form>

			<hr>
  </body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

teu problema é HTML amigo.

não altere o meu html! o teu está incorreto! isso que tá atrapalhando o script!!

arranca essa DIV dai! e você deve dar atenção a ordem de fechamentooo!!!!

 

olha a imagem, vê se você entende:

11474446.png

 

por causa do teu html incorreto, os campos estão sendo criados fora do form, por isso eles não são enviados!

volte pro html que postei ¬¬ e estude HTML, pela mor de deus.

Compartilhar este post


Link para o post
Compartilhar em outros sites

botei o html igual ao teu e ta funcionando , o <form> tinha que ser antes do fieldset ou no caso div não dentro dele ehehhehe

 

so mais uma coisa

tem como dar um event.which ou keycode pra quando apertar enter criar o proximo campo .. ??

^_^ :(

 

creio que seje algo +/- assim , mais queria implementar no script :(

 

	   $("body").keyup(function(event){
	     var event = event.which ? event.keyCode : event.which;
		 if(event == 13){
		   event = 9; 
		 } 

     });

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem como dar um event.which ou keycode pra quando apertar enter criar o proximo campo .. ??

não precisa se preocupar com essa diferença entre browsers, o retorno do jQuery já é crossbrowser.

 

sinceramente, eu acho que isso só prejudica a navegação.

você vai precisar de 2 coisas

-> desabilitar o ENTER como submit do form

-> fazer no ENTER buscar o next input, apartir daquele que está com focus()

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.