Logo Hardware.com.br
jjones
jjones Novo Membro Registrado
16 Mensagens 1 Curtida

como alterar uns dados no site em relação a uma tabela A a pareça as modificações tabela B?

#1 Por jjones 17/01/2017 - 10:35
Bom dia a todos,

não sei como fazer um registro de histórico de movimentação tipo: PI | Local anterior e local atual | Status anterior e atual | usuário que fez as alterações (logado) | data da movimentação


mas não tenho ideia de como deve ser o script, um exemplo, tenho uma tabela "A" toda alteração que for feita nessa tabela por meio de uma janela web, possa ser registrado em uma outra tabela "B" no banco porém isso é só para registro, no banco e não para ficar no site. não tenho ideia, de como fazer, nem que script usar.
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
17/01/2017 - 15:52
Acho que você deseja é "salvar histórico".

Ele é realizado pela mesma rotina que persiste as alterações na tabela A, tão logo receba a confirmação de sucesso. Afinal, é nesse momento que todas as informações estarão presentes e à mão.
Simplesmente salve na tabela B aquelas que vai precisar.
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
jjones
jjones Novo Membro Registrado
16 Mensagens 1 Curtida
#3 Por jjones
23/01/2017 - 09:25
esquiloesperto disse:
Acho que você deseja é "salvar histórico".

Ele é realizado pela mesma rotina que persiste as alterações na tabela A, tão logo receba a confirmação de sucesso. Afinal, é nesse momento que todas as informações estarão presentes e à mão.
Simplesmente salve na tabela B aquelas que vai precisar.


Bom dia, fiz assim e segue o raciocinio que pretendo fazer.
tenho duas tabelas uma chama por exemplo cadastro com campos pi, localizacao, status e outros campos e outra tabela chamada de movimentacao tem campos pi| local-anterior|local-atual|status-Anterior-status-atual campos que a tabela cadastro nao tem, quero que ao eu fazer mudanca no campo pi, local e status (ATIVO/INATIVO) possa aparecer as mudanças feitas na tabela movimentação no campo PI, LOCAL-ANTERIOR e LOCAL-ATUAL, que possa passar o que estava antes e o que ficou, STATUS-ANTERIOR e STATUS-ATUAL da mesma forma.

Segue parte dio caodigo que faz atualização sem modificao ainda


[CODE=PHP]

$middle_query=$table.' SET '.implode(', ',$vars);

// new record case
$query='INSERT INTO '.$middle_query;
$action='Inserção';
// update case:
if(isset($PARAMS[0])){
$id=intval($PARAMS[0]);
$query="UPDATE $middle_query WHERE nota_fiscal={$id}";
$action='Atualização';
}
// running query (update or insert)
$sqli->query($query);
if($sqli->error){
$msg[]='

Falha durante a '.$action.'!
'.$sqli->error.'

';
}else{
$msg[]='

'.$action.' realizada com sucesso!

';
header("Location:moderad.php");
}

}

// em caso de edição:
if(isset($PARAMS[0])){
$id=intval($PARAMS[0]);
// busca os dados a serem editados
$result=$sqli->query("SELECT * FROM $table WHERE nota_fiscal=$id LIMIT 1");
// checa se houve erro:
if($sqli->error){
$msg[]='

Falha ao localizar registro!
'.$sqli->error.'

';
}elseif($result->num_rows){// se algum registro foi encontrado:
$fdata=$result->fetch_assoc();// carrega os dados
$form=[
'status'=>'Editar',
'submit'=>'Atualizar',
];
}else{// se nenhum registro for encontrado, define mensagem de erro:
$msg[]='

Registro não encontrado na base de dados!

';
}
}

ai coloquei esse codigo mas nao sei se esta certo ou esta no lugar errado

//acrecimo codigos abaixo

$host="localhost";
$user="root";
$pass="";
$conexao=mysqli_connect($host,$user,$pass);

mysqli_autocommit($conexao,false);
mysqli_report(MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT);
$pi='pi';
$insert1=false;
$insert2=false;

try{
$stmt=mysqli_prepare($conexao,"INSERT INTO cadastro values (?)");
mysqli_stmt_bind_param($stmt,'s',$pi);
$insert1=mysqli_stmt_execute($stmt);

$stmt=mysqli_prepare($conexao,"INSERT INTO movimentação (nome) values (?)");
mysqli_stmt_bind_param($stmt,'s',$pi);
$insert2=mysqli_stmt_execute($stmt);
}catch (mysqli_sql_exception $e){
echo'SQLState: '.$e->getCode().'
Descrição: '.$e->getMessage();
}

if($insert1&&$insert2){
mysqli_commit($conexao);
echo'sucesso';
}

[/CODE]
jjones
jjones Novo Membro Registrado
16 Mensagens 1 Curtida
#4 Por jjones
26/01/2017 - 12:46
[CODE=PHP]

tentei de outra forma mas só umas das tabelas sao prencidas e preciso seja todos preenchidos e que irão para uma tabela A mas para tabela não quero que vai tudo como como na Tabela A, segue parte do código preciso muito terminar isso mas não estou conseguindo.


// definição geral de variáveis:
$table = 'cadastro';
$form = [
'status' => 'Cadastrar',
'submit' => 'Salvar',
'consultar' =>'Consultar',
];
# campos do formulário
$fdata = [
'descricao' => isset($_POST['descricao']) ? $_POST['descricao'] : null,
'pi' => isset($_POST['pi']) ? $_POST['pi'] : null,
'loc_anterior' => isset($_POST['loc_anterior']) ? $_POST['loc_anterior'] : null,
'localizacao' => isset($_POST['localizacao']) ? $_POST['localizacao'] : null,
'complemento' => isset($_POST['complemento']) ? $_POST['complemento'] : null,
'nota_fiscal' => isset($_POST['nota_fiscal']) ? $_POST['nota_fiscal'] : null,
'fornecedor' => isset($_POST['fornecedor']) ? $_POST['fornecedor'] : null,
'recurso' => isset($_POST['recurso']) ? $_POST['recurso'] : null,
'docente' => isset($_POST['docente']) ? $_POST['docente'] : null,
'valor_total' => isset($_POST['valor_total']) ? $_POST['valor_total'] : null,
'status_anterior' => isset($_POST['status_anterior']) ? $_POST['status_anterior'] : null,
'status' => isset($_POST['status']) ? $_POST['status'] : null,
'up_arq' => isset($_POST['up_arq']) ? $_POST['up_arq'] : null,

];



// se algo for postado
if (sizeof($_POST)) {
// trate as variáveis aqui:
// percorre os dados postados
foreach ($_POST as $k => $v) {
// scape special chars
$v = "'" . $sqli->real_escape_string($v) . "'";
// monta um array sanitizado para insert/update
$vars[] = "$k = " . $v;
}

$pi = ($_POST['pi']);
$loc_anterior = ($_POST['loc_anterior']);
$loc_atual = ($_POST['loc_atual']);
$status_anterior = ($_POST['status_anterior']);
$status_atual = ($_POST['status_atual']);

// middle query
$middle_query = $table . ' SET ' . implode(', ', $vars);

// new record case

$query = "INSERT INTO movimentação set pi = '$pi', loc_anterior = '$loc_anterior', loc_atual ='$loc_atual' ,status_anterior ='$status_anterior', status_atual = '$status_atual' "; // aqui vai para tabela Movimentao


$query = 'INSERT INTO ' . $middle_query; // aqui vai para outra tabela mas ele só garva a segunda independente da ordem que eu coloco.

[/CODE]

depois eu mudei o conteudo da variavel $query para esse:

[code=php]
$query = "INSERT INTO cadastro (pi, descricao, complemento, nota_fiscal,fornecedor,recurso,docente,valor_total,up_arq,loc_anterior,loc_atual,status_anterior,status_atual) VALUES('$pi', '$descricao', '$complemento', '$nota_fiscal','$fornecedor','$recurso','$docente','$valor_total','$loc_anterior','$loc_atual','$status_anterior','$status_atual' ); INSERT INTO movimentação (pi,loc_anterior,loc_atual, status_anterior, status_atual) VALUES ('$pi','$loc_anterior','$loc_atual','$status_anterior','$status_atual')";

[/code]
mas da esse erro

Falha durante a Insersao!
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO movimentação (pi,loc_anterior,loc_atual, status_anterior, status_' at line 1
jjones
jjones Novo Membro Registrado
16 Mensagens 1 Curtida
#6 Por jjones
30/01/2017 - 11:26
esquiloesperto disse:
- Parece que você está fazendo uma confusão enorme com o uso correto de variáveis e as aspas em PHP.

Leia o artigo e tire as suas conclusões: https://secure.php.net/manual/pt_BR/language.types.string.php


bom dia, talvez eu esteja, mas como sou novo em programação, e principalmente em php, tenho recorrido ao fórum, pois foi com ajuda de algumas pessoas que fui fazendo algumas mudanças e vi dicas e exemplos que deveria fazer assim que dava certo mas, ao tentar fazer no serve para mim, então continuo perdido.
jjones
jjones Novo Membro Registrado
16 Mensagens 1 Curtida
#8 Por jjones
06/02/2017 - 09:17
bom dia pessoal, resolvi o problema em partes,

criei duas variáveis em que recebiam os inserts.

[CODE=PHP]
$middle_query = $table . ' SET ' . implode(', ', $vars);

// new record case

$query = 'INSERT INTO ' . $middle_query;

$pi = ($_POST['pi']);
$descricao = ($_POST['descricao']);
$loc_anterior = ($_POST['loc_anterior']);
$loc_atual = ($_POST['loc_atual']);
$recurso = ($_POST['recurso']);
$docente = ($_POST['docente']);
$complemento = ($_POST['complemento']);
$nota_fiscal = ($_POST['nota_fiscal']);
$fornecedor = ($_POST['fornecedor']);

$valor_total = (float)$_POST['valor_total'];
$valor_total = number_format($valor_total,2,",","." );

$up_arq = ($_POST['up_arq']);
$status_anterior = ($_POST['status_anterior']);
$status_atual = ($_POST['status_atual']);

$query1 = "INSERT INTO movimentacao set pi = '$pi', loc_anterior = '$loc_anterior', loc_atual ='$loc_atual', status_anterior ='$status_anterior', status_atual = '$status_atual' ";


// update case:
if (isset($PARAMS[0])) {
$id = intval($PARAMS[0]);
//$query = "UPDATE cadastro set pi = '$pi', descricao = '$descricao', complemento ='$complemento' , nota_fiscal = '$nota_fiscal', fornecedor = '$fornecedor', up_arq ='$up_arq', recurso = '$recurso', docente ='$docente' , valor_total = '$valor_total', loc_anterior = '$loc_anterior', loc_atual ='$loc_atual' ,status_anterior ='$status_anterior', status_atual = '$status_atual' WHERE nota_fiscal={$id}";
$query = "UPDATE $middle_query WHERE nota_fiscal={$id}";
$action = 'Atualização';
}

NO PROXIMO CODIGO A BAIXO RESPONSAVEL PELO INSERT QUE A VARIAVEL RECEBEU

$sqli->query($query);
if ($sqli->error) {
$msg[] = '

Falha durante a ' . $action . '!
' . $sqli->error . '

';
} else {
$msg[] = '

' . $action . ' realizada com sucesso!

';
header("Location:moderad.php");
}

//////////////////////////////////////////////////////////////




ENTAO EU REPETI MUDANDO SOMENTE A VARIÁVEL DO SEGUNDO INSERT, MAS O PROBLEMA É QUE AO FAZER O UPDATE, ELE NÃO ALTERA A DA SEGUNDA TABELA ELE FAZ UMA NOVA INSERÇÃO

$sqli->query($query1);
if ($sqli->error) {
$msg[] = '

Falha durante a ' . $action . '!
' . $sqli->error . '

';
} else {
$msg[] = '

' . $action . ' realizada com sucesso!

';
header("Location:moderad.php");
}


// em caso de edição:
if (isset($PARAMS[0])) {
$id = intval($PARAMS[0]);
// busca os dados a serem editados
$result = $sqli->query("SELECT * FROM $table WHERE nota_fiscal=$id LIMIT 1");
// checa se houve erro:
if ($sqli->error) {
$msg[] = '

Falha ao localizar registro!
' . $sqli->error . '

';
} elseif ($result->num_rows) { // se algum registro foi encontrado:
$fdata = $result->fetch_assoc(); // carrega os dados
$form = [
'status' => 'Editar',
'submit' => 'Atualizar',
];
} else { // se nenhum registro for encontrado, define mensagem de erro:
$msg[] = '

Registro não encontrado na base de dados!

';
}
}

[/CODE]
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal