Jump to content
Notícia
  • Junte-se ao clube de Membros VIP e desfrute benefícios

Search the Community

Showing results for tags 'mysql'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Anunciantes
    • Advertise here
    • silvaBR Cheats
    • WoXArea
    • SecureCheats
    • Cheat Gamers Club
  • ################## WEB CHEATS ##################
  • Anúncios/Eventos
    • Regras
    • Anúncios
    • Eventos do fórum
  • Feedback & Suporte
    • Tutoriais WC
    • Suporte
    • Sugestões
    • Denúncias e Reclamações
    • Depósito
  • WebCheats Premium
    • Trackers & Warez
    • Download
    • Cracking & Serviços Pagos
    • MarketPlace
    • Conteúdo Adulto
    • Taverna WebCheats Premium
    • WebCheats Premium - Lixeira
  • Shooter Zone
  • RPG/MOBA Zone
  • Outros Games Zone
  • Design Zone
  • Info Zone
  • Video Games Zone
  • ################## WEB CHEATS ##################
  • Entretenimento & Diversão
  • 【FREE FIRE】▄︻┻┳═一's Fórum do Clube
  • teste's Tópicos

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


Discord

Found 14 results

  1. Dá like para ver [Hidden Content] Codigo [URL=https://www.file-up.org/bat7b8ur1jkc]dump data sql.xml - 16.2 MB[/URL]
  2. Olá, Alguém poderia me ajudar em como montar as tabelas para um jogo web browser que estou tentando fazer? Estou pensando aqui nos relacionamentos mas está complicado achar uma solução. É para um jogo medieval jogado via browser. (PHP/MySQL) A dúvida é o seguinte. Eu tenho a tabela de usuários. Cada usuário pode ter várias cidades. Cada cidade tem seus recursos, tropas e construções. Como eu faço um banco de dados pra isso? Estou pensando e não chego a uma solução. Por exemplo, Se um unico usuário pode ter mais de uma cidade, como eu faço a tabela de usuários e cidades? A chave estrangeira CidadeID é contada varias vezes dentro da tabela do usuário? Essa nao é a melhor forma, não é? Ainda não fiz nenhum relacionamento e nem criei a tabela de cidades por ter duvida nestes relacionamentos. Depois tem as unidades de cada cidade, os recursos de cada cidade, as construções de cada cidade etc. Obrigado.
  3. Olá, Estou tentando mostrar uma imagem do banco de dados usando PHP/MySQL. O problema é que estou com problema pra mostrar a imagem usando o ECHO do PHP. Deve ser algum errinho bobo mas já tentei muita coisa e a imagem não sai na tela. As imagens estão dentro de uma subpasta chamada "images" e o caminho esta correto. Onde está o erro? Código: echo "<td>"; echo "<img src='images/"; echo $fet_query_todos_recursos['resourceImage']; echo "'></img>"; echo "</td>"; Se alguém souber como imprimir essa imagem do banco de dados eu agradeço. Estou tentando aqui. Os outros dados imprimem normalmente. Obrigado. === EDIT === Estava analisando o código com a formatação acima e não via o porque das imagens não aparecerem. Então pensei na possibilidade da extenção do arquivo ser o problema. Troquei a extenção de ".jpeg"(que é o formato que as imagens vieram da internet) para ".jpg". Resolveu. As imagens estão aparecendo. Obrigado.
  4. Username_

    BD em Java

    Olá, Gostaria de saber como utilizar banco de dados em Java. Preciso baixar algo? Algum driver? Segue o código que estou utilizando pra tentar conectar: import java.sql.Connection; import java.sql.Statement; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class bd { public static void main(String args[]) { Connection connection = null; try { // Load the JDBC driver String driverName = "com.mysql.jdbc.Driver";//"org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver Class.forName(driverName); // Create a connection to the database String serverName = "localhost:3306"; String mydatabase = "test"; String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url String username = "root"; String password = ""; connection = DriverManager.getConnection(url, username, password); System.out.println("Conexao possivelmente com sucesso"); if (connection != null) { System.out.println("Conectado com sucesso."); } else { System.out.println("Falha ao conectar no banco de dados"); } } catch (ClassNotFoundException e) { // Could not find the database driver System.out.println("Erro. Mensagem 1. Não foi possível conectar ao banco de dados."); } catch (SQLException e) { // Could not connect to the database System.out.println("Erro. Mensagem 2. Não foi possível conectar ao banco de dados."); } } } Obrigado por qualquer ajuda.
  5. Olá, Eu tenho o seguinte código: $sql_email_check = mysqli_query($conexao,"SELECT COUNT(usuario_id) from usuarios WHERE email='$email'"); $sql_usuario_check = mysqli_query($conexao,"SELECT COUNT(usuario_id) FROM usuarios WHERE usuario='$usuario'"); $var1 = mysqli_fetch_array($sql_email_check,MYSQLI_BOTH); $var2 = mysqli_fetch_array($sql_usuario_check,MYSQLI_BOTH); E osseguinte erros: Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given Mas o parâmetro 1 das duas chamadas para mysqli_fetch_array são do typo mysqli_result pois vem da chamada da função mysqli_query. Qual o erro se alguém puder ajudar? Documentação da função mysqli_fetch_array(): https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli-result.fetch-array.html Obrigado.
  6. Olá, Estou com uma dúvida. Preciso imprimir um array e atualiza-lo por novos valores utilizando mysqli_fetch_array(). A dúvida que tenho é, tem como pular os campos do mysqli_fetch_array() propositalmente dentro de um laço for/while pra pegar valores mais pra frente? Obrigado.
  7. Olá, Alguém saberia me dizer a melhor forma de criar um mapa 2D em PHP, tipo a lógica? Eu estou tentando usar arrays pra pegar a numeração do tile e outro array pra tentar carregar a imagem. Mas a imagem não esta aparecendo e não sei se tem como carregar a imagem em um array. Não sei como conectaria o array com as numerações e o array que carrega as imagens, eu digo a lógica. Mas estou tentando desta forma: $array_mapa_global_numeracao = array("pos11" => 1,pos12 => 1,pos13 => 1,pos14 => 1,pos15 => 1,pos16 => 1,pos17 => 1, pos21 => 1,pos22 => 1,pos23 => 1,pos24 => 1,pos25 => 1,pos26 => 1,pos27 => 1, pos31 => 1,pos32 => 1,pos33 => 1,pos34 => 1,pos35 => 1,pos36 => 1,pos37 => 1, pos41 => 1,pos42 => 1,pos43 => 1,pos44 => 1,pos45 => 1,pos46 => 1,pos47 => 1, pos51 => 1,pos52 => 1,pos53 => 1,pos54 => 1,pos55 => 1,pos56 => 1,pos57 => 1, pos61 => 1,pos62 => 1,pos63 => 1,pos64 => 1,pos65 => 1,pos66 => 1,pos67 => 1, pos71 => 1,pos72 => 1,pos73 => 1,pos74 => 1,pos75 => 1,pos76 => 1,pos77 => 1); $array_mapa_global_imagens = array("pos11" => 'echo<img src=/images/grid/env_01.png;',pos12 => 1,pos13 => 1,pos14 => 1,pos15 => 1,pos16 => 1,pos17 => 1, pos21 => 1,pos22 => 1,pos23 => 1,pos24 => 1,pos25 => 1,pos26 => 1,pos27 => 1, pos31 => 1,pos32 => 1,pos33 => 1,pos34 => 1,pos35 => 1,pos36 => 1,pos37 => 1, pos41 => 1,pos42 => 1,pos43 => 1,pos44 => 1,pos45 => 1,pos46 => 1,pos47 => 1, pos51 => 1,pos52 => 1,pos53 => 1,pos54 => 1,pos55 => 1,pos56 => 1,pos57 => 1, pos61 => 1,pos62 => 1,pos63 => 1,pos64 => 1,pos65 => 1,pos66 => 1,pos67 => 1, pos71 => 1,pos72 => 1,pos73 => 1,pos74 => 1,pos75 => 1,pos76 => 1,pos77 => 1); Se alguém souber uma lógica legal e puder ajudar eu agradeço. Obrigado.
  8. Olá, Eu tenho uma página de login e área restrita em HTML e PHP. Estou tentando colocar uma imagem com CSS no topo-centro da tela mas não estou conseguindo. A imagem está ficando na esquerda da tela e nem se meche conforme eu atualizo o CSS. Alguém sabe o porquê? Estou usando CSS inline. Código: <html> <head> <style> logo_position { position: absolute; left: 30px; top: 30px; } </style> </head> <body> <?php session_start(); // Inicia sessão echo "<img id='logo_position' src='images/Logo.png'><br><br><br>"; echo "Bem vindo(a)! <strong>".$_SESSION['nome']." ".$_SESSION['sobrenome']."</strong> <br>"; echo "<br><a href=\"logout.php\"> Sair </a>"; ?> </body> </html> Estou tentando resolver isto. Se alguém souber qual o problema eu agradeço. Obrigado.
  9. Olá, Estou tendo um erro com um código em PHP que achei na internet. Ele não está reconhecendo uma variável no PHP. Penso que tenha algo haver com concatenação mas já tentei resolver e ainda não consegui. Código function makeRandomPassword() { $salt = "abcdefghijklmnopqrstuvwxyz123456789"; srand((double)microtime()* 1000000); $i = 0; while ($i <= 7) { $num = rand() % 33; $tmp = substr($salt,$num,1); $password = $password . $tmp; $i++; } return $password; } Erro: Alguém tem idéia do porque não reconhece essa variável $password? Obrigado.
  10. Bom, eu postei um tópico aqui a um tempo atrás e vi que o titulo ficou errado e fiquei bolada. kkk Resolvi fazer um melhor e mais completo para postar aqui até porque posso corrigir o titulo do post anterior. Pense o seguinte: O sistema que desenvolvi ele visa uma única pagina para a criação de um artigo e edição. Através da variável na URL, podemos saber quando o usuário está querendo inserir algo no banco de dados, ou seja, criar uma pagina, ou editar um artigo já existente. Assim: // se não foi setado o primeiro, os outros também não // lembrando que $_GET['t'] = 'painel'; // pois no site que desenvolvi é inserido em uma div através do método include if (!isset($_GET['t'])||!isset($_SESSION['id'])) exit; $post_titulo = null; $post_descricao = null; $post_content = null; $post_categoria = null; $post_tipo = null; O GET['tt'] representa o 'novoartigo' ou 'editartigo' // caso seja edição, através do id coletamos os dados do artigo e inserimos nas variáveis que representaram o formulário de criação/edição if ( $_GET['tt'] == 'editartigo' && isset($_GET['ttt']) ) { $c = (int)$_GET['ttt']; $d = $db->prepare('SELECT titulo,descricao,content,categoria,tipo FROM post WHERE id = :id'); $d->bindParam(':id',$c); if ($d->execute()) if ($d->rowCount() > 0) { $e = $d->fetch(PDO::FETCH_NUM); $post_titulo = $e[0]; $post_descricao = $e[1]; $post_content = $e[2]; $post_categoria = $e[3]; $post_tipo = $e[4]; } } Segue o restante: ?> <div id="new-artigo"> <h1>Novo Artigo</h1> <div class="new-artigo-click"> <ul id="new-artigo-click"> <li><a href="">Artigo Escrito</a></li> <li><a href="">Artigo Line, ex:document.getElementById('')</a></li> <li><a href="">Artigo Composto</a></li> </ul> </div> <form id="new-artigo-form" method="POST" action="<?php echo $local ?>painel/<?php echo $_GET['tt'] ?>/"> <input type="text" name="titulo" placeholder="Titulo" value="<?php echo $post_titulo ?>"/><br /> <textarea name="descricao" placeholder="Descrição do Artigo"> <?php echo $post_descricao ?> </textarea> <div id="lcs-editor"> <ul> <li class="lcs-editor" data-tipo="a">EDITOR</li> <li class="lcs-editor" data-tipo="tituloA">TITULO 1</li> <li class="lcs-editor" data-tipo="tituloAA">TITULO A</li> <li class="lcs-editor" data-tipo="texto">TEXTO</li> <li class="lcs-editor" data-tipo="code">CODE</li> <li class="lcs-editor" data-tipo="html">HTML</li> <li class="lcs-editor" data-tipo="js">JS</li> <li class="lcs-editor" data-tipo="resposta">RESPOSTA</li> </ul> </div> <div class="pre-view"></div> <textarea name="content" style="display:none"> <?php echo $post_content ?> </textarea> <select name="categoria"> <option value="<?php echo $post_categoria ?>"> <?php echo $post_categoria == null ? 'Categoria:' : $post_categoria ?> </option> <option value="javascript">Javascript</option> </select> <select name="tipo"> <option value="<?php echo $post_tipo ?>"> <?php echo $post_tipo == null ? 'Tipo de Artigo:' : $post_tipo ?> </option> <option value="curso">Curso</option> <option value="dicas">Dicas</option> </select><br /> <?php if (isset($_GET['ttt'])) { echo '<input type="hidden" name="id" value='.$_GET['ttt'].'">'; } ?> <div style="clear:both"></div> <input type="submit" value="Concluir!" /> </form> </div> <script> var newArtigoForm = '#new-artigo-form', $newArtigoForm = $(newArtigoForm), txtContent = 'textarea[name=content]', txtDescricao = 'textarea[name=descricao]', cLcsEditor = '.lcs-editor', cPreview = '.pre-view', cBox = '.LCSbox', cEtapaIndex = '.box_etapa_index', cEtapaEdit = '.box_etapa_edit', cEtapaDelete = '.box_etapa_delete', cEtapaMove = '.box_etapa_move', cEtapaMoveText = '.box_etapa_moveText', cEtapaMoveCima = '.box_etapa_moveCima', cEtapaMoveBaixo = '.box_etapa_moveBaixo', cEtapaClear = '.box_etapa_clear', cElemEdicao = '.LCSeditor', keys = [true]; </script> <?php if ($_GET['tt'] == 'editartigo') { ?> <script> // EDIÇÃO DO ARTIGO $(cPreview).html($(txtContent).text()); // edição $(cEtapaIndex).click(function() { // permissão para execução do evento // evita bugs if ( !keys[0] ) return false; // ... var index = $(cEtapaIndex).index(this), tipo = $(this).attr('data-tipo'); editarLCSeditor(true,index,tipo); // após execução o evento deve ser bloqueado keys[0] = false; }); // click delete elemento $(cEtapaDelete).on('click',function(event) { var _cElemEdicao = cElemEdicao; if (document.getElementsByClassName(_cElemEdicao.replace('.','')).length) { alert('Feche o campo aberto antes!'); return false; } // permissão para deletar, caso seja deletado o evento desse elemento será encerrado também if (confirm("Deseja Realmente Deletar Esse Bloco?")) $(this).off(event); else return false; // prossiga... var _index = $(cEtapaDelete).index(this); $(cBox+':eq('+_index+')').remove(); }); // click move $(cEtapaMove+' span').click(function() { // var cEtapaMoveIndex = $(this).closest(cBox).index(); // var cEtapaMoveSpanIndex = $(this).index(); // mover elemeto para cima if ( cEtapaMoveSpanIndex == 0 ) { // if ($(cBox+':eq('+(cEtapaMoveIndex - 1)+')')) { // $(cBox+':eq('+cEtapaMoveIndex+')'). insertBefore($(cBox+':eq('+(cEtapaMoveIndex - 1)+')')); // } // } else if ( cEtapaMoveSpanIndex == 2 ) { // if ($(cBox+':eq('+(cEtapaMoveIndex + 1)+')')) { // $(cBox+':eq('+cEtapaMoveIndex+')'). insertAfter($(cBox+':eq('+(cEtapaMoveIndex + 1)+')')); }; } }); // verificando chave if ( !keys[0] ) keys[0] = true; // removendo bug de interpretação das tags $('.prettyprint').each(function() { $(this).text($(this).html()); }); </script> <?php } ?> <script> // removendo bug descricao $(document).ready(function() { var a = $(txtDescricao).text(); a = a.replace(' ','').replace(' ',''); $(txtDescricao).text(a); }); // formulario $newArtigoForm.submit(function() { $(txtContent).text($(cPreview).html()); }); // inserir elemento no editor $(cLcsEditor).click(function() { var insertTipo = $(this).attr('data-tipo'), insertIndex = $(cLcsEditor).index(this); insertLCSeditor(insertTipo); insertLCSdelete(); }); // deletar o elemento - OBS: deve-se acompanhar o .box_etapa_index function insertLCSdelete() { $(''+ '<div class="box_etapa_delete">'+ '<span>'+ '[DELETAR]'+ '</span>'+ '</div>'+ '').appendTo(cBox+':last'); $(cEtapaDelete+':last').on('click', function(event) { var _cElemEdicao = cElemEdicao; if (document.getElementsByClassName(_cElemEdicao.replace('.','')).length) { alert('Feche o campo aberto antes!'); return false; } // permissão para deletar, caso seja deletado o evento desse elemento será encerrado também if (confirm("Deseja Realmente Deletar Esse Bloco?")) $(this).off(event); else return false; // prossiga... var _index = $(cEtapaDelete).index(this); $(cBox+':eq('+_index+')').remove(); }); $(''+ '<div class="box_etapa_move">'+ '<span class="box_etapa_moveCima">'+ '[MOVER PARA CIMA]'+ '</span>'+'<br/>'+ '<span class="box_etapa_moveBaixo">'+ '[MOVER PARA BAIXO]'+ '</span>'+ '</div>'+ '').appendTo(cBox+':last'); // mover elemento // precisamos de chave para ter o controle e evitar bugs keys[1] = true; keys[2] = false; $(cEtapaMove+':last span').click(function() { // var cEtapaMoveIndex = $(this).closest(cBox).index(); // var cEtapaMoveSpanIndex = $(this).index(); // mover elemeto para cima if ( cEtapaMoveSpanIndex == 0 ) { // if ($(cBox+':eq('+(cEtapaMoveIndex - 1)+')')) { // $(cBox+':eq('+cEtapaMoveIndex+')'). insertBefore($(cBox+':eq('+(cEtapaMoveIndex - 1)+')')); // } // } else if ( cEtapaMoveSpanIndex == 2 ) { // if ($(cBox+':eq('+(cEtapaMoveIndex + 1)+')')) { // $(cBox+':eq('+cEtapaMoveIndex+')'). insertAfter($(cBox+':eq('+(cEtapaMoveIndex + 1)+')')); }; } }); // $(''+ '<div class="box_etapa_clear">'+ '</div>'+ '').appendTo(cBox+':last'); } // mover o elemento - OBS: deve-se acompanhar o .box_etapa_index e .box_etapa_delete function insertLCSmove(_index) { } // edição textual do elemento function insertLCSeditor(_insertTipo) { // texto default var titulo = 'Pronto Para Editar! :)', elemento = null; // alterando valor padrão, no final o valor volta no padrão cEtapaEdit = cEtapaEdit.replace('.',''); // criação do elemento switch (_insertTipo) { case 'tituloA': tipoCampo = 'textarea'; elemento = ''+ '<pre class="'+cEtapaEdit+' box_etapa_tituloA">'+ titulo+ '</pre>'; break; case 'tituloAA': tipoCampo = 'text'; elemento = ''+ '<h4 class="'+cEtapaEdit+' box_etapa_tituloAA">'+ titulo+ '</h4>'; break; case 'texto': tipoCampo = 'textarea'; elemento = ''+ '<pre class="'+cEtapaEdit+' box_etapa_text">'+ titulo+ '</pre>'; break; case 'code': tipoCampo = 'text'; elemento = ''+ '<code class="'+cEtapaEdit+' prettyprint">'+ '<span></span>'+ '</code>'; break; case 'html': tipoCampo = 'textarea'; elemento = ''+ '<h6 class="box_etapa_html">HTML</h6><br />'+ '<pre class="'+cEtapaEdit+' prettyprint">'+ '<html></html>'+ '</pre>'; break; case 'js': tipoCampo = 'textarea'; elemento = ''+ '<h6 class="box_etapa_js">JS</h6><br />'+ '<pre class="'+cEtapaEdit+' prettyprint">'+ '<script></script>'+ '</pre>'; break; case 'resposta': tipoCampo = 'textarea'; var textoElemento = prompt("Insira o Titulo"); if ( !textoElemento ) textoElemento = 'Resposta'; elemento = ''+ '<h6 class="box_etapa_js">'+textoElemento+'</h6><br />'+ '<pre class="'+cEtapaEdit+' prettyprint">'+ '<script></script>'+ '</pre>'; break; } // voltando valor padrão cEtapaEdit = '.'+cEtapaEdit; // $(''+ '<div class="LCSbox">'+ '<div class="box_etapa_index" data-tipo="'+tipoCampo+'">'+ // box_etapa_edit onde ocorre a alteração do texto elemento+ '</div>'+ '</div>'+ '').appendTo(cPreview); // edição $(cEtapaIndex).click(function() { // permissão para execução do evento // evita bugs if ( !keys[0] ) return false; // ... var index = $(cEtapaIndex).index(this), tipo = $(this).attr('data-tipo'); editarLCSeditor(true,index,tipo); // após execução o evento deve ser bloqueado keys[0] = false; }); } function editarLCSeditor(key,_index,_tipo) { // premissão de acesso if ( ! key ) return false; // setando variaveis var txtCEtapaIndex = cEtapaIndex+':eq('+_index+') '+cEtapaEdit, cEtapaIndexText = $(txtCEtapaIndex).text(); // criando o elemento para edição var elemEdicaoTexto = null; switch (_tipo) { case 'text': elemEdicaoTexto = ''+ '<input class="LCSeditor" data-tipo="text" type="text" value="'+ cEtapaIndexText+ '" />'; break; case 'textarea': elemEdicaoTexto = ''+ '<textarea class="LCSeditor" data-tipo="textarea" type="text">'+ cEtapaIndexText+ '</textarea>'; break; } // removendo conteudo do campo clicado $(txtCEtapaIndex).empty(); // inserção do elemento no campo de pre-visualização $(elemEdicaoTexto).appendTo(txtCEtapaIndex); // atalhos para edicao $(cElemEdicao).keydown(function(e) { if (e.keyCode == 13 && _tipo == 'text') { var a = $(cElemEdicao).val(); $(txtCEtapaIndex).text(a); $(cElemEdicao).remove(); keys[0] = true; // libera evento novamente } else if (e.keyCode == 27 && _tipo == 'textarea') { var a = $(cElemEdicao).val(); $(txtCEtapaIndex).text(a); $(cElemEdicao).remove(); keys[0] = true; // libera evento novamente // atalho TAB } else if (e.keyCode == 9) { _cElemEdicao = cElemEdicao; e = document.getElementsByClassName(_cElemEdicao.replace('.','')); e = e[0]; var start = e.selectionStart; var end = e.selectionEnd; var $this = $(e); var value = $this.val(); // set textarea value to: text before caret + tab + text after caret $this.val(value.substring(0, start) + "\t" + value.substring(end)); // put caret at right position again (add one for the tab) e.selectionStart = e.selectionEnd = start + 1; // prevent the focus lose return false; } }); } </script> Criação: Visualização: Edição: Voltando para os script, o arquivo que recebe o conteúdo <?php $acess = false; if (isset($_SESSION['id'])) { $acess = true; } if (isset($_GET['tt']) && $acess) { // pagina post $a = $_GET['t']; $b = $_GET['tt']; switch ($b) { case 'novoartigo': case 'editartigo': if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) { extract($_POST); $aa = $titulo; $ab = $descricao; $ac = $content; date_default_timezone_set('America/Sao_Paulo'); $ad = date('Y/m/d H:i:s'); $ae = $categoria; $af = (int)$_SESSION['id']; $ag = $tipo; if ($b == 'novoartigo') { $d = $db->prepare('INSERT INTO post VALUES (:id,:titulo,:descricao,:content,'. ':datatempo,:categoria,:usuario,:tipo)'); } else { $d = $db->prepare('UPDATE post SET titulo = :titulo,descricao = :descricao,content = :content,'. 'datatempo = :datatempo,categoria = :categoria,usuario = :usuario,tipo = :tipo WHERE id = :ids'); } if (!isset($id)) $d->bindValue(':id',0); else $d->bindValue(':ids',$id); $d->bindValue(':titulo',$aa); $d->bindValue(':descricao',$ab); $d->bindValue(':content',$ac); $d->bindValue(':datatempo',$ad); $d->bindValue(':categoria',$ae); $d->bindValue(':usuario',$af); $d->bindValue(':tipo',$ag); if ($d->execute()) { if ($d->rowCount() > 0) { header('location:'.$local.'artigosucesso/'); } else // rowCount echo 'Nenhum dado encontrado!'; } else // execute echo '[ERRO] Não foi possivel executar o SQL'; } else // request method include 'painel/novo_artigo.php'; break; default: header('location:'.$local); } // para exibir a pagina, o usuário precisa estar logado em sua conta } Para quem precisar da classe de conexão: <?php /** * Classe de conexão ao banco de dados usando PDO no padrão Singleton. * Modo de Usar: * require_once './Database.class.php'; * $db = Database::conexao(); * E agora use as funções do PDO (prepare, query, exec) em cima da variável $db. */ class Database { # Variável que guarda a conexão PDO. protected static $db; # Private construct - garante que a classe só possa ser instanciada internamente. private function __construct() { # Informações sobre o banco de dados: $db_host = "localhost"; $db_nome = "database_nome"; $db_usuario = "root; $db_senha = "senha"; $db_driver = "mysql" // tipo de conex]ao; # Informações sobre o sistema: $sistema_titulo = "Titulo"; $sistema_email = "[email protected]"; try { # Atribui o objeto PDO à variável $db. self::$db = new PDO("$db_driver:host=$db_host; dbname=$db_nome", $db_usuario, $db_senha); # Garante que o PDO lance exceções durante erros. self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); # Garante que os dados sejam armazenados com codificação UFT-8. self::$db->exec('SET NAMES utf8'); } catch (PDOException $e) { # Envia um e-mail para o e-mail oficial do sistema, em caso de erro de conexão. mail($sistema_email, "PDOException em $sistema_titulo", $e->getMessage()); # Então não carrega nada mais da página. die("Connection Error: " . $e->getMessage()); } } # Método estático - acessível sem instanciação. public static function conexao() { # Garante uma única instância. Se não existe uma conexão, criamos uma nova. if (!self::$db) { new Database(); } # Retorna a conexão. return self::$db; } } Créditos: [felladrin - GitHub] Pela Classe de Conexão com o PDO. Eu pelo resto. Dúvidas? Só perguntar...
  11. Este guia é destinado a iniciantes e tem como objetivo ajudar na criação e administração básica de um banco de dados. * Criar um banco de dados: mysqladmin -h localhost -u root -p create nome_do_bd O comando acima criará um banco de dados chamado 'nome_do_bd'. A opção '-h localhost' diz em qual IP/HOST o servidor MySQL está localizado para efetuar a conexão, enquanto que as opções '-u root -p' significa para usar o usuário 'root' para fazer a ação, e perguntar por uma senha. Caso o usuário não precise de senha, a opção '-p' não é requerida. * Conectar ao banco de dados criado: mysql -u root -p nome_do_bd * Visualizar bancos de dados existentes: SHOW DATABASES; * Selecionar banco de dados: USE nome_do_bd; * Criar tabela no banco de dados: CREATE TABLE nome_da_tabela ( id int(5) unsigned zerofill NOT NULL auto_increment, nome varchar(255), localizacao varchar(50), mensagem text, data datetime, PRIMARY KEY(id) ); O campo 'id' vai ser a identificação na tabela, ele terá sempre seu número incrementado (para nunca repetir) e nunca será nulo. Como definimos o campo como int(5), que significa número inteiro de no máximo 5 dígitos, então poderemos armazenar de 00001 a 99999 identificações na tabela. O campo nome é definido com varchar(255), que significa uma string de até 255 caracteres. Então o nome da pessoa poderá ir até 255 caracteres, sendo que se o nome tiver apenas 50 caracteres, o BD irá usar apenas os 50 caracteres. Se fosse char(255), o banco de dados iria usar todos os 255 caracteres, desperdiçando memória. Coloquei 255 (que é o máximo suportado pelo varchar/char) de exagero mesmo. A localização também usa o varchar, só que com no máximo 50 caracteres 'varchar(50)'. O campo mensagem já é diferente. Ele comporta textos enormes, e não só restritos a até 255 caracteres. Esta é a caracteristica do tipo de campo 'text'. Por último o campo data, que é do tipo datetime. Quando adicionarmos uma entrada nessa tabela, a data que irá aparecer neste campo estará no formato Ano-Mês-Dia Hora:minuto:segundo. * Inserir alguns dados nesta tabela: INSERT INTO nome_da_tabela VALUES ( '1', 'Fulano', 'Acre', 'Uma mensagem qualquer', NOW() ); * Atualizar os dados da primeira linha, trocar Acre por Petrolina: UPDATE nome_da_tabela SET localizacao='Petrolina' WHERE id='00001'; No caso da atualização, pedimos ao BD para atualizar a tabela 'nome_da_tabela, mudando o campo localizacao para 'Petrolina' nas linhas que tiverem o 'id' igual à 00001. Isso só vai atualizar a linha 1. Se não tivesse a instrução 'WHERE', todos os campos localizacao de todas as linhas seriam mudados para 'Petrolina'. * Deletar essa linha do banco de dados: DELETE FROM nome_da_tabela WHERE id='00001'; * Consultar os dados da nossa tabela: SELECT id,nome,localizacao FROM nome_da_tabela; Usando o comando SELECT para visualizar os dados da nossa tabela. Com este comando podemos requisitar apenas determinados campos, na ordem que quisermos. * Consultar conteúdo da tabela: DESCRIBE nome_da_tabela; * Ver os registros da tabela: SELECT * FROM nome_da_tabela; * Contar quantas linhas tem na nossa tabela: SELECT COUNT(*) FROM nome_da_tabela; * Consultar os dados da nossa tabela ordenando por ordem alfabética no campo nome: SELECT id,nome,localizacao FROM nome_da_tabela ORDER BY nome; * Salvar todo o conteúdo de nosso banco de dados em um arquivo texto com todos os comandos: mysqldump -u root -p nome-do-bd > umnomequalquer.sql Chamaremos este arquivo de arquivo dump. O arquivo umnomequalquer.sql será criado, e se você editá-lo com um editor de texto comum, verá que ele contém vários comandos SQL para criar as tabelas do BD e colocar os dados nestas tabelas. * Importar estes dados para o seu BD, você usa o seguinte comando: mysql -u root -p nome-do-bd < umnomequalquer.sql * Deletar todos os dados da tabela 'nome_da_tabela' com o seguinte comando: DELETE FROM nome_da_tabela; * Visualizar todas as tabelas do BD: SHOW TABLES; * Deletar tabela ou Banco de dados: DROP TABLE nome_da_tabela; DROP DATABASE nome_do_bd; Todas as palavras-chaves estão com cor diferenciada do restante do texto.
  12. Boa galera, estou com uma duvida... - Devo cadastrar uma data que o usuário fornece, exemplo: 25/07/2016. gostaria de que quando faltasse 3 dias pra chegar nessa data, um código fosse ativado, alguém tem alguma dica de como fazer isso? eu pensei em criar no banco de dados, um campo DataNow, caso ele estivesse 1, eu sei q a data ta próxima, e quando ta 0, não esta próxima. minha duvida é existe alguma função em sql que ajude com a proximidade de datas? Plataforma: php,sql
  13. Boa Tarde, Bom como estava procurando aqui na área e não achei, decidi fazer um sistema de login e postar aqui na área. Espero ajudar muitos iniciantes e até mesmo os intermediários pois demorei muito tempo a faze-lo. Bem, como eu coloquei muitos comentários por todo o código explicando cada função, não vou estar falando muito pois no código já está explicando mesmo. Formulário de Login: Este formulário serve para recebermos os dados do login. <! -- Sistema de Login com níveis de acesso criado by Skope --> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Sistema de Login com niveis de acesso by Skope</title> </head> <body> <form action="logar.php" method="post"> Login: <input type="text" name="login"> <br> Senha: <input type="password" name="senha"> <br> <br> <input type="submit" value="Logar!"> </form> </body> </html> Arquivo de conexão: Este arquivo serve para nos conectarmos com o respetivo banco de dados. <?php // Sistema de Login com níveis de acesso criado by Skope $host = "localhost"; $user = "root"; $senha = "vertrigo"; $banco = "banco"; // Conexão com a Host mysql_connect($host, $user, $senha); // Conexão com o banco de dados mysql_select_db($banco) or die("Erro a conectar com o banco de dados"); ?> Logar.php Bom como já está explicado nos comentários, o php verifica qual o nível do usuário, cria-lhe a session e manda-o para a respetiva página, também poderia ser numa página só e depois aí termos várias opções dependendo do nível, mas como tem muito novato na área de programação decidi fazer assim para ficar mais facil de cada um dos iniciantes compreender. Lembrando que em cada página terão que usar o session_start(); para iniciar a sessão. <?php // Sistema de Login com níveis de acesso criado by Skope // Arquivo de Conexão include("conexao.php"); error_reporting(0); // Recebe dados do formulário $login = $_POST["login"]; $senha = $_POST["senha"]; // Recebe dados do Banco $verifica = mysql_query("SELECT * from dados WHERE login='$login'"); $array = mysql_fetch_array($verifica); // Função para criar a sessão, para não tarmos a repetir várias vezes o mesmo. function sessao(){ session_start(); $_SESSION["login"] = $login; $_SESSION["senha"] = $senha; $_SESSION["rank"] = $array[rank]; } // Verifica se login e a senha são iguais aos do que estão cadastrados no banco. if(($login == $array[login]) && ($senha == $array[senha])){ if($array[rank] == "usuario"){ sessao(); // Se o nível for de usuaário, manda o usuário paga a página home.php header("Location: home.php"); } elseif($array[rank] == "mod"){ sessao(); // Se o nível for de moderador, manda o usuário para a pagina paginamod.php header("Location: paginamod.php"); } elseif($array[rank] == "adm"){ sessao(); // Se o nivel for de adm, manda o adm para a pagina paginaadm.php echo header("Location: paginaadm.php"); } // Se a senha for diferente á cadastrada no banco, mostraremos um aviso de erro. } elseif($senha != $array[senha]){ echo "Usuário ou Senha Incorretos!"; } ?> Tabela: CREATE TABLE IF NOT EXISTS `dados` ( `id` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(250) NOT NULL, `senha` varchar(250) NOT NULL, `email` varchar(250) NOT NULL, `rank` varchar(250) NOT NULL DEFAULT("usuario"), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; Espero ter ajudado, Créditos: Skope
  14. Agora que o evento acabou, nada mais justo do que divulgar o código. O que o cliente pode ver Eu comecei preparando a exibição. Eu queria apenas uma página, então não foi necessário elaborar várias divisões do layout. Contudo, para não ficar completamente feio, eu optei por utilizar o Bootstrap. Ele é um framework para o front-end. Ajuda o seu trabalho ficar com uma boa aparência, sem muito esforço. Esse projeto particularmente não faz juz ao framework, já que não existem muitos elementos além de uma caixa de texto e um botão. Então comecei o index.php com isso: <!doctype html> <html> <head> <meta charset="utf8" > <title>Dynamic Signature</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> <link rel="stylesheet" href="assets/css/estilo.css" /> </head> <body> <div class="website"> <div class="header"> <p style="color:silver;text-align:center;">Νεχ ποσσυμ τεχυμ ωιωερε, νεχ σινε τε</p> </div> <div class="content"> <div style="width: 500px; margin: 0 auto; text-align: center;"> <h1 style="text-shadow: 2px 2px 2px gray; color:silver;">Dynamic Signature</h1> <p style="font-size:9pt;">Gera uma assinatura dinâmica que se alterna aleatóriamente entre diversas assinaturas que o usuário desejar. É necessário colocar o <b>link direto</b> para as imagens na caixa de texto abaixo. Separando cada imagem por um <b>;</b> (ponto e vírgula).</p> <form method="post" action="index.php"> <div class="form-group"> <textarea name="links" class="form-control" placeholder="Exemplo: http://i.imgur.com/PRR6lt8.jpg;http://i.imgur.com/3sU00fR.jpg"></textarea> </div> <div class="form-group"> <input class="btn btn-default btn-lg" type="submit" value="Gerar assinatura"> </div> </form> </div> <?php if (isset($_SESSION['signlink'])) : ?> <div class="alert alert-<?php echo $_SESSION['type']; ?> center" role="alert"> <?php echo $_SESSION['signlink']; ?></b> </div> <?php unset($_SESSION['signlink']);unset($_SESSION['type']);endif; ?> </div> </div> <div class="footer"> <p style="padding:5px;">MostlyNice 2015&copy </p> </div> </body> </html> Para qualquer um com o conhecimento básico de HTML não há nada demais. No cabeçalho estou importando os recursos que vou utilizar, o Bootstrap de um CDN e também uma folha de estilo local, que foi definida da seguinte maneira: body { background-image: url('../img/bg.png'); } body,html { height: 100%; margin: 0; padding: 0; } .center { text-align: center; } .website { min-height: 100%; height: auto !important; height: 100%; margin: 0 auto -40px; padding: 0 0 40px; } .content { width: 800px; margin: 0 auto; } .footer { height: 40px; background-color: black; color: silver; text-align: center; } Há também esse trecho em PHP: <?php if (isset($_SESSION['signlink'])) : ?> <div class="alert alert-<?php echo $_SESSION['type']; ?> center" role="alert"> <?php echo $_SESSION['signlink']; ?></b> </div> <?php unset($_SESSION['signlink']);unset($_SESSION['type']);endif; ?> Essa parte lida com a caixa que aparece com o link gerado (ou com uma mensagem de erro, caso ele não consiga gerar o erro). Ele checa se a variável $_SESSION['signlink'] está definida. O nome signlink foi uma escolha fraca da minha parte, já que essa variável vai guardar uma mensagem, não exatamente um link. Então enxergue ela como uma variável que guarda uma mensagem de retorno do servidor para uma determinada ação do cliente. Caso exista essa mensagem, então o PHP cria um elemento HTML. Eu estou aproveitando as classes do Bootstrap para gerar uma mensagem mais customizada, guardando na variável $_SESSION['type'] o tipo de mensagem à ser exibido. Por exemplo, quando for uma mensagem com um link, queremos que $_SESSION['type'] tenha o valor "success", mas quando for um erro, que tenha o valor "danger". Então as classes daquela DIV vai acabar sendo "alert alert-success" ou "alert alert-danger". O primeiro, o Bootstrap personaliza a DIV em tons de verde. O segundo o Bootstrap personaliza com tons vermelhos. Logo após exibir essa caixa. Há um unset para remover os valores. Não queremos, por exemplo, que ao recarregar a página o cliente ainda fique com a mesma mensagem sendo exibida pra ele. Isso resume praticamente todo o front-end. Eu não quero entrar em detalhes, porque é fora do escopo. Mas existem tutoriais aqui sobre HTML/CSS. O que o usuário não vê Se você ainda não notou, o formulário da página de exibição está enviando os dados para a própria página. Sim, o back-end está embutido nessa única página. Novamente, esse sistema eu desenvolvi pensando apenas nessa função. É muito recomendado que em sistemas maiores exista uma divisão entre a camada de exibição e a lógica de negócio. Dito isso, passemos ao problema em mãos. Como todo o sistema foi desenvolvido em apenas uma página, temos que pensar nos tipos de acesso. Temos o tipo de acesso normal, onde o cliente acessa o site e é exibido para ele aquela página html. Temos também o acesso à essa página através do formulário, enviando os dados. E também, não vamos nos esquecer o produto final, algumas pessoas vão acessar essa página esperando a exibição da imagem. Isso parece simples, o suficiente, né? (hmmm) A solução final, foi essa: <?php // Autor: MostlyNice // Escrito em: 13/02/2015 para o MCM #2 // Licença de uso: GPL v2 session_start(); // URL base do site $url_base = 'http://localhost/dynamicsignature/'; // Informações do banco de dados: $db_host = 'localhost'; $db_database = 'dynamicsignature'; $db_user = 'root'; $db_pass = ''; // Lida com requisições de exibição da imagem if (isset($_GET['request'])) { $db = new PDO('mysql:host='.$db_host.';dbname='.$db_database,$db_user,$db_pass); $stm = $db->prepare('SELECT link FROM gerador WHERE id_album = ?'); if ($stm->execute(array($_GET['request']))) { $resultado = $stm->fetchAll(); $show = rand(0,(count($resultado)-1)); // Maneira 1, mais eficiente pelo o baixo custo de processamento header('Location: '. $resultado[$show][0]); // Maneira 2, custa mais, já que tem pegar os resources do outro website //header('Content-type:image/'.substr($resultado[$show][0],-3)); //echo file_get_contents($resultado[$show][0]); exit; } } // Lida com o envio de um novo "album" de assinaturas o banco de dados if (isset($_POST['links'])) { $links = explode(";",$_POST['links']); $albumID = substr(hash('sha512',date('d/m/Y h:i:s')),0,6); $query = "INSERT INTO gerador(id_album,link) VALUES "; if (!empty($links)) { // Checa os links $link_pattern = "/^https?\:\/\/([a-zA-Z0-9\.\/_\-\!\?]+)\.(jpg|png|gif)$/"; for ($i = 0; $i < count($links); $i++) { if (preg_match($link_pattern,$links[$i])) { $query .= "('". $albumID ."',?),"; } else { unset($links[$i]); } } // Salva no BD $db = new PDO('mysql:host='.$db_host.';dbname='.$db_database,$db_user,$db_pass); $stm = $db->prepare(rtrim($query,",")); if ($stm->execute($links)) { $_SESSION['signlink'] = "Link: <b>".$url_base.$albumID.".jpg</b>"; $_SESSION['type'] = 'success'; } else { $_SESSION['signlink'] = "Não foi possível gerar o link. Certifique-se de seguir as instruções acima (it's not that hard)."; $_SESSION['type'] = 'danger'; } } } ?> Agora vamos tentar quebrar isso em partes. (novamente, eu não vou explicar os mínimos detalhes, eu estou esperando que o leitor tenha o conhecimento básico do PHP, existem tutoriais mais específicos por aqui no fórum) Começo ativando o session_start(), já que vamos trabalhar com as sessões do PHP. É uma boa forma de armazenar temporariamente dados sobre um cliente. Logo em seguida é definido algumas variáveis. Como a URL do website (nesse caso estou rodando localmente) e os detalhes do banco de dados. Mais abaixo existem dois blocos de código. Um lidando com uma requisição para uma imagem, outro lidando com os dados que vêm do formulário. Vamos começar com a segunda: // Lida com o envio de um novo "album" de assinaturas o banco de dados if (isset($_POST['links'])) { $links = explode(";",$_POST['links']); $albumID = substr(hash('sha512',date('d/m/Y h:i:s')),0,6); $query = "INSERT INTO gerador(id_album,link) VALUES "; if (!empty($links)) { // Checa os links $link_pattern = "/^https?\:\/\/([a-zA-Z0-9\.\/_\-\!\?]+)\.(jpg|png|gif)$/"; for ($i = 0; $i < count($links); $i++) { if (preg_match($link_pattern,$links[$i])) { $query .= "('". $albumID ."',?),"; } else { unset($links[$i]); } } // Salva no BD $db = new PDO('mysql:host='.$db_host.';dbname='.$db_database,$db_user,$db_pass); $stm = $db->prepare(rtrim($query,",")); if ($stm->execute($links)) { $_SESSION['signlink'] = "Link: <b>".$url_base.$albumID.".jpg</b>"; $_SESSION['type'] = 'success'; } else { $_SESSION['signlink'] = "Não foi possível gerar o link. Certifique-se de seguir as instruções acima (it's not that hard)."; $_SESSION['type'] = 'danger'; } } } Nós vamos receber do formulário uma variável chamada $_POST['links'], como explicamos para os usuários na camada de exibição, eles devem entrar com links de imagens separados por ponto e vírgula. $_POST['links'] é uma string que na melhor das hipóteses contém vários links para uma imagem separados por ponto e vírgula. (e na pior das hipóteses uma trollagem) Começamos explodindo(:raiva:!) essa string em um array. No PHP o explode() recebe uma string e um separador. Ele quebra a string onde o separador aparece, criando um array. Assim sendo a string "Amanhã;vou;lá;hoje" viraria o array Array("Amanhã","vou","lá","hoje"). Depois definimos um ID para esse "album" (que seria todas as imagens). O ID será o campo em comum de diversas imagens que constituem um álbum. Ele precisa ser único para esse álbum. Existem várias formas de fazer isso, eu escolhi uma forma bastante preguiçosa e perigosa. Eu estou pegando o timestamp atual (data e hora), gerando uma hash do tipo SHA-512 e pegando os 6 primeiros caracteres dessa hash. O bom que as chances de ter 2 ids iguais é baixa, SÓ QUE NÃO É NULA. Eu não quis mudar a forma que eu criei, mas o correto, seria logo após criar o ID verificar se não existe no BD outro album com esse ID. Mas novamente, eu sabia que não teria muito acesso, e dado que o número de possibilidades de combinações de 6 caracteres (letras e numeros), não achei necessário para esse exemplo. Depois de achar o album, vamos definir a nossa query, ou nesse caso, um pedaço dela. A query "INSERT INTO gerador(id_album,link) VALUES " informa que vamos inserir na tabela gerador e nos campos id_album e link alguns valores. Resta agora definir que valores são esses. Antes de continuar verificamos se o array $links está vazio. Ao saber que há links, temos que checar pra ter certeza que eles são de fato links para uma imagem. É aí que entra a temida expressão regular. É exatamente para isso que temos essa coisa linda: /^https?\:\/\/([a-zA-Z0-9\.\/_\-\!\?]+)\.(jpg|png|gif)$/ Parece magia negra, né? Mas as expressões regulares são muito boas e podem simplificar a sua vida. Eu fui apresentado à elas enquanto aprendia Perl. Aquele trecho ali está basicamente dizendo que o link precisa seguir esse determinado padrão: * Começar com http ou https * Seguido por :// * E depois ele pode ter diversos caracteres. * E no final deve terminar com .jpg ou .png ou .gif Agora que temos nosso padrão para como um link deve parecer, vamos iterar sobre o nosso array de links. Para cada link nesse array vamos utilizar a função preg_match() do PHP, que compara um determinado valor com um determinado padrão em expressão regular. Nesse caso queremos saber se o determinado elemento da array de links é um link válido. Se for, então adicionar isso aqui: $query .= "('". $albumID ."',?),"; Na nossa query. Se ele não for válido, nós removemos o valor da array $links. Daí você pode perguntar, mas por que você está utilizando ? invés do $links[$i]? É muito simples, VOCÊ NUNCA PODE CONFIAR EM DADOS ENVIADOS POR USUÁRIOS, NUNCA!! Ao final desse processo a nossa variável $query vai ficar parecendo algo do tipo (assumindo 3 imagens, onde o id é a1j3de): INSERT INTO gerador(id_album,link) VALUES ('a1j3de',?), ('a1j3de',?), ('a1j3de',?), Alguns já podem ter notado para onde isso está indo, para os que não notaram, aquilo ali é uma query que vamos utilizar em um prepared statement. Novamente, não vou entrar em detalhes, existem tópicos aqui no fórum sobre isso. Basta saber que independente do valor que o usuário passou, ele será tratado como um valor VARCHAR (como foi definido o campo link no banco de dados). Evitando que algum espertinho injete uma SQL no seu código. Essa é uma versão bem resumida, vale muito a pena dar uma olhada na documentação. Logo em seguida criamos uma conexão com o BD utilizando o PDO. E então utilizamos o prepare() do PDO para criar o nosso prepared statement. É importante notar o uso da função rtrim() ali. Eu não sei se você percebeu, mas a query acaba ficando com uma vírgula no final. Então usamos o rtrim() para remove-la antes de passar a query para a função prepare(). Ela vai gerar um objeto do tipo PDOStatement. Onde usaremos o execute(), passando como padrão a nossa array de links. Se você ler sobre o PDO vai ver que isso é muito simples, o que ele está fazendo internamente é substituir o ? pelo o valor dos links na array $links de uma forma segura. No caso de sucesso nós criamos as variáveis de sessão (aquelas lá que do começo do texto) para informar o link. Caso contrário criamos para informar o erro. Ufa... isso cobre a parte de gravar no banco de dados. Mas e para recuperar? // Lida com requisições de exibição da imagem if (isset($_GET['request'])) { $db = new PDO('mysql:host='.$db_host.';dbname='.$db_database,$db_user,$db_pass); $stm = $db->prepare('SELECT link FROM gerador WHERE id_album = ?'); if ($stm->execute(array($_GET['request']))) { $resultado = $stm->fetchAll(); $show = rand(0,(count($resultado)-1)); // Maneira 1, mais eficiente pelo o baixo custo de processamento header('Location: '. $resultado[$show][0]); // Maneira 2, custa mais, já que tem pegar os resources do outro website //header('Content-type:image/'.substr($resultado[$show][0],-3)); //echo file_get_contents($resultado[$show][0]); exit; } } Para recuperar vamos checar por uma variável do tipo GET, nesse caso $_GET['request']. Onde, se nós quiséssemos recuperar aquele "album" (a imagem dinâmica), seria atráves do link: http://localhost/dynamicsignature/?request=a1j3de Daí você pode perguntar: WTF, como assim? Que eu saiba o meu link está vindo assim: http://localhost/dynamicsignature/a1j3de.jpg Eu decidi colocar o link daquele jeito porque é mais amigável ao usuário. De fato parece uma imagem. Mas no .htaccess eu estou informando uma regra de escrita para o meu servidor da seguinte maneira: RewriteRule ^(.+)\.(jpg|png|gif)$ index.php?request=$1 [QSA,L] Ou seja, sempre quando vier um link para uma imagem, ele vai pegar o id do album e montar uma url seguindo o padrão com o $_GET['request'] sozinho. É o mesmo princípio por trás das famosas "urls amigáveis". Acredito que tenha um tutorial por aqui, por isso também não irei entrar em detalhes. Agora que temos o ID do album, vamos abrir uma conexão com o banco de dados e pegar todas as imagens que pertecem ao album que possua aquele ID. Como no exemplo anterior, não podemos confiar nesse ID enviado através do $_GET['request'], então vamos usar prepared statements para recuperar os valores. Guardamos os dados recuperados numa variável chamada $resultado. Depois disso criamos uma variável chamada $show, ela vai assumir um valor aleatório entre 0 e o tamanho da array resultados (menos 1). Assim podemos acessar aleatoriamente um dos resultados. Então: $resultado[$show][0] Vai retornar qualquer link de uma imagem do album com aquela ID de forma aleatória. Cool. :fuma: O método que eu estou usando é redirecionar o usuário para o link da imagem. É bom que não exige muito do servidor. A outra forma seria pegar a imagem do link, importar os resources dela para o nosso servidor, enviar um header correspondente ao tipo de imagem e então imprimir o valor da resource. É muito custoso. E não há muitas vantagens. Isso cobre basicamente como esse projeto foi feito. É bem mais simples do que parece, mas foi divertido cria-lo. Abaixo segue o link para o download do projeto completo (junto com o esquema da tabela mysql usada): Download: https://drive.google.com/file/d/0B3m12iEgipitMTFSZ0M3VFp3MVk/view?usp=sharing Scan: https://www.virustotal.com/pt/url/c08dcad829c478809e223e53051b361dbd0dd480c0dbb1ebf9b6ee5040852889/analysis/1425331720/
×
×
  • Create New...