Ir para conteúdo

POWERED BY:

Arquivado

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

crazy4combat

[Resolvido] Usar dados do array no insert

Recommended Posts

Colegas,

Preciso construir uma função flexível que grava dos os dados do $_POST[]. O array $_POST[] possui n valores e quero que eles sejam inseridos no banco de dados com n campo (mesmo no de valores $_POST) automaticamente com mesmo nome. EX: $_POST[nome] grava na coluna nome do bd, $_POST[sexo] na coluna sexo, $_POST[telefone] na coluna telefona

 

Mas se um dia quiser acrescentar um campo quero só criar a coluna e mexer no HTML para criar o input, não sendo necessário alterar o SQL.

 

<?
require("config.php");
$bd_conexao=mysql_pconnect($bd_servidor,$bd_usuario,$bd_senha);
mysql_select_db($bd_nome,$bd_conexao);
$query="SELECT *
FROM cadastro;
$rs=mysql_query($query,$bd_conexao) or die(mysql_error());
$totalRegistros=mysql_num_rows($rs)
for($ponteiro=0; $registro=mysql_fetch_array($rs); $ponteiro++)
{
  echo($registro[nome]);
  if($totalRegistros-1>1)
  {
    echo(, ");
  }
}
$sql=INSERT INTO cadastro ($campos) VALUES ([color="#FF0000"][i][b]valores do vetor $POST ordenados para inserção no bd[/b][/i][/color]);
mysql_query ($sql) VALUES ('$titulo', '$resumo', '$texto','$noticias_add_modo')", $conexion) or die (mysql_error());
?>

 

Como fazer a parte destacado em vermelho?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A string de insert admite a seguinte sintaxe tb:

INSERT INTO `cadastro` VALUES('campo', 'campo2', 'campo3')

Assim você não precisa gerar a primeira parte da string que seria o teu "$campos". Lembrando que você deverá passar tudo na ordem correta da tabela.

 

Mas com um simples foreach, do tipo:

foreach( $_POST as $campo=>$valor )
você consegue fazer oque quer. Pensando aqui, acredito que a validação dos campos vai ser tornar 'pior' com esse tipo de prática..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei rapaz.. de onde veio os '000..' ?

como está o teu formulário??

 

<?php
$sql = 'INSERT INTO `table` (';
foreach( $_POST as $campo=>$valor )
{
	if($campo != 'enviar')//retirar o botão enviar
		$campos .= '`'.$campo.'`, ';
	if($valor != 'enviar')//retirar o valor do botão enviar
		$valores .= '\''.$valor.'\', ';
}
$campos = substr($campos, 0, -2).') VALUES (';//retirar a vírgula e o espaço da última concatenação
$valores = substr($valores, 0, -2).')';
echo $sql, $campos, $valores;
?>

<form action="" method="post">
	<input type="text" name="campo1" value="valor1" />
	<input type="text" name="campo2" value="valor2" />
	<input type="text" name="campo3" value="valor3" />
	<input type="text" name="campo4" value="valor4" />
	<input type="text" name="campo5" value="valor5" />

	<input type="submit" value="enviar" name="enviar" />
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro estou tentando usar sem o dor each sem o looping

 

Como tem 8 zeros a direita se usar

<?
foreach( $_POST as $nome=>$valor )
echo(substr($valor, 0, -8));
?>

o output saí vazio. Tentei:

<?
foreach( $_POST as $nome=>$valor )
echo(substr($valor, 0, -1));
?>

saí betan

 

Qual a lógica? parece que o 00000000 não faz parte di $valor mas de onde ele sai se não usar substr();?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodou o script que postei ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew William, o meu código final:

<?php
session_start();
function formularioGrava($cadastro,$perguntas)
{
require_once("config.inc.php");
$sql1="INSERT INTO $cadastro(cpf, ";
$bd_conexao=mysql_pconnect($bd_servidor,$bd_usuario,$bd_senha);
mysql_select_db($bd_nome,$bd_conexao);
$query="SELECT *
FROM $perguntas
WHERE ID_FORM='1'";
$rs=mysql_query($query,$bd_conexao) or die(mysql_error());
while($registro=mysql_fetch_array($rs))
{
	$sql2=$sql2.$registro[id].", ";	
}
$sql2=substr($sql2, 0, -2).") ";

$sql3 =  "VALUES('$_SESSION[cpf]', ";
foreach( $_POST as $campo=>$valor )
{
        if($valor != 'enviar')//retirar o valor do botão enviar
                $valores .= '\''.$valor.'\', ';
}
$campos = substr($campos, 0, -2);
$valores = substr($valores, 0, -2);
$sql4=");";
$sql=$sql1.$sql2.$sql3.$campos.$valores.$sql4;

mysql_query($sql,$bd_conexao) or
die ($sql."<br /><br />".mysql_error());
}
formularioGrava("cadastro", "perguntas");
?>

Aparece erro de SQL o output saí

INSERT INTO cadastro(cpf, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48) VALUES('32283150884', 'Betano', 'Bentano', 'Masculino', 'E-Mail', 'Monstro S. A,', '333', 'Administrativo', 'Chefe', 'Financeiro', 'Avenida', 'Rua dos bobos', '0', '0z', 'SP', 'São Paulo', 'Brasil', '999999', '9', '999999', '999999999', 'nospam@nop.spam', 'www.meusite.com');

 

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 '27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, ' at line 1

Por olho a sitaxe das tabelas do insert estão corretas, que m**** eu fiz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que colocar o nome dos campos que são número entre ` . Assim...

 

INSERT INTO cadastro(cpf, `27`, `28`, `29`, `30`, `31`, `32`, `33`, `34`, `35`, `36`, `37`, `38`, `39`, `40`, `41`, `42`, `43`, `44`, `45`, `46`, `47`, `48`) VALUES('32283150884', 'Betano', 'Bentano', 'Masculino', 'E-Mail', 'Monstro S. A,', '333', 'Administrativo', 'Chefe', 'Financeiro', 'Avenida', 'Rua dos bobos', '0', '0z', 'SP', 'São Paulo', 'Brasil', '999999', '9', '999999', '999999999', 'nospam@nop.spam', 'www.meusite.com');

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que colocar o nome dos campos que são número entre ` . Assim...

 

INSERT INTO cadastro(cpf, `27`, `28`, `29`, `30`, `31`, `32`, `33`, `34`, `35`, `36`, `37`, `38`, `39`, `40`, `41`, `42`, `43`, `44`, `45`, `46`, `47`, `48`) VALUES('32283150884', 'Betano', 'Bentano', 'Masculino', 'E-Mail', 'Monstro S. A,', '333', 'Administrativo', 'Chefe', 'Financeiro', 'Avenida', 'Rua dos bobos', '0', '0z', 'SP', 'São Paulo', 'Brasil', '999999', '9', '999999', '999999999', 'nospam@nop.spam', 'www.meusite.com');

 

Carlos Eduardo

 

 

Fiz como você me disse dá o mesmo erro apesar de 27 é proprio nome do campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que não é ' (aspa simples) é ` (acento grave ou crase).

 

Mesmo assim não resolveu?

 

Carlos Eduardo

 

 

Não funfa

INSERT INTO cadastro(cpf, ´27´ , ´28´ , ´29´ , ´30´ , ´31´ , ´32´ , ´33´ , ´34´ , ´35´ , ´36´ , ´37´ , ´38´ , ´39´ , ´40´ , ´41´ , ´42´ , ´43´ , ´44´ , ´45´ , ´46´ , ´47´ , ´48´ ) VALUES('71566790662', 'betano', 'Bentano', 'Masculino', 'E-Mail', 'Monstro S. A,', '333', 'Agropecuario', 'Chefe', 'Financeiro', 'Rua', 'Rua dos bobos', '0', '0z', 'PA', 'São Paulo', 'Brasil', '22222222', '22', '999999', '999999999', 'nospan@no.spam', 'www.meusite.com');

 

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 '�27´ , ´28´ , ´29´ , ´30´ , ´31´ , ´32´ , ´33´ , ´34´ , ´35´ , ' at line 1

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.