problema update dados pdo condição
Opa Galera to com um problema na hora de realizar o update referente ao número e o tipo de uso seria o WHERE. Segue abaixo o code
index.php
<?php
require_once "config.php";
include "funcoes.php";
pegarDadosCSV($arquivo = file_get_contents('dados.csv'));
?>
config.php
<?php
define("HOST", "localhost");
define("BD", "calcula_conta");
define("USER", "root");
define("PASS", "");
function conectarBanco() {
try {
$dsn = "mysql:host=" . HOST . ";dbname=" . BD;
$pdo = new PDO($dsn, USER, PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Erro: " . $e->getMessage();
}
return $pdo;
}
?>
funcoes.php
<?php
include"functions/soma_minutos.php";
include"functions/cadastro_numeros.php";
include"functions/update_minutos_tipo.php";
include"functions/existe_numero_tipo.php";
function pegarDadosCSV($arquivo){
//Separa as linhas
$str = explode(PHP_EOL, trim($arquivo));
//Remove o cabeçalho
unset($str[0]);
//Inicia o array que irá receber os números
$num = array();
//Percorre cada linha
foreach($str as $row){
//Separa as colunas
$data = explode(';', $row);
//Agrupa as colunas usando o número como chave
// agrupa tudo pelo tipo de uso como referencia
$num[$data['4']][] = $data;
// dados vindo do excel para calculo
$numero_csv = $data['1']; // numero do celular do excel
$duracao_csv = $data['3']; // duracao das ligacoes
$tipo_uso_csv = $data['4']; // tipo de uso
$tipoUm = 'Ligações de Celular para Celular';
$tipoDois = 'Ligações de Celular para Fixo';
//se o tipo for = Ligações de Celular para Celular
if($tipo_uso_csv == utf8_decode($tipoUm)){
$tipo = '1';
$tipo_uso_existe_bd = existe_numero_tipo($numero_csv, $tipo);
if($tipo_uso_existe_bd >= 1){
echo 'tah no banco';
//verificando se o tipo de uso é igual ao que tem no banco de dados
foreach($tipo_uso_existe_bd as $Tipo_uso_bd):
$total_min = somaMinutos($Tipo_uso_bd['duracao'], $duracao_csv);
update_minutos_tipo($numero_csv, $tipo, $total_min);
endforeach;
}else{
//se nao ele cadastra o numero no banco com o tipo de uso
$cadastro_novo = cad($numero_csv, $duracao_csv, '1');
if($cadastro_novo){
echo 'cadastro realizado com sucesso!'.'<BR>';
}
}
}/*
//se o tipo for = Ligações de Celular para Fixo
}elseif($data['4'] == utf8_decode($tipoDois)){
//if($data['4'] == utf8_decode($tipoDois)){
$tipo = '2';
$tipo_uso_existe = existe_numero_tipo($numero_csv, $tipo);
if($tipo_uso_existe >= 1){
//verificando se o tipo de uso é igual ao que tem no banco de dados
foreach($tipo_uso_existe as $Tipo_uso):
// se for positivo ele soma e faz o update
$total_min = somaMinutos($Tipo_uso['duracao'], $duracao_csv);
update_minutos_tipo($numero_csv, $tipo, $total_min);
endforeach;
}else{
//se nao ele cadastra o numero no banco com o tipo de uso
$cadastro_novo = cad($numero_csv, $duracao_csv, '2');
if($cadastro_novo){
echo 'cadastro realizado com sucesso!'.'<BR>';
}
}
}//fim else
*/
}// fim foreach
}//function
?>
soma_minutos.php
<?php
/*****************************
FUNÇÃO SOMA MINUTOS
*****************************/
function somaMinutos($Duracao_bd, $Duracao_excel) {
//"Horário zero"
$data = new DateTime('00:00:00');
//Horário para soma
$total = new DateTime('00:00:00');
//intervalos de tempo
$dataSoma1 = new DateTime($Duracao_bd);
$dataSoma2 = new DateTime($Duracao_excel);
//Retorna o intervalo de tempo, no formato DateInterval e adiciona no horário para soma.
$total->add($data->diff($dataSoma1));
$total->add($data->diff($dataSoma2));
$total_min = $data->diff($total)->format('%H:%I:%S');
return $total_min;
}
?>
cadastro_numeros.php
<?php
function cad($numero, $duracao, $tipo_de_uso) {
$pdo = conectarBanco();
try {
$cad = $pdo->prepare("INSERT INTO calcule_sua_conta (numero, duracao, tipo_de_uso) VALUES(:numero, :duracao, :tipo_de_uso)");
$cad->bindValue(":numero", $numero);
$cad->bindValue(":duracao", $duracao);
$cad->bindValue(":tipo_de_uso", $tipo_de_uso);
$cad->execute();
if($cad->rowCount() == 1):
return true;
else:
return false;
endif;
} catch (PDOException $e) {
echo "Erro: " . $e->getMessage();
}
}
?>
update_minutos_tipo.php
<?php
function update_minutos_tipo($numero, $tipo_de_uso, $minutos) {
$pdo = conectarBanco();
try {
$update_minutos = $pdo->prepare("UPDATE calcule_sua_conta SET duracao = :duracao WHERE numero = :numero AND tipo_de_uso =:tipo_de_uso");
$update_minutos->bindValue(":numero", $numero);
$update_minutos->bindValue(":tipo_de_uso", $tipo_de_uso);
$update_minutos->bindValue(":duracao", $minutos);
$update_minutos->execute();
if($update_minutos->rowCount() == 1):
//return true;
echo 'Dados do celular '.$numero.' atualizados com sucesso!<BR>';else:
//return false;
echo 'erro ao atualizar minutos celular '.$numero.' com tipo de uso = 2 '.'<BR>';
endif;
} catch (PDOException $e) {
echo "Erro: " . $e->getMessage();
}
}
?>
existe_numero_tipo.php
<?php
/*****************************
FUNÇÃO DE LER NO BANCO
*****************************/
function existe_numero_tipo($numero, $tipo_de_uso) {
$pdo = conectarBanco();
try {
$verifica_numero_tipo = $pdo->prepare("SELECT * FROM calcule_sua_conta WHERE $numero = :numero AND $tipo_de_uso = :tipo_de_uso");
$verifica_numero_tipo->bindValue(":numero", $numero);
$verifica_numero_tipo->bindValue(":tipo_de_uso", $tipo_de_uso);
$verifica_numero_tipo->execute();
if ($verifica_numero_tipo->rowCount() == 1):
return true;
else:
return false;
endif;
} catch (PDOException $e) {
echo "Erro: " . $e->getMessage();
}
}
?>
Banco de dados
CREATE TABLE IF NOT EXISTS `calcule_sua_conta` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`numero` varchar(50) DEFAULT NULL,
`duracao` varchar(50) DEFAULT NULL,
`torpedos` int(11) DEFAULT NULL,
`dados` varchar(150) DEFAULT NULL,
`tipo_de_uso` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=154 ;
--
-- Extraindo dados da tabela calcule_sua_conta
--
INSERT INTO `calcule_sua_conta` (`id`, `numero`, `duracao`, `torpedos`, `dados`, `tipo_de_uso`) VALUES
(153, '99559955', '00:00:15', NULL, NULL, 1);
Creio que pode ajuda muita gente também
ia me esquecendo tem esse arquivo dados.csv que vem as informações
Discussão (4)
Carregando comentários...