Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''pdo''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Todas as áreas do Fórum

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Encontrar resultados em...

Encontrar resultados que...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Encontrado 186 registros

  1. Olá, sou iniciante em php OO, estou com uma dúvida e gostaria que alguém me ajudasse, preciso saber como eu faço pra chamar uma função "private estatic" que está eu outra classe, quando ela está na mesma classe eu consigo chamar usando o self::, mas em outra classe o self:: não funciona, como seria a forma correta? No Código abaixo eu preciso chamar a função conectaBanco(), através de outra classe. class Conexao{ private static $host = "localhost"; private static $dbname = "aluno"; private static $usuario = "root"; private static $senha = ""; private static $banco = null; private static function conectaBanco(){ try { self::$banco = new PDO('mysql:host=' . self::$host . ';dbname=' . self::$dbname, self::$usuario, self::$senha); return self::$banco; }catch (Exception $e) { echo "Mensagem de Erro:" . $e->getMessage() . '<br>'; echo "Linha do Erro:" . $e->getLine(); } } public function getBanco(){ return self::conectaBanco(); } }
  2. geovanesilva

    O select com critério e conexao PDO retorna dois avisos

    Bom dia a todos, não tenho experiencia com mysql e sou novato em programação, recentemente iniciei um sistema de controle de estoque onde em um dos módulos preciso selecionar apenas um registro de uma determinada tabela, para isso passo ao select o parâmetro necessário para me retornar o registro adequado. Li alguns tópicos de vários foruns e me deparei com PDO, então optei por utilizá-lo em minhas conexões com o banco de dados, porem recebo dois avisos: Atenção: PDOStatement :: execute () espera que o parâmetro 1 seja array, string dada em C: \ wamp64 \ www \ ControledeEstoque \ DAL \ DALUsuario.php na linha 13 e Aviso: Argumento inválido fornecido para foreach () em C: \ wamp64 \ www \ ControledeEstoque \ GUI \ listausu.php na linha 158. A seguir segue o DALUsuario.php e o Listausu.php a que se referem os avisos. Desde já agradeço a todos. <?php require_once '../Modelo/ModeloUsuario.php'; //Cruduser class DALUsuario extends ModeloUsuario{ protected $tabela = 'usuarios'; public function buscaUsucod($usucod){ $sql = "SELECT * FROM $this->tabela WHERE usucod = :cod"; $stm = DALConexao::prepare($sql); $stm->bindParam(':cod', $usucod, PDO::PARAM_INT); $stm->execute($sql); return $stm->fetch(); } public function buscaLogin($usulogin, $ususenha){ $sql = "SELECT * FROM $this->tabela WHERE usulogin = :usulogin AND ususenha = :ususenha LIMIT 1"; $stm = DALConexao::prepare($sql); $stm->bindParam(':usulogin', $usulogin, PDO::PARAM_STR); $stm->bindParam(':ususenha', $ususenha, PDO::PARAM_STR); return $stm->fetchAll( PDO::FETCH_ASSOC); } public function listaAll(){ $sql = "SELECT * FROM $this->tabela"; $stm = DALConexao::prepare($sql); $stm->execute(); return $stm->fetchAll(); } public function buscaTodos(){ $sql = "SELECT * FROM $this->tabela "; $stm = DALConexao::prepare($sql); $stm->execute(); return $stm->fetchAll(); } public function insert(){ $sql = "INSERT INTO $this->tabela(usunome,usulogin,ususenha,nivcod,usunivel,sitcod,ususituacao,clicod) VALUES(:nome,:usuario,:senha,:nivcod,:nivel,:sitcod,:situacao,:clicod)"; $stm = DALConexao::prepare($sql); $stm->bindParam(':nome', $this->nome); $stm->bindParam(':usuario', $this->usuario); $stm->bindParam(':senha', $this->senha); $stm->bindParam(':nivcod', $this->nivcod); $stm->bindParam(':nivel', $this->nivel); $stm->bindParam(':sitcod', $this->sitcod); $stm->bindParam(':situacao', $this->situacao); $stm->bindParam(':clicod', $this->clicod); return $stm->execute(); } public function alterar($usucod){ $sql = "UPDATE $this->tabela SET usunome=:nome,usulogin=:usuario,ususenha=:senha,nivcod=:nivcod,usunivel=:nivel,sitcod=:sitcod,ususituacao=:situacao, clicod=:clicod WHERE usucod=:usucod"; $stm = DALConexao::prepare($sql); $stm->bindParam(':usucod', $this->codusu); $stm->bindParam(':nome', $this->nome); $stm->bindParam(':usuario', $this->usuario); $stm->bindParam(':senha', $this->senha); $stm->bindParam(':nivcod', $this->nivcod); $stm->bindParam(':nivel', $this->nivel); $stm->bindParam(':sitcod', $this->sitcod); $stm->bindParam(':situacao', $this->situacao); $stm->bindParam(':clicod', $this->clicod); return $stm->execute(); } public function excluir($usucod){ $sql = "DELETE FROM $this->tabela WHERE usucod = :usucod"; $stm = DALConexao::prepare($sql); $stm->bindParam(':usucod', $usucod, PDO::PARAM_INT); return $stm->execute(); } } ?> <?php session_start(); include_once("../Controle/seguranca.php"); if($_SESSION['usuNivel'] != 'administrador'){ $_SESSION['Msg'] = "Erro, acesso não permitido."; header("location:../GUI/login.php"); } function __autoload($class) { require_once '../DAL/' . $class . '.php'; } ?> <!DOCTYPE html> <html lang="pt-br"> <head> <title>Controle de Estoque</title> <?php include_once("../GUI/cabecalhopagadm.php"); ?> </head> <body> <nav> <?php include_once("../GUI/menupagadm.php"); ?> </nav> <!-- Fim navbar --> <div class="container"><br /> <h2>Administração - Lista de Usuários</h2> <?php require_once("../GUI/msgs.php"); ?> <blockquote class="blockquote text-right"> <div class="float:left;"> <button type="button" class="btn btn-info btn-sm" data-toggle="modal" data-target="#modalinserir"> <i class="material-icons"> shop </i> Novo Usuário </button> </div> </blockquote> <div class="row"> <div class="col-12"> <!-- Inicio Modal --> <div class="modal fade" id="modalinserir" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="myModalLabel">Cadastro de Usuários</h4> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> </div> <div class="modal-body"> <form class="form-horizontal" method="POST" action="http://localhost/ControledeEstoque../Controle/crud_usuario.php" enctype="multipart/form-data"> <div class="form-group"> <label for="recipient-name" class="col-sm-3 control-label">Empresa(cliente)</label> <div class="col-md-12 mb-2"> <select class="form-control is-valid" name="cliente" required> <option value="">Faça uma seleção</option> <?php $dalcli = new DALCliente(); foreach ($dalcli->buscaTodos() as $key => $value){ echo '<option value="'.$value->clicod.'">'.$value->clinome.'</option>'; } ?> </select> </div> </div> <div class="form-group"> <label for="recipient-name" class="col-sm-3 control-label">Nome</label> <div class="col-md-12 mb-2"> <input name="nome" type="text" class="form-control" placeholder="nome dcompleto" required> </div> </div> <div class="form-group"> <label for="recipient-name" class="col-sm-3 control-label">Usuário</label> <div class="col-md-12 mb-2"> <input name="usuario" type="text" class="form-control" placeholder="nome de usuário" required> </div> </div> <div class="form-group"> <label for="recipient-name" class="col-sm-3 control-label">Senha</label> <div class="col-md-12 mb-2"> <input name="senha" type="password" class="form-control" placeholder="senha de acesso" required> </div> </div> <div class="form-group"> <label for="recipient-name" class="col-sm-3 control-label">Nivel de acesso</label> <div class="col-md-12 mb-2"> <select class="form-control is-valid" name="nivel" required> <option value="">Faça uma seleção</option> <?php $dalnivel = new DALNivel(); foreach ($dalnivel->buscaTodos() as $key => $value){ echo '<option value="'.$value->nivcod.'">'.$value->nivnome.'</option>'; } ?> </select> </div> </div> <div class="form-group"> <label for="recipient-name" class="col-sm-3 control-label">Situação</label> <div class="col-md-12 mb-2"> <select class="form-control is-valid" name="situacao" required> <option value="">Faça uma seleção</option> <?php $dalsit = new DALSituacao(); foreach ($dalsit->buscaParteMenor() as $key => $value){ echo '<option value="'.$value->sitcod.'">'.$value->sitnome.'</option>'; } ?> </select> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-info btn-sm" data-dismiss="modal"> <i class = "material-icons"> cancel_presentation</i> Cancelar </button> <button type="submit" name="btncad" class="btn btn-success btn-sm"> <i class = "material-icons"> save</i> Cadastrar</span> </button> </div> </form> </div> </div> </div> </div> <!-- Fim Modal --> <div class="row"> <div class="col-md-12"> <table class="table table-condensed"> <thead> <tr> <th>Nome</th> <th>Usuário</th> <th>Nivel</th> <th>Situacao</th> <th class="cabecalho-tabela">Ação</th> </tr> </thead> <tbody> <?php $dalusu = new DALUsuario(); foreach($dalusu->buscaUsucod(2) as $key => $linha){ ?> <tr> <td><?php echo $linha -> usunome; ?></td> <td><?php echo $linha -> usulogin; ?></td> <td><?php echo $linha -> usunivel; ?></td> <td><?php echo $linha -> ususituacao; ?></td> <td class="cabecalho-tabela"> <button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#modalvisualizar<?php echo $linha -> usucod;?>"> <i class = "material-icons"> remove_red_eye</i> Visualizar </button> <button type="button" class="btn btn-warning btn-sm text-white" data-toggle="modal" data-target="#modalalterar<?php echo $linha -> usucod;?>"> <i class = "material-icons"> edit</i> Alterar </button> <button type="button" class="btn btn-danger btn-sm" data-toggle="modal" data-target="#modalexcluir<?php echo $linha -> usucod; ?>"> <i class = "material-icons"> delete_forever</i> Excluir </button> </td> </tr> <!-- Inicio Modal viasualizasusu --> <div class="modal fade" id="modalvisualizar<?php echo $linha -> usucod; ?>" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="myModalLabel"><?php echo "Usuário - ".$linha -> usunome; ?></h4> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> </div> <div class="modal-body"> <p><?php echo "Cód Usuário - ".$linha -> usucod; ?></p> <p><?php echo "Nome - ".$linha -> usunome; ?></p> <p><?php echo "Usuário - ".$linha -> usulogin; ?></p> <p><?php echo "Nível - ".$linha -> usunivel; ?></p> <p><?php echo "Situação - ".$linha -> ususituacao; ?></p> <div class="modal-footer"> <button type="button" class="btn btn-info btn-sm" data-dismiss="modal"> <i class = "material-icons"> exit_to_app</i> Fechar </button> </div> </div> </div> </div> </div> <!-- Fim Modal viasualizasusu--> <!-- Inicio Modalexcluir --> <div class="modal fade" id="modalexcluir<?php echo $linha -> usucod; ?>" tabindex="-1" role="dialog" aria-labelledby="modalexcluirLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="modalexcluirLabel">Exclusão de Produto</h4> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> </div> <div class="modal-body"> <form class="form-horizontal" method="POST" action="http://localhost/ControledeEstoque../Controle/crud_produto.php" enctype="multipart/form-data"> <p><?php echo "Cód Usuário - ".$linha -> usucod; ?></p> <p><?php echo "Nome - ".$linha -> usunome; ?></p> <p><?php echo "Usuário - ".$linha -> usulogin; ?></p> <p><?php echo "Nível - ".$linha -> usunivel; ?></p> <p><?php echo "Situação - ".$linha -> ususituacao; ?></p> <p><?php echo "Registros excluídos não poderão ser recuparados.";?></p> <input name="Xcod" type="hidden" id="Xcod" value="<?php echo $linha -> usucod; ?>"> <div class="modal-footer"> <button type="button" class="btn btn-info btn-sm" data-dismiss="modal"> <i class = "material-icons"> cancel_presentation</i> Cancelar </button> <button type="submit" name="btnexc" class="btn btn-danger btn-sm"> <i class = "material-icons"> delete_forever</i> Excluir </button> </div> </form> </div> </div> </div> </div> <!-- Fim Modal Modalexcluir--> <!-- Inicio Modalalterar --> <div class="modal fade" id="modalalterar<?php echo $linha -> usucod;?>" tabindex="-1" role="dialog" aria-labelledby="modalalterarLabel" data-target="#modalalterar" data-backdrop="static" data-keyboard="false"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="modalalterarLabel">Alteração de Produto</h4> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> </div> <div class="modal-body"> <form class="form-horizontal" method="POST" action="http://localhost/ControledeEstoque../Controle/crud_usuario.php" enctype="multipart/form-data"> <div class="form-group"> <label for="recipient-name" class="control-label">Empresa(cliente)</label> <select class="form-control is-valid" name="cliente" required> <option value="">Faça uma seleção</option> <?php $dalcli = new DALCliente(); foreach ($dalcli->buscaTodos() as $key => $value){ if($value->clicod != $linha->clicod){ echo '<option value="'.$value->clicod.'">'.$value->clinome.'</option>'; }else{ $clientecod = $value->clicod; $clientenome = $value->clinome; } } ?> <option value="<?php echo $clientecod;?>" <?php echo "selected"; ?> > <?php echo $clientenome;?> </option> </select> </div> <div class="form-group"> <label for="recipient-name" class="control-label">Nome</label> <input name="nome" type="text" class="form-control" id="nome" value="<?php echo $linha->usunome;?>" required> </div> <div class="form-group"> <label for="recipient-name" class="control-label">Usuário</label> <input name="usuario" type="text" class="form-control" id="usuario" value="<?php echo $linha->usulogin;?>" required> </div> <div class="form-group"> <label for="recipient-name" class="control-label">Senha</label> <input name="senha" type="password" class="form-control" id="senha" value="<?php //echo $linha->ususenha;?>" required> </div> <div class="form-group"> <label for="recipient-name" class="control-label">Nível de acesso</label> <select class="form-control is-valid" name="nivel" required> <option value="">Faça uma seleção</option> <?php $dalnivel = new DALNivel(); foreach ($dalnivel->buscaTodos() as $key => $value){ if($value->nivcod != $linha->nivcod){ echo '<option value="'.$value->nivcod.'">'.$value->nivnome.'</option>'; }else{ $nivelcod = $value->nivcod; $nivelnome = $value->nivnome; } } ?> <option value="<?php echo $nivelcod;?>" <?php echo "selected"; ?> > <?php echo $nivelnome;?> </option> </select> </div> <div class="form-group"> <label for="recipient-name" class="control-label">Situação</label> <select class="form-control is-valid" name="situacao" required> <option value="">Faça uma seleção</option> <?php $dalsit = new DALSituacao(); foreach ($dalsit->buscaParteMenor() as $key => $value){ if($value->sitcod != $linha->sitcod){ echo '<option value="'.$value->sitcod.'">'.$value->sitnome.'</option>'; }else{ $situacaocod = $value->sitcod; $situacaonome = $value->sitnome; } } ?> <option value="<?php echo $situacaocod;?>" <?php echo "selected"; ?> > <?php echo $situacaonome;?> </option> </select> </div> <input name="Xcod" type="hidden" id="Xcod" value="<?php echo $linha -> usucod;?>"> <div class="modal-footer"> <button type="button" class="btn btn-info btn-sm" data-dismiss="modal"> <i class = "material-icons"> cancel_presentation</i> Cancelar </button> <button type="submit" name="btnalt" class="btn btn-warning btn-sm text-white"> <i class = "material-icons"> edit</i> Alterar </button> </div> </form> </div> </div> </div> </div> <!-- Termino Modalalterar --> <?php } ?> </tbody> </table> </div> </div> <!-- DIV ROW --> </div> <!-- DIV COL - 12 --> </div> <!-- DIV ROW --> </div> <!-- DIV CONTAINER --> <?php include_once("../GUI/rodapepagadm.php"); ?> </body> </html>
  3. Rodrigo5468

    Validação em PDO OOP

    Boa tarde a todos. Estou desenvolvendo um sistema de registro para fins de estudos, mas tenho algumas dúvidas e dificuldades até. Estou usando "programação orientada a objetos", e quero validar alguns campos do meu registro, se puderem me auxiliar, será de grande ajuda. Meu Diretório: Projeto1/ ├── backend/ │ ├── classes/ │ │ ├── Register.php ├── index.php Em Register.php tenho o seguinte código para fazer a validação, mas acredito que estou fazendo algo de errado. public function setUsername($username) { $sql = "SELECT * FROM $this->table WHERE username = :username"; $stmt = Database::prepare($sql); $stmt->execute(array('username' => $_POST["username"])); if(empty($_POST["username"])) { return "O campo usuário não pode ser vázio."; }elseif(ctype_space($_POST["username"])) { return "Não pode usar apenas espaços no campo de usuário."; }elseif(strlen($_POST["username"] < 3)) { return "É necessário no mínimo 3 (três) caracteres no usuário."; }elseif(strlen($_POST["username"] > 15)) { return "O máximo é de 15 (quinze) caracteres no usuário."; }elseif(preg_match("/^[a-zA-Z0-9]*$/", $_POST["username"] == 0)) { return "O nome de usuário só pode conter letras e números. (sem espaços e sem caracteres epeciais)"; }elseif($stmt->num_rows !== 0) { return "O nome de usuário já está cadastrado em nossos bancos de dados."; }else { $this->username = $username; } } E no index.php tenho o seguinte código, acredito que está certo, mas eu gostaria de mostrar as mensagens de erros que estão no Register.php, como que posso fazer isso? $register = new Registers(); if(isset($_POST["cadastrar"])) { $username = $_POST["username"]; $email = $_POST["email"]; $password = $_POST["password"]; $register->setUsername($username); $register->setEmail($email); $register->setPassword($password); if($register->insert()) { return "Usuário cadastrado com sucesso."; } } Obrigado pela atenção!
  4. fabriciothe2018

    Condições diferentes da mesma coluna

    Olá, Tenho uma tabela chamada anuncios, nela há as colunas: id, nome, finalizar e datafim. Tenho os seguintes registros: 1, teste1, N, 0000-00-00 2, teste2, S, 2018-12-05 Gostaria de fazer um SELECT listando apenas os registros onde o valor da coluna finalizar seja N ou que seja S, desde que quando seja S, a datafim seja menor ou igual a hoje. De já agradeço a ajuda.
  5. fabriciothe2018

    in_array coluna mysql

    Olá, Tenho uma tabela chamada noticias, nesta tabela existe uma coluna chamada cidades. Há um registro onde o valor da coluna cidades é: 2,3,4 Gostaria de filtrar os registros que contenha o número 3 na coluna cidades. Há como criar uma condição? Uma espécie de in_array no MySQL? Exemplo: No exemplo acima não retorna nada, óbvio rsrs.. Retornaria apenas se eu usasse: ...cidades IN ('2,3,4') De já, agradeço a ajuda.
  6. rogarfil

    nav pills trazendo informações do mysql em pdo

    <div class="video-sec"> <h4 class="heading-small">Mídias</h4> <div class="video-block"> <ul class="nav nav-pills justify-content-center mb-4" id="pills-nav" role="tablist"> <?php // Atribui uma conexão PDO $conexao = Connection::getInstance(); $controle_ativo = 2; //$controle_num_slide = 1; $sql = "SELECT * FROM db_post WHERE status=1 AND category='Mídia' ORDER BY created DESC LIMIT 3"; $stm = $conexao->prepare($sql); $stm->execute(); while($post = $stm->fetch(PDO::FETCH_OBJ)) { if($controle_ativo == 2) { ?> <li class="nav-item"> <a class="nav-link active" id="nav-pills-01" data-toggle="pill" href="#<?=$post->post_id?>"><?=$post->title?></a> </li> <?php $controle_ativo = 1; } else { ?> <li class="nav-item"> <a class="nav-link" id="nav-pills-02" data-toggle="pill" href="#<?=$post->post_id?>"><?=$post->title?></a> </li> <?php //$controle_num_slide++; } } ?> </ul> <div class="tab-content" id="nav-pills-content"> <?php // Atribui uma conexão PDO $conexao = Connection::getInstance(); $controle_ativo = 2; $sql = "SELECT * FROM db_post WHERE status=1 AND category='Mídia' ORDER BY created DESC LIMIT 3"; $stm = $conexao->prepare($sql); $stm->execute(); while($post = $stm->fetch(PDO::FETCH_OBJ)) { if($controle_ativo == 2) { ?> <div class="tab-pane fade show active" id="<?=$post->post_id?>" role="tabpanel"> <div class="row"> <div class="col-sm-6"> <div class="embed-responsive embed-responsive-16by9"> <!-- 21by9, 16by9, 4by3, 1by1 --> <iframe class="embed-responsive-item" src="<?=$post->url?>"></iframe> </div> </div> <div class="col-sm-6"> <p class="display-5"><?=$post->content?></p> <p class="card-text"> <small class="text-time"> <em>Publicado em <?=date('M,d',strtotime($post->created))?></em> </small> </p> </div> </div> </div> <?php $controle_ativo = 1; } else { ?> <div class="tab-pane fade" id="<?=$post->post_id?>a" role="tabpanel"> <div class="row"> <div class="col-sm-6"> <div class="embed-responsive embed-responsive-16by9"> <!-- 21by9, 16by9, 4by3, 1by1 --> <iframe class="embed-responsive-item" src="<?=$post->url?>"></iframe> </div> </div> <div class="col-sm-6"> <p class="display-5"><?=$post->content?></p> <p class="card-text"> <small class="text-time"> <em>Publicado em <?=date('M,d',strtotime($post->created))?></em> </small> </p> </div> </div> </div> <?php } } ?> </div> Há aba ativa está perfeita quando clico na segunda ou terceira aba nada acontece (não abre), tenho que deixar dinâmico. Ainda pergunto existe uma maneira com javascript para ativar a aba e seu conteúdo.
  7. Olá, poderiam me ajudar com o erro abaixo? [29-Oct-2018 10:05:04 America/Recife] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'mdoria'@'localhost' (using password: NO)' in /home/includes/conexao.php:22 Stack trace: #0 /home/includes/conexao.php(22): PDO->__construct('mysql:host=loca...', NULL, NULL) #1 /home/includes/connection.php(34): include('/home/mdoria/pu...') #2 /home/functions_ajax.php(2): include('/home/mdoria/pu...') #3 {main} thrown in /home/includes/conexao.php on line 22 Meu php está com a seguinte estrutura: Arquivo: connection.php <?php error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE); date_default_timezone_set("America/Recife"); session_start(); include "includes/constantes.php"; include "includes/conexao.php"; Arquivo: conexao.php <?php $conCore = new PDO("mysql:host=" . SERVIDOR . ";dbname=" . CORE_BANCO, CORE_USUARIO, CORE_SENHA); $conCore->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conCore->query("SET NAMES 'utf8'"); $conCore->query('SET character_set_connection=utf8'); $conCore->query('SET character_set_client=utf8'); $conCore->query('SET character_set_results=utf8'); $query = "SELECT * FROM usuario WHERE identificador = '$_GET[sis]'"; $resultCore = $conCore->query($query); $rowCore = $resultCore->fetch(PDO::FETCH_OBJ); if (empty($rowCore->id)) { echo "<script>window.location.href = '$URLbase';</script>"; } define("BANCO", $rowCore->banco); define("USUARIO", $rowCore->user); define("SENHA", $rowCore->senha); $con = new PDO("mysql:host=" . SERVIDOR . ";dbname=" . BANCO, USUARIO, SENHA); $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $con->query("SET NAMES 'utf8'"); $con->query('SET character_set_connection=utf8'); $con->query('SET character_set_client=utf8'); $con->query('SET character_set_results=utf8'); Já antecipo meus agradecimentos a quem possa me auxiliar.
  8. Moscou

    Possível erro no statement PDO

    Guys, em uma aplicação teste, estava querendo salvar certas informações no bd, local funcionou ok, mas passando online, não. Online, fiz várias verificações, a conexão com o banco é feita, os valores são passados corretamente também, de acordo com o usuario. Alguém pode ajudar para saber se o codigo pode estar errado ou alguma outra coisa. Segue o codigo <?php ob_start(); session_start(); $user = filter_input(INPUT_POST, 'user'); $tel = filter_input(INPUT_POST, 'tel'); $email = filter_input(INPUT_POST, 'email'); $terms = filter_input(INPUT_POST, 'terms'); $img= $_FILES['img']['name']; function connection() { try { $dbhost = 'localhost'; $dbname = 'teste'; $dbuser = 'root'; $dbpass = ''; $pdo = new PDO('mysql:host='.$dbhost.';dbname='.$dbname, $dbuser, $dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $error) { echo 'ERRO: '.$error->getMessage(); } return $pdo; } $sql = "INSERT INTO teste(user, tel, email, terms, img) VALUES(:user, :tel, :email, :terms, :img)"; $stmt = connection()->prepare($sql); $stmt->bindParam(':user', $user, PDO::PARAM_STR); $stmt->bindParam(':tel', $tel, PDO::PARAM_STR); $stmt->bindParam(':email', $email, PDO::PARAM_STR); $stmt->bindParam(':img', $img, PDO::PARAM_STR); $stmt->bindParam(':terms', $terms); preg_match_all('/\.[a-zA-Z0-9]+/', $user, $extensao); // Tratamento para arquivo $folder = "arquivos/"; $folder = $folder . basename($user.' - '.(md5(uniqid()))); if(!in_array(strtolower(current(end($extensao))), array('.png', '.jpg'))) : if(move_uploaded_file($_FILES['img']['tmp_name'], $folder)): echo "A imagem". basename($_FILES['img']['name']). " veio"; else: echo "Algo de errado não deu certo. :("; endif; endif; if($stmt->execute()): header('Location:somewhere'); else: header('Location:somewhere'); endif; ob_end_flush(); ?>
  9. Tenho a tabela inform ( de informações ): CREATE TABLE IF NOT EXISTS `inform` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `photo_name` text COLLATE latin1_general_ci NOT NULL, `photo_content` mediumblob NOT NULL, `photo_content_type` varchar(255) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; Tenho também a tabela photos: CREATE TABLE IF NOT EXISTS `photos` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `foreign_key_inform` int(11) NOT NULL, `photo_name` text COLLATE latin1_general_ci NOT NULL, `photo_content` mediumblob NOT NULL, `photo_content_type` varchar(255) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; COMMIT; ( Estou apenas realizando testes ) Preciso fazer INSERT na inform e depois na photos, para isso tenho o code: <form action="?" method="POST" enctype="multipart/form-data" name="newProject"> <input type="file" name="coverPhoto" id="coverPhotos" required="required" /> <br> <br> <input type="file" name="photos[]" multiple="multiple" id="photos" /> <br> <br> <input type="submit" name="submit" value="submit" /> </form> <?php if ( isset ( $_POST['submit'] ) ) { if ( empty( $_FILES['photos']['name'] ) ) { echo '<br>' . 'CADASTRO INVALIDO !' . '<br>'; die(); } else { echo '<pre> '; print_r ( $_FILES['coverPhoto'] ); echo '</pre>'; $cover = $_FILES['coverPhoto']; $coverName = $_FILES['coverPhoto']['name']; $coverContent = file_get_contents ( $_FILES['coverPhoto']['tmp_name'] ); $coverType = $_FILES['coverPhoto']['type']; # $photos = $_FILES['photos']; foreach ($photos as $matriz) { foreach ($matriz as $interno) { if ( empty ( $interno ) ): $second = false; else: $second = true; endif; } } try { $database = new PDO("mysql:host=localhost;dbname=tests", "root", "admin"); $insertCover = "INSERT INTO inform VALUES (default, ?, ?, ?);"; $prepareCover = $database->prepare( $insertCover ); $prepareCover->bindParam(1, $coverName ); $prepareCover->bindParam(2, $coverContent ); $prepareCover->bindParam(3, $coverType ); if ( $prepareCover->execute() ): echo '<br>' . 'INFORMAÇÕES INSERIDAS !' . '<br>'; $last = $database->lastInsertId(); # echo $last; if ( $second ): $numberPhotos = count ( $_FILES['photos']['name'] ); $insertPhotos = 'INSERT INTO photos VALUES '; $photosValues = "(default, null, :photoName, :photoContent, :photoType),"; for ($v = 0; $v < $numberPhotos; $v++) { $replace = str_replace( array('default', 'null',':photoName', ':photoContent', ':photoType'), array('default', $last, ":photoName$v", ":photoContent$v", ":photoType$v"), $photosValues ); $insertPhotos .= $replace; } $insertPhotos = rtrim( $insertPhotos, ","); # echo '<br>' . $insertPhotos . '<br>'; $sth = $database->prepare( $insertPhotos ); for ($p = 0; $p < $numberPhotos; $p++) { // echo "\$sth->bindValue(\":photoName$param\", "; echo pathinfo ( $photos['name'][$param], PATHINFO_FILENAME) . ')<br>'; // # echo "$sth->bindValue(":photoContent$param", file_get_contents( $photos['tmp_name'][$param]));"; // echo "<br>\$sth->bindValue(\":PhotoType$param\", "; echo $photos['type'][$param] . ')<br>'; $sth->bindValue(':photoName' . $p, pathinfo ( $photos['name'][$p], PATHINFO_FILENAME ) ); $sth->bindValue(':photoContent' . $p, file_get_contents ( $photos['tmp_name'][$p] ) ); $sth->bindValue(':PhotoType' . $p, $photos['type'][$p]); } if ( $sth->execute() ): echo '<br>' . 'PROJETO CADASTRADO COM MAIS DE UMA FOTO !' . '<br>'; else: echo '<br>' . 'PROJETO COM MAIS DE UMA FOTO, PORÉM NÃO CADASTRADO !' . '<br>'; endif; else: echo '<br>' . 'PROJETO CADASTRADO COM UMA FOTO APENAS !' . '<br>'; endif; else: echo '<br>' . 'INFORMAÇÕES NÃO INSERIDAS !' . '<br>'; endif; } catch (Exception $e ) { echo $e->getMessage(); } } } Minha dúvida é pq do erro, na verdade não consigo identifica-lo. Alguém pode me ajudar a executar o código ? Mt Obg !
  10. artur0407

    PDO não retorna erro na conexão

    Boa noite; Estou realizando testes com a biblioteca PDO para banco de dados com PHP; Logo de inicio estou realizando minha conexão com o banco utilizando um código simples nativo da biblioteca. No entanto, mesmo errando o código propositalmente e tendo setado todos os possíveis erros e tratando com o bloco "try catch" o php não me retorna erro de nenhuma forma. Abaixo ambos os códigos; Primeiro sem erros: <?php ini_set('display_errors',true); ini_set('display_startup_erros',1); error_reporting(E_ALL); $username = 'root'; $password = ''; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING, PDO::ATTR_PERSISTENT => true ]; try { $conn = new PDO('mysql:host=localhost; dbname=test', $username, $password, $options); $conn->exec("set names utf8"); } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } ?> Posteriormente com erro proposital (na string de conexão da classe PDO) <?php ini_set('display_errors',true); ini_set('display_startup_erros',1); error_reporting(E_ALL); $username = 'root'; $password = ''; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING, PDO::ATTR_PERSISTENT => true ]; try { $conn = new PDO('mysql:hst=localhost; dbname=test', $username, $password, $options); $conn->exec("set names utf8"); } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } ?> Observem que no construtor do pdo, no lugar de host escrevi 'hst' e o php não retorna erros! Como sou novo aqui, me desculpem algum erro de formatação na mensagem, obrigado!
  11. Acho que estou com algum problema de herança ou coisa assim, eu não consigo chamar mais de um Container::getModel no meu Controller. Vou colocar o meu __construct aqui e o erro que ele me retorna PaginaController.php public function __construct() { parent:: __construct(); #se eu comentar e deixar apenas um ai ele funciona, mas quando tento fazer com mais de um ele da um erro $this->contato = Container::getModel("Contato"); $this->noticia = Container::getModel("Noticias"); $this->institucional = Container::getModel("Institucional"); $this->atuacao = Container::getModel("Atuacao"); $this->banner = Container::getModel("Banners"); } Container.php public static function getModel($model) { $objModel = "\\App\\Models\\".$model; return new $objModel(DataBase::getDataBase()); } Fatal error: Uncaught TypeError: Argument 1 passed to Core\BaseModel::__construct() must be an instance of PDO.
  12. Pessoal, tenho essa formula, aonde as notas n1, n2, n3, n4 são as notas bimestrais, e a nota n5 a de recuperação. Do jeito que está ele calcula as notas lançadas e divide pelo mesmo. Se lançou três notas ele divide por três, se lançou quatro divide por quatro . No caso a média estou setando 5. então por exemplo se o aluno tiver uma média abaixo eu lanço a nota n5 que é recuperação, e ela substitui a menor nota e recalcula a média final. Até aí funciona. Mas eu queria é que ao lançar a nota de recuperação, essa nota substituísse a média. que seria dos quatro bimestres <?php $n1 = $data["n1"]; $n2 = $data["n2"]; $n3 = $data["n3"]; $n4 = $data["n4"]; $n5 = $data["n5"];#recuperacao / nota extra $notas = [ $n1, $n2, $n3, $n4, $n5 ]; $notas = array_filter($notas, function( $nota ) { return !is_null($nota); }); //ordenamos em ordem crescente sort($notas, SORT_NUMERIC); //removemos a primeira nota do array ordenado, no caso a mais baixa $nota_mais_baixa = array_shift($notas); $fator_divisao = count($notas); if ($fator_divisao) { //calculamos a media aritmética $media = array_sum($notas) / $fator_divisao; //exibimos printf( 'Nota mais baixa: %.2f<br>Media: %.2f', $nota_mais_baixa, $media ); } ?>
  13. Ângela Rodrigues

    Mysqli para PDO

    Olá! Gostaria de saber como passar essa parte que fiz em MySQLi para PDO, pois eu tenho pouco conhecimento sobre a temática. function selectAllPessoa(){ $banco = abrirBanco(); $sql = "SELECT * FROM tb_questoes WHERE disciplina_quest='$disciplina' AND etapa_quest='$etapa' AND capitulo_quest='$cap' ORDER BY RAND() LIMIT 20"; $resultado = $banco->query($sql); $banco->close(); while ($row = mysqli_fetch_array($resultado)) { $grupo[] = $row; } if (empty($grupo)) { echo ""; }else{ return $grupo; } }
  14. Marxrj

    Dúvida para gravar para URL amigável

    Galera, estou com uma dúvida mas não sei direito por onde começar, Preço gravar um nome no banco de dados para URL amigável, então se quero gravar no banco um nome com acento e sobrenome. Exemplo: Maísa Gonçalves, eu tenho de gravar também em outro campo maisa-goncalves. Então eu teria de ter o campo nome no bd e outro sendo nome_url por exemplo, mas como consigo gravar esse segundo nome com minusculas, sem acentos e com o traço?
  15. Pessoal, gostaria de saber uma coisa, tenho um cadastro de clientes simples, e por definição tenho dois acessos, um de nível 1 com controle total, inclusive para excluir cadastros, e o nível 2 que pode criar cadastros, editar e outras coisas. Bom, o problema que quero resolver é o seguinte. Eu crio um cadastro normal com nome, cpf, data de nascimento...... Até aí normal, porém se eu chegar e na edição deixar todos os campos em branco, ele simplesmente exclui o cadastro. Tem alguma forma em que depois de criado o cadastro, ao se alterar um cadastro e o deixar em branco ele não exclua o mesmo?
  16. 11closed

    php PDO não está inserindo dados no BD

    Olá pessoal Bom Dia! Estou com um problema aqui, não estou conseguindo inserir dados no BD. Eu instalei recentemente o WAMP aqui e estou usando esse script para inserir dados no BD, mas não sei porque não está inserindo Config.php ob_start(); // Tabelas $tabela1 = "clientes"; $bd = "banco"; $user = "root"; $pass = ""; $host = "localhost"; try { $con = new PDO('mysql:host=localhost;dbname=banco', $user, $pass); } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } Cadastrando.php error_reporting(E_ALL & ~ E_NOTICE); include("../config/config.php"); $run = $con->prepare("INSERT INTO $tabela1 (NOME) VALUES (:NOME)"); $dados = array(':NOME' => $name); $cadastra = $run->execute($dados); Meu BD também é novo, coloquei na tabela clientes ID como PRIMARY e A_I Antes eu tinha um site dessa mesma programação que estava funcionando, ai depois de um tempo eu retornei, reinstalei o WAMP, porque estava com erros aqui, aí agora o mesmo site não está inserindo, alguem sabe porque não insere?
  17. Marlon Pacheco

    Insert massivo em banco Oracle

    Prezados, bom dia. Depois de estar afastado há bastante tempo do fórum, me vi obrigado a vir solicitar o auxílio de vcs. Necessidade: Incluir um número grande de informações em um banco Oracle. Problema: Não estou conseguindo utilizar prepared statements devido à variação do número de registros a serem inseridos. Solução tentada: Gerar o SQL a ser executado, incluindo as variáveis na string, através de um for. Essa solução foi barrada pela equipe de Segurança devido à fragilidade quanto a ataques de sql injection. Abaixo o trecho do código: $registros = explode('@|', $tratamento); $sql = 'INSERT INTO owner.tabela (id, cod, documento, dt_inclusao, usuario) SELECT null, null, null, null, null FROM dual '; for ($i = 0; $i < count($registros); $i++) { if($tipo == 'cod') { $cod = $registros[$i]; $doc = NULL; } else { $cod = NULL; $doc = $registros[$i]; } $sql .= "UNION ALL SELECT ?, ?, ?, ?, ? FROM dual "; if ($i % $lotes == 0 || $i == 0 || $i == count($registros)-1) { $stmt = $dbh->prepare($sql); $stmt->bindParam((1, $hash, PDO::PARAM_STR); $stmt->bindParam((2, $cod, PDO::PARAM_INT); $stmt->bindParam((3, $doc, PDO::PARAM_STR); $stmt->bindParam((4, $data, PDO::PARAM_STR); $stmt->bindParam((5, $usuario, PDO::PARAM_STR); $stmt->execute(); $sql = 'INSERT INTO owner.tabela (id, cod, documento, dt_inclusao, usuario) SELECT null, null, null, null, null FROM dual '; } } echo $hash; Qualquer auxílio será mto bem vindo.
  18. Andrelirasp

    Exibir resultado de uma consulta - PDO

    <?php require_once 'init.php'; $PDO = db_connect(); $PDO = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8', DB_USER, DB_PASS); $radiostacked = $_POST['radiostacked']; $busca = $_POST['busca']; $sql = 'SELECT * FROM livro AS t WHERE'; //idlivro, titulo, autor, tema e editora. switch($radiostacked) { case 'titulo': { $sql .= ' t.titulo=?'; break; } case 'autor': { $sql .= ' t.autor=?'; break; } case 'tema': { $sql .= ' t.autor=?'; break; } case 'editora': { $sql .= ' t.editora=?'; break; } case 'indice': { $sql .= ' t.idlivro=?'; break; } } $stmt = $db->prepare($sql); $stmt->execute([$busca]); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
  19. Olá, venho através deste post pedi a ajuda de pessoas que já teve o mesmo problema ou pessoas que sabe o motivo de ocorrer o problema, de vez em quando quando eu entro na url me aparece o seguinte ERROR: https://prnt.sc/k41ctj se alguém souber o motivo do error por favor me relate uma forma de resolver essa dor de cabeça.
  20. ndias

    ajax + phpoo_mvc + mysql_pdo

    To tentando fazer uma requisição Ajax em um projeto POO-MVC Tenho um formulário q eu uso o evento onchange pra chamar uma função JavaScript q por sua vez usa Ajax pra requisitar via POST uma página php <!DOCTYPE html> <head> <script> function consultaCPF($cpf) { $.ajax({ type : 'POST', url : 'ajax/consultaCPF.php', data : 'CPF='+$cpf, dataType: 'json', success : function(response){ if(response.codigo == "1") { }else{ } }, error: function(XMLHttpRequest, textStatus, errorThrown){ $("#erro").html('<b>ERRO</b>'+XMLHttpRequest.responseText); } }); } </script> </head> <body> <div id="erro"> <form name="form" method="post"> <input type="text" name="CPF" maxlength="14" onchange="return consultaCPF(this.value)" value="<?php if($_POST){echo $_POST['CPF'];}?>"> </form> </div> </body> </html> Até aí td bem... Na página php eu instancio uma classe da minha Model q faz uma consulta no bd pra saber se já existe ou não cadastrado o CPF digitado no form. Se existir me retorna 1, senão me retorna 2. A resposta eu capturo em json e passo de volta pro Ajax receber. Esse success é q vai determinar minha ação. <?php if($_POST && $_POST['CPF']){ $consulta = new \App\Models\Validacoes(\App\Init::getDb()); $res = $consulta->CPF($_POST['CPF']); if($res == 1){ $retorno = array('codigo' => 1, 'mensagem' => 'CPF ja existe'); echo json_encode($retorno); exit(); }else{ $retorno = array('codigo' => 2, 'mensagem' => 'CPF não cadastrado'); echo json_encode($retorno); exit(); } } Até aí tudo bem... Acontece que quando o Ajax faz a requisição da página php onde eu instancio minha classe, não sei pq tá dando Fatal Error Class Not Found (como se não tivesse conectando com meu banco). namespace App; class Init { public static function getDb(){ $db = new \PDO("mysql:host=127.0.0.1;dbname=root;charset=utf8","root","vertrigo"); return $db; } } Porém funciona se eu testar minha classe direto na página PHTML do formulário usando um método GET pra receber e passar a consulta pro meu objeto. namespace App\Models; class Validacoes { protected $db; public function __construct(\PDO $db) { $this->db = $db; } public function CPF($cpf){ $stmt = $this->db->prepare("Select CPF from tabela where REPLACE(REPLACE(CPF,'.',''),'-','') = :cpf LIMIT 1"); $stmt->bindParam(":cpf",$cpf); $stmt->execute(); if($stmt->fetchAll()){ $res = 1; }else{ $res = 2; } return $res; } } Será q o fato de não funcionar com o Ajax requisitando em public uma página php, tem haver com a rota? Pois só as Views estão usando Controllers! Ou estou fazendo errado utilizando uma página php na requisição Ajax? ERRO ( ! ) Fatal error: Class 'App\Models\Validacoes' not found in D:\Projetos\SAEE\public\ajax\consultaCPF.php on line 3 Call Stack # Time Memory Function Location 1 0.0010 335304 {main}( ) ..\consultaCPF.php:0
  21. Santos_2015

    Passagem de parâmetros select do tipo multiple

    Boa noite, Estou com um problema ao receber valores de um select do tipo multiple, tenho um select com um subselect, o select recebe todos os parâmetro, já o subselect não,segue consulta: SELECT ... from (select ... where ct.cod_contrato_empresa in($parametros)) as valor ...where ctr.cod_contrato_empresa in($parametros)... meu php $opcoes = $_POST['code_search']; //parâmetros recebido do html (estou passando um array no select code_search[] ). $array = count($opcoes); //pegando a quantidade de parâmetros. $parametros = '?'. str_repeat(',?', $array - 1); //substituindo tudo por '?' Thanks.
  22. Diego Carlos

    CONVERT BINARY

    Boa noite Estou fazendo uma insert no banco de dados salvando duas colunas como binary a principio estou utilizando essa instrução $incluir = $pdo->query("INSERT INTO tbl_rfaccount (id, password, accounttype, email, pin, birthdate) VALUES ((CONVERT(binary(12), '$user')), (CONVERT(binary(12), '$pwd')), '$tipo', '$email', '$pin', '$diac')"); esta salvando este valor => 0x7465737465 Porem quero quero utilizar o prepare, e fiz como prepare porem ele armazena um valor diferente do que o com query $incluir = $pdo->prepare("INSERT INTO tbl_rfaccount (id, password, accounttype, email, pin, birthdate) VALUES ((CONVERT(binary(12), :user)), (CONVERT(binary(12), :pwd)), :tipo, :email, :pin, :diac)"); $incluir->bindValue(':user', $user); $incluir->bindValue(':pwd', $pwd); $incluir->bindValue(':tipo', $tipo); $incluir->bindValue(':email', $email); $incluir->bindValue(':pin', $pin); $incluir->bindValue(':diac', $diac); $incluir->execute(); esta salvando este valor => 0x74006500730074006500 os dois valores inseridos no input era teste, porem eles armazenam diferentes. se alguem puder me ajudar
  23. Carcleo

    Erro na listagem com PDO

    Estou tentando aprender PDO mas estou tendo dificuldades. Tenho 3 arquivos: Planos.php <?php namespace PLANOS; use TABELAS\Tabelas; require_once "Tabelas.php"; class Planos extends Tabelas { public function __construct ($_conexao, $_tabela) { parent::__construct ($_conexao, $_tabela); } } ?> Tabelas.php <?php namespace TABELAS; abstract class Tabelas { private $conexao; private $tabela; private $ultimoCadastrado; public function __construct($_conexao, $_tabela) { $this->conexao = $_conexao; $this->tabela = $_tabela; } public function cadastrar (array $objeto) { $parametros = $valores = ""; foreach ($objeto as $objeto=>$valor): $parametros.= $objeto.","; $valores.= "'".$valor."',"; endforeach; $parametros = substr($parametros,0, -1); $valores = substr($valores,0, -1); $sql = "INSERT INTO ".$this->tabela." (".$parametros.") VALUES (".$valores.")"; $query = $this->conexao->prepare($sql); $execucao = $query->execute(); $this->ultimoCadastrado = $this->conexao->lastInsertId(); return $execucao; } public function ultimoIdCadastrado () { return $this->ultimoCadastrado; } public function editar (array $objeto, $id) { $str = ""; foreach ($objeto as $objeto=>$valor): $str .= $objeto ."='". $valor."',"; endforeach; $str = substr($str, 0, -1); $sql = "UPDATE ".$this->tabela." SET ".$str." WHERE id".ucfirst($this->tabela)."=".$id; $query = $this->conexao->prepare($sql); return $query->execute(); } public function bloquear ($id, $bloqueado) { $sql = "UPDATE ".$this->tabela." SET bloqueado = '".$bloqueado."' WHERE id".$this->tabela." = ".$id; $query = $this->conexao->prepare($sql); return $query->execute(); } public function excluir ($id) { $sql = "DELETE FROM ".$this->tabela." WHERE id".$this->tabela." = ".$id; $query = $this->conexao->prepare($sql); return $query->execute(); } public function listar () { $sql = "SELECT FROM ".$this->tabela; $query = $this->conexao->prepare($sql); $query->execute(); return $query->fetch( PDO::FETCH_ASSOC ); } public function listarId ($id = null) { $sql = "SELECT FROM ".$this->tabela; if ($id != null) $sql .= " WHERE id".ucfirst($this->tabela)."=".$id; $query = $this->conexao->prepare($sql); return $query->execute(); } public function listarParametros ($where) { $sql = "SELECT FROM ".$this->tabela." ".$where; $query = $this->conexao->prepare($sql); return $query->execute(); } } ?> Index.php <?php ini_set("display_errors",true); ini_set("display_startup_erros",1); error_reporting(E_ALL | E_NOTICE | E_STRICT); use PLANOS\Planos; use TABELAS\Tabelas; $conexao = new PDO('mysql:host=localhost;dbname=funeraria2', 'root', 'mysql'); $objeto = array ( "tipo" => 's', "nome" => "Carlos", "login" => "caca", "senha" => "1234", "bloqueado" => "n" ); $objeto2 = array ( "idAdministradores" => 3, "tipo" => 's', "nome" => "Castro", "login" => "abcd", "senha" => "4321", "bloqueado" => "s" ); require_once "Planos.php"; $planos = new Planos($conexao, "administradores"); echo $planos->cadastrar($objeto) ? 1 : 2; echo "<br />"; echo $planos->ultimoIdCadastrado(); echo "<br />"; echo $planos->editar($objeto2, 3) ? 1 : 2; echo "<br />"; echo $planos->bloquear(3, 's') ? 1 : 2; echo "<br />"; echo $planos->excluir(4) ? 1 : 2; echo "<br />"; print "<pre>"; print_r($planos->listar()); print "</pre>"; echo $planos->listar() ? 1 : 2; echo "<br />"; echo $planos->listarId(1) ? 1 : 2; echo "<br />"; echo $planos->listarParametros("WHERE nome = 'Carlos'") ? 1 : 2; echo "<br />"; ?> Quando rodo esse script recebo o erro abaixo: Fatal error: Uncaught Error: Class 'TABELAS\PDO' not found in D:\Trabalhos\host\htdocs\crud\Tabelas.php:102 Stack trace: #0 D:\Trabalhos\host\htdocs\crud\index.php(47): TABELAS\Tabelas->listar() #1 {main} thrown in D:\Trabalhos\host\htdocs\crud\Tabelas.php on line 102 Mas não consigo achar que erro é esse! Engraçado é que só não está fazendo leitura. Mas gravação, exclusão, edição, normal!
  24. Madk

    CRUD PHP OO com cadastro e nivel de acesso

    O CODIGO ESTA NOS COMENTARIOS Alguem poderia me ajudar, como eu posso por login na minha pagina index.php e cadastro na pagina cadastro.php, so que com um nivel de acesso, se a pessoa que logar for adm vai para a pagina indexadm.php, JA TENHO o CRUD feito e queria saber como por essa funcao de login, se puderem me ajudar agradeceria dms.
  25. Omar~

    CRUD Introdução a PDO

    A pouco mais de um ano desde a data dessa postagem venho frequentando aqui o iMasters, e vejo que um vasta soma de dúvidas das pessoas é como conectar acessar, editar etc... dados em um banco sql. Então resolvi criar esse guia uma vez que até o momento não encontrei conteúdo similar aqui para dar uma introdução ao PDO. Voltado para quem está não tem noção alguma sobre pdo e quer fazer a manipulação de tabelas sql. Será um guia bem básico voltado no procedural, pois o alvo não é ensinar a programar e sim introduzir o leitor na PDO. Mas o que é PDO? Extensão orientada a objetos para manipulação de banco de dados P : PHP D : Data O : Object E como saber se meu sistema suporta PDO? Essa extensão foi introduzida no php a partir da versão 5.1, mas é possível saber se a mesma está instalada ou não: Mas o que é CRUD? As 4 operações principais de manipulação de banco de dados C : Create - criar dados R : Read - ler dados U : Update - alterar dados D : Delete - apagar dados Quais programas preciso para seguir esse guia? Primeiramente você deve possuir um sistema apache + SQL ou mariaDB instalado (Sugiro é que busque pelo Xampp) Um navegador de web (Sugiro Mozilla Firefox) Um editor de texto ou IDE (Sugiro o NetBeans IDE só a versão PHP e HTML já é o suficiente para desenvolvimento web) Então vamos botar a mão na maça! Para nosso primeiro passo então vamos criar uma banco de dados e uma tabela para que possa-mos utilizar em nossos testes, uma bem genérica e simples mesmo. Abra um editor de texto aí (sugiro que tenha o notepad++) e crie um novo arquivo assim: tabela.sql, colando o texto abaixo no arquivo. Não se esqueça que o nome do arquivo deve se terminado em .SQL CREATE DATABASE crudpdo DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; -- Cria o banco de dados USE crudpdo; -- Acessa o banco de dados para criar a tabela CREATE TABLE `usuarios` ( `usuario_id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50), `sobre_nome` varchar(50), `login` varchar(50), `senha` text, PRIMARY KEY (`usuario_id`) ); Criado o arquivo abra importe esse arquivo, se você usa o PhpMyAdmim(localhost/phpmyadmim), ao abri-lo procure por um input (IMPORTAR) Feito o processo corretamente você pode perceber que um novo banco de dados apareceu "crudpdo" e dentro dele uma tabela "usuarios", não se preocupe por nossa tabela está vazia iremos povoá-la com o decorrer desse guia. Simples não? Agora que temos nossa tabela, vamos enfim estabelecer a conexão com ela pois para podemos fazer as manipulações temos que conectar. Criamos então algumas variáveis que vão nos ajudar a modificar o acesso de forma mais rápida no futuro caso queiramos fazer isso. $host = '127.0.0.1'; // Endereço do banco de dados (Nosso exemplo é o ambiente local) $db = 'crudpdo'; // Banco de dados que criamos em nosso arquivo SQL $usuario = 'root'; // Nome do usuário de acesso ao banco de dados $senha = ''; // Se você intalou o xampp por exemplo ele possui um usuário global (root) sem senha Vamos lançar um exceção para descobrir se a conexão foi realizada, para isso usaremos o bloco try. E caso houver erro armazenamos o erro na variável $erro try { } catch (PDOException $erro) { echo ('Erro na conexão: ' . $erro->getMessage()); } Então criamos um objeto da PDO esse objeto será $con Nesse objeto instanciamos a classe pdo $con = new PDO($dsn, $user, $pass, $options); Perceba como funciona a PDO: $dsn > Contém as informações do drive que será usado na conexão e o banco de dados usado para conectar $user > Contém a informação do login do usuário que pode acessar a tabela $pass > Contém a informação da senha do usuário $options >Pode comportar uma série de fatores, por isso usamos uma array para definir essa entrada, aqui eu só vou tratar a codificação de caracteres, talvez em um post futuro possa a vim falar sobre silenciar o console, modelador de acesso etc... Veja como fica nossa conexão: E como sabemos se deu certo? Primeiramente se não conseguir conectar nossa exceção será lançada como erro e mostrará os motivos do erro assim como expliquei acima pelo uso do bloco try Mas se quiser-mos depurar usamos isso: var_dump($con); deve aparecer algo parecido a isso se acessarmos o arquivo pelo navegador object(PDO)#1 (0) { } C - Create/INSERT - Certo, certo que tal agora tentar-mos inserir algo em nossa tabela? Vamos?! Já que vamos inserir um registro criaremos uma nova intância da pdo reaproveitando o objeto da conexão $insert = $con->prepare Nesse momento começamos o prepared statements Então devo informa o que é para fazer INSERT INTO > insira dentro de Informo o nome da tabela no nosso exemplo é "usuarios" Informo as colunas da tabela separadas por virgula que no caso é "nome, sobre_nome, login, senha" Passo os valores preparados ":name, :upname, :login, :pass" os nomes devem começar com :"dois-pontos" e serem separados por virgula. É crucial que não erre na ordem, pois esses serão os valores inseridos em ordem com que você definiu as colunas, enquanto ao nomes você pode usar sua criatividade, só não aconselho usar caracteres especiais ou nomes muito longos. Ficando assim minha query $insert = $con->prepare('INSERT INTO usuarios (nome, sobre_nome, login, senha) VALUES (:nome, :upname, :login, :pass)'); Por fim mandamos executar "dando nome aos gados" $insert->execute([ 'nome' => 'Chaves', 'upname' => 'Kiko', 'login' => 'Madruga', 'pass' => 'Florinda' ]); Então pedimos a contagem do registro para saber se tudo ocorreu bem. if ($insert->rowCount()) { echo ('Dados Registrados'); } else { echo ('Nenhum registro inserido'); } Veja como ficou meu arquivo com a conexão e com o insert: Ah!! Mas aí você me pergunta: "Que diacho é isso" toda vez que eu atualizo a página ou acesso o mesmo registro é inserido novamente! Isso já são outros carnavais, aqui nós só estamos vendo a execução, enquanto a validação e checagens fica para a próxima... R - Read/SELECT Já que temos um registro ou mais, não sei quantas vezes você fez nossa brincadeira acima^^, então vamos ler esse(s) registro(s) agora. Para fazer um select fazemos da mesma forma que no insert, a única coisa que você deve ficar atento quando for executar as querys é com o prepared, onde o que você faz é só tirar os valores da execução, passado-os para outra camada mais protegida, o que já nos trás alguma segurança contra injeção de código. Criamos então nosso prepared para leitura $select = $con->prepare("SELECT * FROM usuarios WHERE nome = :username AND login = :userlogin"); Nesse caso estou fazendo um select em todos dos dados da tabela usuarios (SELECT * FROM usuarios) mas eu só quero os resultados que contenham o (nome & login) "Obeserve como é passada a referência da busca" Uma vez com a query preparada executamos passando o statements, através de uma array $select->execute([':username' => 'Chaves', ':userlogin' => 'Madruga']); Veja que os valores buscados são os valores do cadastro, logo então esses dados existem. Agora eu tenho que escolher como eu quero receber esses dados pois eles sempre serão recebidos como array. E como quero essa array? Optei por utilizar uma array associativa por ser de mais fácil entendimento para iniciantes. Apesar que gosto de retornar os valores já em objetos, assim fica mais prático de se reaproveitar. $resultado = $select->fetchAll(PDO::FETCH_ASSOC); Antes de mostrar os resultados eu tenho que saber se realmente existem resultados para mostrar, para basta que mandemos a PDO contar quantos registros ela encontrou usando rowCount() Então dentro dessa condição se existir eu percorro a array e vou exibindo os dados if ($select->rowCount()) { foreach ($resultado as $valores) { echo ("<b>Nome:</b> {$valores['nome']}<br />" . "<b>Sobre-Nome:</b> {$valores['sobre_nome']}<br />" . "<b>Login:</b> {$valores['login']}<br />" . "<b>Senha:</b> {$valores['senha']}"); } } Olha como ficou minha leitura: U - Update/UPDATE Bom agora que já inserimos, e fizemos a leitura vamos ao modificar Então criamos nossa query preparada $update = $con->prepare('UPDATE usuarios SET nome = :username, login = :userlogin WHERE usuario_id = :userid'); Note que só estou a alterar o nome e o login de uma tabela(os dados devem ser separados por virgula) Seguindo após o WHERE eu busco o local para alterar pela coluna usuario_id Passamos o statements $update->execute(['username' => 'Chapolin', 'userlogin' => 'Chiquinha', 'userid' => 1]); Então o usuário que se chamava chaves agora vai ser modificado para Chapolin e seu login que era Madruga vai ser Chiquinha Para saber se foi modificados usamos também o rowCount() Veja como ficou o meu update: D - Delete/DELETE Agora por fim vamos deletar os dados no banco. O mais simples de todo crud Preparamos $delete = $con->prepare('DELETE FROM usuarios WHERE usuario_id = :userid'); Executamos $delete->execute(['userid' => 3]); Hunnn.....? Se eu estou apenas buscando um ID porque criar uma array? Pelo simples fato que assim como nos outros exemplos acima, se você quiser atacar vários registros ao mesmo tempo. Veja como ficou meu delete: Adicionais Se você percebeu, tentei falar e mostrar o mais básico e simples o possível, a PDO de forma peculiar possui diversos métodos e técnicas de acesso e edição de databases, além vários truques de segurança. O ideal é acompanha-lo junto a orientação a objetos. Em todos os exemplos tive que ficar criando a conexão e enchendo o arquivo da mesma coisa repetitivamente. Não seria mais prático ter uma classe só para conectar, daí quando e precisar da conexão é só chamar? A mesma coisa vale para insert, select, update e delete. Não é mais fácil criar uma classe que faz tudo e quando precisar realizar tal coisa consiga em uma única linha porque já está pronto? Veja esse exemplo de uma classe que usa a PDO para fazer select Hora! Mas isso é muito coisa para fazer um simples select! (Todo mundo que não conhece as boas da orientação a objetos pensa assim) Bem essa classe não faz só um simples select, com ela é possível passar qualquer tipo de leitura do banco de forma bem prática. Bem eu fico por aqui, como disse o guia era só um "basicão" para introdução a PDO. espero que tenham apreciado a leitura, e que tenha sido de ajuda isso. Mas se não apreciou nem ajudou fico grato por ter lido. Comentários, criticas... Fiquem a vontade
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.