Ir para conteúdo

POWERED BY:

Arquivado

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

Célio-Ctba

Resgatar valores do form com WHILE

Recommended Posts

Fala galera!!!!Na forma normal, resgatamos os valores e inserimos no banco$campo1 = $_POST['campo1'];$campo2 = $_POST['campo2'];$campo3 = $_POST['campo3'];INSERT into tabela (campo1,campo2,campo3) VALUES ('$campo1','$campo2','$campo3')Sei que tem como resgatar os valores do form usando WHILE assimwhile(list($val) = each($_POST)) {o problema é, o comando SQL entende alguma forma de inserir + ou - assim:INSERT into tabela(campo1,campo2,campo3)VALUES('.$val.');somente para diminuir a digitação, pois se acaso tiver uma tabela com 40 campos, terei que digitar os 40 nome de campo da tabela e os 40 nomes de variáveis que resgatam do formulário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não você pode digitar apenas 40 nomes das variaveis desde que estejam digitados na sequência da sua tabela, na ordem exata das colunas.Agora mas que tabela eh essa de 40 colunas ? isso ta cheirando preguiça heheheaté mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não você pode digitar apenas 40 nomes das variaveis desde que estejam digitados na sequência da sua tabela, na ordem exata das colunas.Agora mas que tabela eh essa de 40 colunas ? isso ta cheirando preguiça heheheaté mais.

RS... E quem dera fossem só 40 campos na tabela, é um pedido de urgencia de um cliente q já soltou uma pesquisa, sem banco, como ele diz q não dá tempo de reformular nada, ele quer assim só p colher esses dados.Lá vou eu correndo resgatar toso os campos rs...xxx = $_POST['xxx'];..........Vlw!!! Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

para economizar codigo use isso

 

foreach ($_POST as $campo => $valor) { $$campo = $valor; }

 

ele ja cria as variaveis com o mesmo nome dos campos

 

e se você montar um sql na ordem dentro do loop da pra executar o select

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duas questões em cima do FOREACHQuando faço a busca no form e peço um echo na tela ele só me traz o último campo, porque?foreach ($_POST as $campo => $valor) { $$campo = $valor;}echo "Variável:".$campo."Valor:"$valor;submit enviarComo faço pra colocar este resultado no VALUE do INSERT?INSERT into tabela (campo1,campo2,campo3) VALUES ( )?

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque você ta dando o echo fora do loop

faz assim:

 

foreach ($_POST as $campo => $valor) { $$campo = $valor;
echo "Variável: $campo Valor: $valor<br />";
}

 

dentro do loop colete os valores e monte o sql

 

faz +- assim

 

$sql = "INSERT into tabela VALUES ('', ";
foreach ($_POST as $campo => $valor) { $$campo = $valor;
if(strtolower($campo) != "submit")
{
	$sql .= "'$valor', ";
}	
}
$sql = rtrim($sql, ", ").")";

echo $sql;

 

nao precisa passar os nome de campos antes do value se você for ter que salvar tudo, mas dai precisa passar todos os campos no meu exemplo na primeira linha do $sql você vai ver que eu passei o id '', assim funciona normal se seu sql tiver algum campo diferente só você mudar mas deu pra você pegar a ideia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, por favor me de uma luz nesse seu cód, me perdi ali:

 

o foreach é dentro do INSERT?

$sql = "INSERT into tabela VALUES ('', ";foreach ($_POST as $campo => $valor) { $$campo = $valor;

Nessa linha tb pirei:

$cadastra = rtrim($cadastra, ", "). ")";
O que são esses espaços vazios?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o foreach é dentro do INSERT?

 

você nao entendeu o $sql é iniciado fora do loop

e dentro ele é colhido o conteudo das $valor

 

rtrim elimina espaços do lado final e direito de uma string ltrim do lado esquerdo, se passar um caracter por parametro ele elimina o caracter final ou inicial ltrim l = left(esquerda), r = rigtht(direita)

 

entre no manual do php para saber mais detalhes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, eu faria diferente....

$fields = $fields_val = array();foreach($_POST as $key => $value) {	$fields[] = $key;	$fields_val[] = $value; // Se quiser, pode tratar a string aki}$sql = "INSERT INTO (". join(',', $fields) .") VALUES ('". join("', '", $fields_val) ."')";...
t+
Bem eu usaria "implode" ao invés de "join"
$sql = "INSERT INTO (` . implode("`,`", array_keys($_POST)) . "`) VALUES ('". implode("','", $_POST) ."')";

Compartilhar este post


Link para o post
Compartilhar em outros sites

vcs estao esquecendo de passar o nome da tabela

 

e tbm tao salvando o campo "submit" ja que ele tbm é resgatado pelo POST

 

e nao tem diferente entre join() e implod()e, a unica diferença é que join() aceita REGEX expressoes regulares

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom gente, ainda deve ter algum problema, creio que deva ser sintaxe pois ao tentar enviar continua mostrando a mensagem: Column count doesn't match value count at row 1Se não me engano ele não está enxergando os valores do VALUES, isso né?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, o submit continua pegando, isso não sei como tirar, veja como está:

$sql = mysql_query("INSERT INTO `$tabela` ('". join(',', $fields) ."') VALUES ('". join("', '", $fields_val) ."')");
Já no erro ele trouxe alguns campos está assim:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''nome,empresa,email,motomoney,just_motomoney,treina_exclus,just

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu IF para verificar o submit, está dentro do foreach, e no seu caso a instrução SQL já está iniciada.

 

No meu caso a instrução SQL vem depois que o foreach foi fechado

$fields = $fields_val = array();		foreach($_POST as $key => $value) {		if(strtolower($key) != "submit") {		$sql .= "'$valor', ";		}		$fields[] = $key;		$fields_val[] = $value;		//echo $value."<br />";		}		$sql = mysql_query("INSERT INTO `$tabela` ('". join(',', $fields) ."') VALUES ('". join(',', $fields_val) ."')");		  if (!$sql) {		  die('esta query esta com erro: ' . mysql_error());		}
Assim onde colocaria a verificação?

 

 

Eu criei um campo submit(varchar) no banco pra testar, se era somente este erro, a mensagem continua a mesma.

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.