Pegar variavel do PDO, manipula-la e gravar num novo registro

Enviada por Edmar Antonio Calaça 
Edmar Antonio Calaça
Pegar variavel do PDO, manipula-la e gravar num novo registro
25 de May de 2018 às 10:54PM
Pessoal,

Como faço para pegar o conteúdo de um campo, por exemplo, "C0001" transforma-lo para "C0002" e gravar num novo registro.
Segue um script que peguei na internet que estou usando como aprendizado.

<?php
require 'conexao.php';

// Recebe o termo de pesquisa se existir
$termo = (isset($_GET['termo'])) ? $_GET['termo'] : '';

// Verifica se o termo de pesquisa está¡ vazio, se estiver executa uma consulta completa
if (empty($termo)):$conexao = conexao::getInstance();
$sql = 'SELECT id, cod_cli, nome, sobrenome_cli, email, celular, status, foto FROM tab_clientes';
$stm = $conexao->prepare($sql);
$stm->execute();
$clientes = $stm->fetchAll(PDO::FETCH_OBJ);
$last_id = $conexao->lastInsertId();
$cod = $stm->execute();
echo $stm->rowCount() . " linhas alteradas";
else:

// Executa uma consulta baseada no termo de pesquisa passado como parâmetro
$conexao = conexao::getInstance();
$sql = 'SELECT id, cod_cli, nome, sobrenome_cli, email, celular, status, foto FROM tab_clientes WHERE nome LIKE :nome OR :codigo LIKE :codigo';
$stm = $conexao->prepare($sql);
$stm->bindValue(':nome', $termo.'%');
$stm->bindValue(':codigo', $termo.'%');
$stm->execute();
$clientes = $stm->fetchAll(PDO::FETCH_OBJ);

endif;

?>
<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<meta charset="utf-8">
<title>Listagem de Clientes</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
<div class='container'>
<fieldset>

<!-- Cabeçalho da Listagem -->
<legend><h1>Cadastro de Clientes</h1></legend>

<!-- Formulário de Pesquisa -->
<form action="" method="get" id='form-contato' class="form-horizontal col-md-10">
<label class="col-md-2 control-label" for="termo">Pesquisar</label>
<div class='col-md-7'>
<input type="text" class="form-control" id="termo" name="termo" placeholder="Infome o Código ou Nome">
</div>
<button type="submit" class="btn btn-primary">Pesquisar</button>
<a href='listclie.php' class="btn btn-primary">Ver Todos</a>
</form>

<!-- Link para página de cadastro -->

<a href='cadclie.php?cod=<?$cod?>' class="btn btn-success">Cadastrar Cliente</a>
<a href='main.html' class="btn btn-success pull-right">Sair</a>
<div class='clearfix'></div>

<?php if(!empty($clientes)):?>

<!-- Tabela de Clientes -->
<table class="table table-striped">
<tr class='active'>
<th>Foto</th>
<th>Cod.</th>
<th>Nome</th>
<th>Sobrenome</th>
<th>E-mail</th>
<th>Celular</th>
<th>Status</th>
<th>Acao</th>
</tr>
<?php foreach($clientes as $cliente):?>
<tr>
<td><img src='fotos/<?=$cliente->foto?>' height='40' width='40'></td>
<td><?=$cliente->cod_cli?></td>
<td><?=$cliente->nome?></td>
<td><?=$cliente->sobrenome_cli?></td>
<td><?=$cliente->email?></td>
<td><?=$cliente->celular?></td>
<td><?=$cliente->status?></td>
<td>
<a href='editclie.php?id=<?=$cliente->id?>' class="btn btn-primary">Editar</a>
<a href='javascript:void(0)' class="btn btn-danger link_exclusao" rel="<?=$cliente->id?>">Excluir</a>
</td>
</tr>
<?php endforeach;?>
</table>

<?php else: ?>

<!-- Mensagem caso não exista clientes ou não encontrado -->
<h3 class="text-center text-primary">Não existem clientes cadastrados!</h3>
<?php endif; ?>
</fieldset>
</div>
<script type="text/javascript" src="js/custom.js"></script>
</body>
</html>
$conexao = conexao::getInstance();
$sqlInsert = "INSERT INTO tab_clientes (cod_cli, nome, sobrenome_cli, email, celular, status, foto)
VALUES (?, ?, ?, ?, ?, ?, ?)";
$stmInsert = $conexao->prepare($sql);
$stmInsert->execute([
'C0002',
'nome aqui',
'sobrenome aqui',
'email aqui',
'nº do celular',
'status aqui',
'foto aqui'
]);

No array, dentro do método execute(array), você coloca as informações que necessita. Se quiser inserir as informações de outro cliente, então:

[
'C0002',
$cliente->nome,
$cliente->sobrenome_cli,
$cliente->email,
$cliente->celular,
$cliente->status,
'foto'
]

atenção: os dados do array no execute() deveram estar na ordem dos campos definidos no INSERT

INSERT ..(cod_cli, nome, sobrenome_cli, email, celular, status, foto)
Correção:

$stmInsert = $conexao->prepare($sqlInsert);
Edmar Antonio Calaça
Re: Pegar variavel do PDO, manipula-la e gravar num novo registro
26 de May de 2018 às 08:39PM
Olá, Trambulhão

Obrigado por ter respondido.
Neste script quero pegar o valor do campo "cod_cli" no select já efetuado referente ao último registro incluído.

Esse campo cujo conteúdo é a letra "C" seguida de um número de 4 caracteres que deve ser incrementado.

Por exemplo, se na busca o último registro for "C0005" então eu acrescento 1 e fica uma variavel assim: $cod="C0006". Aí essa variavel é enviada a outra pagina no link: <a href='cadclie.php?cod=<?$cod?>' class="btn btn-success">Cadastrar Cliente</a>
Será isso?

<?php
function generateCodCliente($oldCodCliente) {
return 'C' . str_pad(ltrim($oldCodCliente, 'C'), 4, "0", STR_PAD_LEFT);
}

require 'conexao.php';

// Recebe o termo de pesquisa se existir
$termo = (isset($_GET['termo'])) ? $_GET['termo'] : '';

// Verifica se o termo de pesquisa está vazio, se estiver executa uma consulta completa
if (empty($termo)):
$conexao = conexao::getInstance();
// id, cod_cli, nome, sobrenome_cli, email, celular, status, foto
$sql = 'SELECT * FROM tab_clientes';
$stm = $conexao->prepare($sql);
$stm->execute();
$clientes = $stm->fetchAll(PDO::FETCH_OBJ);
$last_id = $conexao->lastInsertId();
$cod = $stm->execute();
echo $stm->rowCount() . " linhas alteradas";
else:
// Executa uma consulta baseada no termo de pesquisa passado como parâmetro
$conexao = conexao::getInstance();
// id, cod_cli, nome, sobrenome_cli, email, celular, status, foto
$sql = 'SELECT * FROM tab_clientes WHERE nome LIKE :nome OR :codigo LIKE :codigo';
$stm = $conexao->prepare($sql);
$stm->bindValue(':nome', $termo.'%');
$stm->bindValue(':codigo', $termo.'%');
$stm->execute();
$clientes = $stm->fetchAll(PDO::FETCH_OBJ);
endif;
?>
<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<meta charset="utf-8">
<title>Listagem de Clientes</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
<div class='container'>
<fieldset>

<!-- Cabeçalho da Listagem -->
<legend><h1>Cadastro de Clientes</h1></legend>

<!-- Formulário de Pesquisa -->
<form action="" method="get" id='form-contato' class="form-horizontal col-md-10">
<label class="col-md-2 control-label" for="termo">Pesquisar</label>
<div class='col-md-7'>
<input type="text" class="form-control" id="termo" name="termo" placeholder="Infome o Código ou Nome">
</div>
<button type="submit" class="btn btn-primary">Pesquisar</button>
<a href='listclie.php' class="btn btn-primary">Ver Todos</a>
</form>

<?php
if (!empty($clientes)):

$lastCod = end($clientes);
$newCod = generateCodCliente($lastCod);
?>

<!-- Link para página de cadastro -->
<a href='cadclie.php?cod=<?=$newCod;?>' class="btn btn-success">Cadastrar Cliente</a>
<a href='main.html' class="btn btn-success pull-right">Sair</a>
<div class='clearfix'></div>


<!-- Tabela de Clientes -->
<table class="table table-striped">
<tr class='active'>
<th>Foto</th>
<th>Cod.</th>
<th>Nome</th>
<th>Sobrenome</th>
<th>E-mail</th>
<th>Celular</th>
<th>Status</th>
<th>Acao</th>
</tr>
<?php foreach ($clientes as $cliente):?>
<tr>
<td><img src='fotos/<?=$cliente->foto?>' height='40' width='40'></td>
<td><?=$cliente->cod_cli?></td>
<td><?=$cliente->nome?></td>
<td><?=$cliente->sobrenome_cli?></td>
<td><?=$cliente->email?></td>
<td><?=$cliente->celular?></td>
<td><?=$cliente->status?></td>
<td>
<a href='editclie.php?id=<?=$cliente->id?>' class="btn btn-primary">Editar</a>
<a href='javascript:void(0)' class="btn btn-danger link_exclusao" rel="<?=$cliente->id?>">Excluir</a>
</td>
</tr>
<?php endforeach;?>
</table>

<?php else: ?>

<!-- Mensagem caso não exista clientes ou não encontrado -->
<h3 class="text-center text-primary">Não existem clientes cadastrados!</h3>
<?php endif; ?>
</fieldset>
</div>
<script type="text/javascript" src="js/custom.js"></script>
</body>
</html>
OPS! Função correta..

function generateCodCliente($lastCodCliente) {
$n = ltrim($lastCodCliente, 'C') + 1;
return 'C' . str_pad($n, 4, "0", STR_PAD_LEFT);
}
Edmar Antonio Calaça
Re: Pegar variavel do PDO, manipula-la e gravar num novo registro
27 de May de 2018 às 12:50AM
Oi, Trambulhão

O script está dando este erro: Warning: ltrim() expects parameter 1 to be string, object given in C:\xampp\htdocs\Testes\teste2.php on line 3 mas está funcionando.
Ele está pegando o 1º registro C0001 e passando como parâmetro e eu quero que seja C0007.
Veja, meu BD tem 6 registros numerados de C0001 a C0006, eu quero pegar o C0006 e acrescentar 1 .
A idéia é separar o C somar a parte numérica e acrescentar novamente o C ficando C0007.
Agora quero pegar essa variável C0007 e enviar para a próxima página e pega-la em um $_GET.
Agora entendi..

<?php

function generateCodCliente($lastCodCliente)
{
$n = ltrim($lastCodCliente, 'C') + 1;
return 'C' . str_pad($n, 4, "0", STR_PAD_LEFT);
}

require 'conexao.php';

// http://php.net/manual/pt_BR/function.filter-input.php
// Recebe o termo de pesquisa ou NULL se não existir
$termo = filter_input(INPUT_GET, 'termo', FILTER_SANITIZE_SPECIAL_CHARS);

// Verifica se o termo de pesquisa está vazio, se estiver executa uma consulta completa
if (empty($termo)):
$conexao = conexao::getInstance();
// id, cod_cli, nome, sobrenome_cli, email, celular, status, foto
$sql = 'SELECT * FROM tab_clientes';
$stm = $conexao->prepare($sql);
$stm->execute();
$clientes = $stm->fetchAll(PDO::FETCH_OBJ);
$last_id = $conexao->lastInsertId();
$cod = $stm->execute();
echo $stm->rowCount() . " linhas alteradas";
else:
// Executa uma consulta baseada no termo de pesquisa passado como parâmetro
$conexao = conexao::getInstance();
// id, cod_cli, nome, sobrenome_cli, email, celular, status, foto
$sql = 'SELECT * FROM tab_clientes WHERE nome LIKE :nome OR :codigo LIKE :codigo';
$stm = $conexao->prepare($sql);
$stm->bindValue(':nome', $termo.'%');
$stm->bindValue(':codigo', $termo.'%');
$stm->execute();
$clientes = $stm->fetchAll(PDO::FETCH_OBJ);
endif;

// Pega o ultimo registro $lastCod['cod_cli']
$lastCod = $conexao->query('SELECT cod_cli FROM tab_clientes ORDER BY id DESC LIMIT 1', PDO::FETCH_ASSOC)->fetch();

// Gera um novo código
$newCod = generateCodCliente($lastCod['cod_cli']);
?>
<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<meta charset="utf-8">
<title>Listagem de Clientes</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
<div class='container'>
<fieldset>

<!-- Cabeçalho da Listagem -->
<legend>
<h1>Cadastro de Clientes</h1>
</legend>

<!-- Formulário de Pesquisa -->
<form action="" method="get" id='form-contato' class="form-horizontal col-md-10">
<label class="col-md-2 control-label" for="termo">Pesquisar</label>
<div class='col-md-7'>
<input type="text" class="form-control" id="termo" name="termo" placeholder="Infome o Código ou Nome">
</div>
<button type="submit" class="btn btn-primary">Pesquisar</button>
<a href='listclie.php' class="btn btn-primary">Ver Todos</a>
</form>

<?php if (!empty($clientes)): ?>

<!-- Link para página de cadastro -->
<a href='cadclie.php?cod=<?=$newCod;?>' class="btn btn-success">Cadastrar Cliente</a>
<a href='main.html' class="btn btn-success pull-right">Sair</a>
<div class='clearfix'></div>

<!-- Tabela de Clientes -->
<table class="table table-striped">
<tr class='active'>
<th>Foto</th>
<th>Cod.</th>
<th>Nome</th>
<th>Sobrenome</th>
<th>E-mail</th>
<th>Celular</th>
<th>Status</th>
<th>Acao</th>
</tr>
<?php foreach ($clientes as $cliente):?>
<tr>
<td>
<img src='fotos/<?=$cliente->foto?>' height='40' width='40'>
</td>
<td>
<?=$cliente->cod_cli?>
</td>
<td>
<?=$cliente->nome?>
</td>
<td>
<?=$cliente->sobrenome_cli?>
</td>
<td>
<?=$cliente->email?>
</td>
<td>
<?=$cliente->celular?>
</td>
<td>
<?=$cliente->status?>
</td>
<td>
<a href='editclie.php?id=<?=$cliente->id?>' class="btn btn-primary">Editar</a>
<a href='javascript:void(0)' class="btn btn-danger link_exclusao" rel="<?=$cliente->id?>">Excluir</a>
</td>
</tr>
<?php endforeach;?>
</table>

<?php else: ?>

<!-- Mensagem caso não exista clientes ou não encontrado -->
<h3 class="text-center text-primary">Não existem clientes cadastrados!</h3>
<?php endif; ?>
</fieldset>
</div>
<script type="text/javascript" src="js/custom.js"></script>
</body>
</html>
Edmar Antonio Calaça
Re: Pegar variavel do PDO, manipula-la e gravar num novo registro
27 de May de 2018 às 09:45PM
Funcionou!!!!!!!!
Beleza. Fico muito agradecido, Trambulhão.

Um abraço.
João Assef
Re: Pegar variavel do PDO, manipula-la e gravar num novo registro
20 de July de 2018 às 11:12PM
Resolvido
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.