Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
Tenho um formulário que gera campos do tipo "text", e esses, por sua vez, devem ir para o Banco de dados... mas como? Já fiz mil e uma peripécias e não consigo de jeito nenhum.
Abaixo, segue o script que gera os campos (formulário), e depois o arquivo do POST.
<script>
var num = 1;//inicializo a variavel com a quantidade de itens na tela
function AdicionaLinha()
{
num++;//ao clicar no botão um item novo é adicionado, logo a variavel deve ser adicionada
$("#tabelaItem").append(
$(document.createElement("tr")).append(
$(document.createElement("td")).attr({
"width": "40",
"height": "34",
"class": "subHeader"
}).append(
$(document.createElement("div")).attr("align","center").append("Item:")
),
$(document.createElement("td")).attr({
"width": "159",
"class": "subHeader"
}).append(
$(document.createElement("select")).attr({
"id": "item",
"name": "item"+num//incluido o número da variavel para ter name diferentes
}).append(
$(document.createElement("option")).attr("value","alimentacao").append("Alimentação"),
$(document.createElement("option")).attr("value","combustivel").append("Combustível"),
$(document.createElement("option")).attr("value","materiald").append("Material Degustativo"),
$(document.createElement("option")).attr("value","materiale").append("Material de Escritório"),
$(document.createElement("option")).attr("value","pedagio").append("Pedágio"),
$(document.createElement("option")).attr("value","copia").append("Cópia"),
$(document.createElement("option")).attr("value","outros").append("Outros")
)
),
$(document.createElement("td")).attr({
"width": "75",
"class": "subHeader"
}).append(
$(document.createElement("div")).attr("align","center").append("Data:")
),
$(document.createElement("td")).attr({
"width": "72",
"class": "subHeader"
}).append(
$(document.createElement("input")).attr({
"size": "12",
"name": "dataItem" + num,//em todo lugar que se cria name colocar o num para ter names diferentes
"id": "data2"
})
),
$(document.createElement("td")).attr({
"width": "61",
"class": "subHeader"
}).append(
$(document.createElement("div")).attr("align","center").append("Valor:")
),
$(document.createElement("td")).attr({
"width": "72",
"class": "subHeader"
}).append(
$(document.createElement("input")).attr({
"size": "12",
"name": "valor" + num,//idem
"id": "valor"
})
),
$(document.createElement("td")).attr({
"width": "63",
"class": "subHeader"
}).append(
$(document.createElement("div")).attr("align","center").append("NF:")
),
$(document.createElement("td")).attr({
"width": "72",
"class": "subHeader"
}).append(
$(document.createElement("input")).attr({
"size": "12",
"name": "nf" + num,//idem
"id": "nf"
})
)
)
);
}
$("#inv").val(num);//incluo a quantidade de itens para o envio de post, o input hidden tem que ter um name unico para você recuperar no POST
</script>
<?php
if ($valida){
$data = getdate();
$dataini = '$data[mday]'.'-'.'$data[mon]'.'-'.'$data[year]';/**/
$representante = $_POST['$nome'];/**/
$cidade = $_POST['cidade'];/**/
$estado = $_POST['estado'];/**/
$campanha = $_POST['campanha'];/**/
$periodo = datasql( $_POST['periodo']);
$periodo2 = datasql( $_POST['periodo2']);/**/
$n = $_POST['inv'];/**/
for($i=1 ; $i<=$n ; $i++){
$item = $_POST['item'+$i];/**/
$data2 = datasql( $_POST['dataItem'+$i]);/**/
$valor = ponto( $_POST['valor'+$i]);/**/
$nf = $_POST['nf'+$i];/**/
$sql2 = "INSERT INTO itens(item,data2,valor,nf)VALUES('$item','$data2','$valor','$nf')";
$insere2 = @mysql_query($sql2);
if ($n>20){
echo "Limite de 20 itens ultrapassado.";
echo "<a href='menu_rev.php'>Voltar</a>";
}
}
$sql1 = "INSERT INTO historico(data,representante,cidade,estado,campanha,periodo,periodo2)VALUES(NOW(),'$nome','$cidade','$estado','$campanha','$periodo','$periodo2')";
$insere = @mysql_query($sql1);
if ($insere && $insere2){
echo "Produto cadastrado com sucesso! Redirecionando...<META HTTP-EQUIV='Refresh' CONTENT='1 ; URL=menu_rev.php'>";
}
else{
echo mysql_error ();
}
}
@mysql_close($conexao);
?>apareceu isso:
array(11) { ["periodo"]=> string(10) "01/01/2010" ["periodo2"]=> string(10) "24/11/2010" ["campanha"]=> string(11) "linha anual" ["estado"]=> string(4) "Acre" ["cidade"]=> string(2) "oi" ["item1"]=> string(22) "Material de Escritório" ["dataItem1"]=> string(10) "29/02/2010" ["valor1"]=> string(6) "132,05" ["nf1"]=> string(5) "21321" ["inv"]=> string(2) "20" ["enviar"]=> string(6) "Enviar" }
Legal os dados estão indo de forma correta.
o problema agora provavelmente é no seu SQL.
retirou os "@" e executou?
apareceu algum erro?
retirei, não aconteceu nada!!!
Coloca esse código no lugar do seu e me fala o que aparece..
<?php
if ($valida){
$data = getdate();
$dataini = $data['mday'].'-'.$data['mon'].'-'.$data['year'];/**/
$representante = $_POST['nome'];/**/
$cidade = $_POST['cidade'];/**/
$estado = $_POST['estado'];/**/
$campanha = $_POST['campanha'];/**/
$periodo = datasql( $_POST['periodo']);
$periodo2 = datasql( $_POST['periodo2']);/**/
$n = $_POST['inv'];/**/
for($i=1 ; $i<=$n ; $i++){
$item = $_POST['item'+$i];/**/
$data2 = datasql( $_POST['dataItem'+$i]);/**/
$valor = ponto( $_POST['valor'+$i]);/**/
$nf = $_POST['nf'+$i];/**/
$sql2 = "INSERT INTO itens(item,data2,valor,nf)VALUES('$item','$data2','$valor','$nf')";
echo $sql2;
die;
$insere2 = @mysql_query($sql2);
if ($n>20){
echo "Limite de 20 itens ultrapassado.";
echo "<a href='menu_rev.php'>Voltar</a>";
}
}
$sql1 = "INSERT INTO historico(data,representante,cidade,estado,campanha,periodo,periodo2)VALUES(NOW(),'$nome','$cidade','$estado','$campanha','$periodo','$periodo2')";
$insere = @mysql_query($sql1);
if ($insere && $insere2){
echo "Produto cadastrado com sucesso! Redirecionando...<META HTTP-EQUIV='Refresh' CONTENT='1 ; URL=menu_rev.php'>";
}
else{
echo mysql_error ();
}
}
@mysql_close($conexao);
?>
Estava vendo estava parte do seu código...
<?php
if ($valida){
$data = getdate();
$dataini = $data['mday'].'-'.$data['mon'].'-'.$data['year'];/**/
$representante = $_POST['nome'];/**/
$cidade = $_POST['cidade'];/**/
$estado = $_POST['estado'];/**/
$campanha = $_POST['campanha'];/**/
$periodo = datasql( $_POST['periodo']);
$periodo2 = datasql( $_POST['periodo2']);/**/
$n = $_POST['inv'];/**/
for($i=1 ; $i<=$n ; $i++){
$item = $_POST['item'+$i];/**/
$data2 = datasql( $_POST['dataItem'+$i]);/**/
$valor = ponto( $_POST['valor'+$i]);/**/
$nf = $_POST['nf'+$i];/**/
$sql2 = "INSERT INTO itens(item,data2,valor,nf)VALUES('$item','$data2','$valor','$nf')";
$insere2 = @mysql_query($sql2);
if ($n>20){
echo "Limite de 20 itens ultrapassado.";
echo "<a href='menu_rev.php'>Voltar</a>";
}
}
$sql1 = "INSERT INTO historico(data,representante,cidade,estado,campanha,periodo,periodo2)VALUES(NOW(),'$nome','$cidade','$estado','$campanha','$periodo','$periodo2')";
$insere = @mysql_query($sql1);
if ($insere && $insere2){
echo "Produto cadastrado com sucesso! Redirecionando...<META HTTP-EQUIV='Refresh' CONTENT='1 ; URL=menu_rev.php'>";
}
else{
echo mysql_error ();
}
}
@mysql_close($conexao);
?>
Ele vai rodar esta parte sempre 20x e os dados estão indo vazios.. se tiver algum campo NOT NULL vai dar problema..
valida melhor essa parte.
Qualquer coisa cola os 2 arquivos inteiros que fica melhor..
agora apareceu:
INSERT INTO itens(item,data2,valor,nf)VALUES('','','','')
Verifica se no banco existem registros salvos..
E se os campos estão vazios..!
Então, aí que tá:
tenho 2 tabelas alimentadas: a tabela antes do for recebe os dados perfeitamente, já a tabela que está dentro do for não recebe absolutamente nada!
Seguinte a tabela "historico" tem algum registro?
Sim, a tabela histórico recebe todos os itens corretamente
Coloca esse código para testar!
<?php
if ($valida) {
$data = getdate();
$dataini = $data['mday'] . '-' . $data['mon'] . '-' . $data['year']; /**/
$representante = $_POST['nome']; /**/
$cidade = $_POST['cidade']; /**/
$estado = $_POST['estado']; /**/
$campanha = $_POST['campanha']; /**/
$periodo = datasql($_POST['periodo']);
$periodo2 = datasql($_POST['periodo2']); /**/
$n = $_POST['inv']; /**/
for ($i = 1; $i <= $n; $i++) {
$item = $_POST['item' + $i]; /**/
$data2 = datasql($_POST['dataItem' + $i]); /**/
$valor = ponto($_POST['valor' + $i]); /**/
$nf = $_POST['nf' + $i]; /**/
echo $item . ' - ' . $_POST['item1'] . '<br />';
echo $data2 . ' - ' . $_POST['dataItem1'] . '<br />';
echo $valor . ' - ' . $_POST['valor1'] . '<br />';
echo $nf . ' - ' . $_POST['nf1'] . '<br />';
die;
$sql2 = "INSERT INTO itens(item,data2,valor,nf)VALUES('$item','$data2','$valor','$nf')";
$insere2 = @mysql_query($sql2);
if ($n > 20) {
echo "Limite de 20 itens ultrapassado.";
echo "<a href='menu_rev.php'>Voltar</a>";
}
}
$sql1 = "INSERT INTO historico(data,representante,cidade,estado,campanha,periodo,periodo2)VALUES(NOW(),'$nome','$cidade','$estado','$campanha','$periodo','$periodo2')";
$insere = @mysql_query($sql1);
if ($insere && $insere2) {
echo "Produto cadastrado com sucesso! Redirecionando...<META HTTP-EQUIV='Refresh' CONTENT='1 ; URL=menu_rev.php'>";
} else {
echo mysql_error ();
}
}
@mysql_close($conexao);
?>Opaaaa
sinal de vida!
os dados que coloquei no formulário apareceram na tela seguinte!
Ahn coloca ai como eles aparecem para eu ver!
Cara.. faz um teste ai
Altera essa parte do seu código..
$item = $_POST["item{$i}"]; /**/
$data2 = datasql($_POST["dataItem{$i}"]); /**/
$valor = ponto($_POST["valor{$i}"]); /**/
$nf = $_POST["nf{$i}"]; /**/Nossa, agora me perdi de vez!
Onde está isso?
Nessa parte!!!
for ($i = 1; $i <= $n; $i++) {
$item = $_POST['item' + $i]; /**/
$data2 = datasql($_POST['dataItem' + $i]); /**/
$valor = ponto($_POST['valor' + $i]); /**/
$nf = $_POST['nf' + $i]; /**/
echo $item . ' - ' . $_POST['item1'] . '<br />';
echo $data2 . ' - ' . $_POST['dataItem1'] . '<br />';
echo $valor . ' - ' . $_POST['valor1'] . '<br />';
echo $nf . ' - ' . $_POST['nf1'] . '<br />';
die;
$sql2 = "INSERT INTO itens(item,data2,valor,nf)VALUES('$item','$data2','$valor','$nf')";
$insere2 = @mysql_query($sql2);
if ($n > 20) {
echo "Limite de 20 itens ultrapassado.";
echo "<a href='menu_rev.php'>Voltar</a>";
}
}está dando erro!!!
Parse error: syntax error, unexpected '[' in /var/www/extranet/lista_dados.php on line 44
estou procurando o que falta...
Linha 44:
[color=1C2837][font=arial, verdana, tahoma, sans-serif][size=2][color=000088]for[/color][color=000000] [/color]color=666600[/color][color=000000] [/color][color=666600]{[/color][color=000000]
Ixii seu código fico bixado..
rsrsr
na verdade, foi por isso que eu não sabia onde colocar! você me passou o código assim...
já voltei ele como era antes...
mas to nesse impasse!
:(
Cola o seu arquivo inteiro.. que faz as inserções para eu dar uma olhada..
Ok, antes disso, olha só:
Tirei a Primary Key de um item da tabela e agora quando envio os dados do formulário, aparece a mensagem "Produto cadastrado com sucesso...". Porém, a tabela é alimentada com 00000.
Segue código:
<?php
include "conecta_mysql.inc.php";
echo "<link href='style.css' rel='stylesheet' type='text/css' media='screen' />";
include "valida.php";
// Formata data aaaa-mm-dd para dd/mm/aaaa
function databr($datasql) {
if (!empty($datasql)){
$p_dt = explode('-',$datasql);
$data_br = $p_dt[2].'/'.$p_dt[1].'/'.$p_dt[0];
return print $data_br;
}
}
// Formata data dd/mm/aaaa para aaaa-mm-dd
function datasql($databr) {
if (!empty($databr)){
$p_dt = explode('/',$databr);
$data_sql = $p_dt[2].'-'.$p_dt[1].'-'.$p_dt[0];
return $data_sql;
}
}
// Formata item com . por ,
function ponto($virgula) {
if (!empty($virgula)){
$p_vp = explode(',',$virgula);
$ponto = $p_vp[0].'.'.$p_vp[1];
return $ponto;
}
}
if ($valida){
$data = getdate();
$dataini = '$data[mday]'.'-'.'$data[mon]'.'-'.'$data[year]';/**/
$representante = $_POST['$nome'];/**/
$cidade = $_POST['cidade'];/**/
$estado = $_POST['estado'];/**/
$campanha = $_POST['campanha'];/**/
$periodo = datasql( $_POST['periodo']);
$periodo2 = datasql( $_POST['periodo2']);/**/
$n = $_POST['inv'];/**/
for($i=1 ; $i<=$n ; $i++){
$item = $_POST['item'+$i];/**/
$data2 = datasql( $_POST['dataItem'+$i]);/**/
$valor = ponto( $_POST['valor'+$i]);/**/
$nf = $_POST['nf'+$i];/**/
$sql2 = "INSERT INTO itens(item,data2,valor,nf)VALUES('$item','$data2','$valor','$nf')";
$insere2 = @mysql_query($sql2);
if ($n>20){
echo "Limite de 20 itens ultrapassado.";
echo "<a href='menu_rev.php'>Voltar</a>";
}
}
$sql1 = "INSERT INTO historico(data,representante,cidade,estado,campanha,periodo,periodo2)VALUES(NOW(),'$nome','$cidade','$estado','$campanha','$periodo','$periodo2')";
$insere = @mysql_query($sql1);
if ($insere && $insere2){
echo "Produto cadastrado com sucesso! Redirecionando...<META HTTP-EQUIV='Refresh' CONTENT='1 ; URL=menu_rev.php'>";
}
else{
echo mysql_error ();
}
}
@mysql_close($conexao);
?>Tipo.. como você não está passando a PK na inserção, vefifica se a PK está com auto_increment ativo caso contrário não vai funcionar.
Valida também na hora de inserir se os registros estão vindo do POST.. ele está rodando 20x.. e se você for cadastrar 1, ele vai um certinho e 19 tudo vazio.. ve isso também cara.
for($i=1 ; $i<=$n ; $i++){
$item = $_POST['item'+$i];/**/
$data2 = datasql( $_POST['dataItem'+$i]);/**/
$valor = ponto( $_POST['valor'+$i]);/**/
$nf = $_POST['nf'+$i];/**/
$sql2 = "INSERT INTO itens(item,data2,valor,nf)VALUES('$item','$data2','$valor','$nf')";
$insere2 = @mysql_query($sql2);
if ($n>20){
echo "Limite de 20 itens ultrapassado.";
echo "<a href='menu_rev.php'>Voltar</a>";
}
}Bom dia.
Tirei o auto_increment junto com a PK... os dados chegam zerados!
tirei aquele if, mas mesmo assim, estou na mesma...
if ($valida){
$data = getdate();
$dataini = '$data[mday]'.'-'.'$data[mon]'.'-'.'$data[year]';/**/
$representante = $_POST['$nome'];/**/
$cidade = $_POST['cidade'];/**/
$estado = $_POST['estado'];/**/
$campanha = $_POST['campanha'];/**/
$periodo = datasql( $_POST['periodo']);
$periodo2 = datasql( $_POST['periodo2']);/**/
$n = $_POST['inv'];/**/
$sql1 = "INSERT INTO historico(data,representante,cidade,estado,campanha,periodo,periodo2)VALUES(NOW(),'$nome','$cidade','$estado','$campanha','$periodo','$periodo2')";
$insere = @mysql_query($sql1);
$max = "SELECT MAX(cod) FROM historico";
$x = @mysql_query($max);
for($i=1 ; $i<=$n ; $i++){
$item = $_POST['item'+$i];/**/
$data2 = datasql( $_POST['dataItem'+$i]);/**/
$valor = ponto( $_POST['valor'+$i]);/**/
$nf = $_POST['nf'+$i];/**/
$sql2 = "INSERT INTO itens(codhist,item,data2,valor,nf)VALUES('$x','$item','$data2','$valor','$nf')";
$insere2 = @mysql_query($sql2);
}
if ($insere && $insere2){
echo "Produto cadastrado com sucesso! Redirecionando...<META HTTP-EQUIV='Refresh' CONTENT='1 ; URL=menu_rev.php'>";
}
else{
echo mysql_error ();
}
}
@mysql_close($conexao);cara, o concatenador do php, é o ponto (.)
troque:
$item = $_POST['item'+$i];/**/por:
$item = $_POST['item'.$i];/**/
ainda assim, não gosto desse tipo de abordagem.
Prefira trabalhar com arrays.
Olá..
Os dados pelo menos passam para o outro lado?
executa um:
E me fala o que apareceu!
Outra coisa!!
nas inserções "@mysql_query"
Retira o "@" para aparecerem os erros!