Ir ao conteúdo
  • Cadastre-se

GabrielSennaMs

Membro Pleno
  • Posts

    335
  • Cadastrado em

  • Última visita

Tudo que GabrielSennaMs postou

  1. @Jhones Sombra Bom você pode usar o git para salvar os seus códigos e puxar ele para o seu servidor, a outra opção e se conectar via ssh para trabalhar direto na sua maquina de servido. A IDE que uso hoje em dia é o VScode eu uso essa lib para se conectar ao meu servidor para trabalhar nele, quando necessario. É possível também trabalhar assim.
  2. @vitxr Bom você pode usar a propriedade "z-index" do css para fazer esse ajuste de posição do seu menu. Aqui um tutorial de como usar: https://www.w3schools.com/css/css_z-index.asp
  3. @vitxr Bom você tem que salvar esse valor em algum lugar, em um arquivo ou em um banco de dados.
  4. @arturbc Bom agora você tem que entra na sua conta do google em Google Cloud Console e cadastrar o seu aplicativo, no caso o seu site, e pedir o recurso do reCaptca para a sua aplicação, lá você deve obter o token de uso do reCaptca. Lembrando que você tem que adicionar o host do seu site para a lista de permissão de uso do token tem aplicação.
  5. @arturbc Amigo, antes de tudo se essa é a sua chave "secret" tira ela do seu post. Tem que verifica se o seu domínio está na lista de permissão da sua chave. Outra coisa que vi é que o token secret não é o mesmo que vai no input o sitekey, e no seu exemplo está o mesmo. Fiz uma forma mais pratica de fazer isso. <?php $msg = ""; if ($_SERVER['REQUEST_METHOD'] === "POST") { $name = filter_input(INPUT_POST, "name", FILTER_DEFAULT); $email = filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL); $recaptch = filter_input(INPUT_POST, "g-recaptcha-response", FILTER_DEFAULT); if (!empty($recaptch)) { $params = http_build_query([ "secret" => "6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe", "response" => $recaptch ]); $request = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?" . $params)); if (isset($request->success) and $request->success) { $msg = "Recaptch passo!"; } else { $msg = "Deu erro!"; } } else { $msg = "Recaptcha em branco!"; } } ?> <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title> </head> <body> <p><?= $msg ?></p> <form method="POST"> <div>Name: <input type="text" name="name" value="" /><br><br></div> <div>Email: <input type="text" name="email" value="" /><br><br></div> <div class="g-recaptcha" require data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div><br> <input type="submit" name="submit"> </form> <script src="https://www.google.com/recaptcha/api.js" async defer></script> </body> </html>
  6. @mr.obvio Bom esse tutorial aqui pode te ajudar: https://www.phptutorial.net/php-tutorial/php-flash-messages/
  7. @paulossasa Se você não removeu ou delete o banco de dados do wordpress é possível recuperar.
  8. @Eduardo de Quadros Bom amigo você tem que ser mais expecifico na sua duvida, mas eu acho que você precisa ou quer é atualizar uma linha em uma tabela no banco de dados. Aqui tem um tutorial falando sobre: https://www.w3schools.com/php/php_mysql_update.asp
  9. @gomes_gabriel Fiz algumas modificações no seu script e na sua estrutura. Javascript: window.onload = function () { const inputs = document.querySelectorAll('input[data-action]'); for (let input of inputs) { if (input.getAttribute('data-action') === 'preview') { if (input.hasAttribute('data-preview')) { const preview = document.getElementById(input.getAttribute('data-preview')); if (preview) { const event = new Event('change'); input.addEventListener('change', loadingPreviewImage); input.dispatchEvent(event); continue; } console.error( 'O atributo elemento com o id ' + input.getAttribute('data-preview') + ' para o preview não foi definido' ); continue; } console.error('O atributo "data-preview" não foi definido'); } } } function loadingPreviewImage(event) { const input = event.target, preview = document.getElementById(input.getAttribute('data-preview')); preview.innerHTML = null; if (input.files.length > 0) { for (let file of input.files) { const reader = new FileReader(), figure = document.createElement("figure"), figCap = document.createElement("figcaption"); figCap.innerText = file.name; figure.appendChild(figCap); reader.onload = () => { const img = document.createElement("img"); if (figCap.innerText.split('.').pop() == 'pdf') { img.setAttribute("src", "pdf.png"); } else { img.setAttribute("src", reader.result); } figure.insertBefore(img, figCap); } preview.appendChild(figure); reader.readAsDataURL(file); } return; } const p = document.createElement('p'); p.textContent = 'Nenhum arquivo foi escolhido.'; preview.append(p); } HTML: <div class="container"> <input type="file" id="file_input_1" name="file_input_1" data-preview="preview_1" data-action="preview" accept=".png, .jpeg, .jpg, .pdf" /> <label for="file_input_1"> <i class="fa fa-file"></i> <span>Escolha seus arquivos</span> </label> <div id="preview_1" class="preview"></div> </div> <div class="container"> <input type="file" id="file_input_2" data-preview="preview_2" data-action="preview" name="file_input_2" accept=".png, .jpeg, .jpg, .pdf" multiple /> <label for="file_input_2"> <i class="fa fa-file"></i> <span>Escolha seus arquivos</span> </label> <div id="preview_2" class="preview"></div> </div> Também fiz algumas modificações no CSS: * { padding: 0; margin: 0; box-sizing: border-box; font-family: "Rubik", sans-serif; } body { background-color: #f5f8ff; } .container { background-color: #ffffff; width: 100%; max-width: 1000px; margin: 4em auto; padding: 2em; border-radius: 7px; box-shadow: 0 20px 35px rgba(0, 0, 0, 0.05); } input[type="file"] { display: none; } label { display: block; position: relative; background-color: #025bee; color: #ffffff; font-size: 18px; text-align: center; max-width: 300px; width: 100%; padding: 18px 0; margin: auto; border-radius: 5px; cursor: pointer; } .preview > p, .preview > figure { margin-top: 1em; } .preview { text-align: center; display: flex; flex-wrap: wrap; justify-content: center; } .preview > figure { width: 260px; height: 260px; margin: 1em 0.5em; overflow: hidden; background: #272727; color: #fff; border-radius: 7px; box-shadow: 0 20px 35px rgba(0, 0, 0, 0.05); } .preview > figure > img { width: 100%; height: 225px; object-fit: cover; } .preview > figure > figcaption { text-align: center; font-size: 2.4vmin; margin-top: 0.5vmin; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size: 12px; padding: 0 1em 1em 1em; } O resultado: OBS..: O atributo id tem o valor único em toda a página então não use ele se não for para um elemento especifico.
  10. @Impts Esse tutorial vai te ajudar a resolver e entender esse problema https://www.w3schools.com/css/css_selectors.asp
  11. @Haseo\ Eu fiz um exemplo usando o efeito fade: https://jsfiddle.net/Senna_MT/0txa7u9o/5/ Para o exemplo funcionar no site de exemplo sem url do arquivo de imagem eu convertir a imagem em base64 <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>BTN</title> <style> html, body, main, section { width: 100%; height: 100%; margin: 0px; padding: 0px; display: flex; justify-content: center; align-items: center; background: #777; } .flip { -webkit-filter-transform: rotateY(180deg); transform: rotateY(180deg); } .btn { display: inline-block; width: 64px; height: 64px; background: url("on.png"); background-size: cover; transition: 0.4s; } .btn-on { transition: 0.2s; -webkit-filter: grayscale(0%); filter: grayscale(0%); } .btn-on:hover { transition: 0.2s; -webkit-filter: grayscale(100%); filter: grayscale(100%); } .btn-off { transition: 0.2s; -webkit-filter: grayscale(100%); filter: grayscale(100%); } .btn-off:hover { transition: 0.2s; -webkit-filter: grayscale(0%); filter: grayscale(0%); } </style> </head> <body> <main> <section> <div class="btn btn-on"></div> <div class="btn btn-on flip"></div> <div class="btn btn-off"></div> <div class="btn btn-off flip"></div> </section> </main> </body> </html> Resultado: @Haseo\ Esqueci do slide, aqui tem um tutoria de como fazer: https://www.w3schools.com/howto/howto_js_slideshow.asp
  12. @Impts Você pode verificar a lista de errors e procurar o indece certo. <?php if (isset($errors['email'])): ?> <?= $errors['email'] ?> <?php endif; ?>
  13. @David Martinho Se você definir o nome do input igual com colchetes([]) no final o php vai interpretar os valores em uma lista. Exemplo: <form method="GET"> <input type="checkbox" value="AS24" name="checkar[]"> <input type="checkbox" value="AS25" name="checkar[]"> <input type="checkbox" value="AS26" name="checkar[]"> <input type="submit" value="submit"> </form> // Resultado de um var_dump em $_GET array(1) { ["checkar"]=> array(3) { [0]=> string(4) "AS24" [1]=> string(4) "AS25" [2]=> string(4) "AS26" } }
  14. @Impts O erro apontado pelo interpretador está no seu echo, falto às aspas duplas(") no final. Tem outro erro no tipo(type) do seu botão de submit no formulario, no caso tem duas propriedade type e o correto é 'type="submit"' Fiz outras modificações que você pode testar para melhorar o seu código <?php require_once __DIR__ . DIRECTORY_SEPARATOR . "conection.php"; $errors = []; $data = [ "email" => "", "password" => "" ]; function filter_input_string($input) { $value = filter_input(INPUT_POST, $input, FILTER_SANITIZE_STRING); if (is_null($value)) { return $value; } elseif (!is_string($value)) { return null; } $value = trim($value); $value = stripslashes($value); $value = htmlspecialchars($value); return $value; } function validation_value_is_null(&$errors, &$data, $index, $field) { if (is_null($data[$index]) or empty($data[$index])) { $errors[$index] = "<p>O campo '{$field}' é obrigatorio</p>"; } } function validation_data_authentication_user(&$errors, &$data) { $data["email"] = filter_input_string("email"); $data["password"] = filter_input_string("password"); validation_value_is_null($errors, $data, "email", "E-mail"); validation_value_is_null($errors, $data, "password", "Senha"); if (count($errors) === 0) { if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) { $errors["email"] = "<p>O valor informado no campo email não corresponde a um email valido</p>"; } if (count($errors) === 0) { return true; } } return false; } if ($_SERVER["REQUEST_METHOD"] == "POST") { if (session_status() == 1) { session_start(); } if (validation_data_authentication_user($errors, $data)) { $stmt = $mysqli->prepare("SELECT `id`, `password` FROM `users` WHERE `email` = ? LIMIT 1;"); $stmt->bind_param("s", $data['email']); if ($stmt->execute()) { $result = $stmt->get_result(); if ($result->num_rows === 1) { $user = $result->fetch_object(); if (password_verify($data['password'], $user->password)) { $_SESSION["id"] = $user->id; header("Location: /success.php"); die(); } } } $errors["all"] = "<p>Usuário ou/e senha invalido/s</p>"; } http_response_code(401); } ?> <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> html, body, main, section { width: 100%; padding: 0px; margin: 0px; height: 100%; background: #eee; font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; } a { color: #000; text-decoration: none; border-bottom: solid 1px transparent; transition: 0.4s; } a:hover { text-decoration: none; transition: 0.4s; border-bottom: solid 1px; } section { display: flex; justify-content: center; align-content: center; align-items: center; } form { width: 100%; max-width: 300px; padding: 2em; border-radius: 0.5em; transition: 0.2s; box-shadow: 3px 3px 10px #777; background: #fff; } fieldset { padding: 0px; margin: 0px; border: none; } input[type="text"], input[type="password"] { width: calc(100% - 20px); } input { width: 100%; display: block; margin: 2em 0; padding: 10px; } #msg-errors > p { color: red; font-size: 12px; } </style> </head> <body> <main> <section> <form action="<?= htmlspecialchars($_SERVER["PHP_SELF"]) ?>" method="POST"> <h2>LOGIN</h2> <div id="msg-errors"> <?php if (count($errors) > 0): ?> <?= implode("", array_values($errors)); ?> <?php endif; ?> </div> <fieldset> <input value="<?= $data['email'] ?>" autocomplete="username" name="email" type="text" placeholder="E-mail" > <input autocomplete="current-password" name="password" type="password" placeholder="Senha" > <a href="#">Esqueceu a sua senha?</a> <input type="submit" value="Entrar"> </fieldset> </form> </section> </main> </body> </html>
  15. @Air-Gear Não sei se o grafico é a sua prioridade no momento, mas esse component pode te ajutar nisso. https://pqina.nl/filepond/
  16. @Air-Gear Até onde eu sei o Angular tem uma lib para isso a: https://www.w3schools.com/angular/angular_http.asp, você também pode usar o axios: https://github.com/axios/axios.
  17. @Air-Gear Acho que você deve renderizar isso usando o Angular para evitar erro e fazer uma request para fazer um upload antes de enviar os dados para o backend vai necessitar de uma rotina para re mover os arquivos que não foram usados.
  18. @Alice Braga Se esse for o caso então seu HTML está errado porque na versão Boostrap <= 4 a propriedade para utilizar o 'dropdown' é "data-toggle="dropdown" De uma olhada na documentação do navbar aqui no site oficial https://getbootstrap.com/docs/4.6/components/navbar/
  19. @Air-Gear Cara eu realmente não entendi nada desse seu código, porque você tenta acessar uma lista no Angular passando como paramento um index do php? essa lista vai está carregada no seu frontend? esse código html que o php escreve na tela vai ser carregado pelo frontend?
  20. @Alice Braga Pela classes utilizadas no seu HTML você está usando Boostrap >= 5, fica a duvida se você adicionou a parte de Javascript do Boostrap no seu elemento head. Para o Boostrap 5 <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script> Com isso o seu dropdown deve funcionar! Obs..: Tem alguns erros no seu HTML, no link de suporte falto você adicionar o elemento com os elementos para o dropdown-menu e fechar o elemento </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false" > Support </a> <div class="dropdown-menu"> <a class="dropdown-item" href="#">Introduction to SmartMenus jQuery </a> </div> </li>
  21. @Impts Nessa sua adaptação falto coisa <?php define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', ''); define('DB_NAME', ''); // Falto o nome do banco try { $link = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD); } catch(PDOException $e) { die("ERRO: Não foi possível estabelecer uma conexão com o banco de dados: " . $e->getMessage()); } Aqui tem um tutorial que pode te ajudar nisso https://www.w3schools.com/php/php_mysql_connect.asp
  22. @JvAG Bom infelizmente no CSS você só tem essas opções de alinhamento de texto, porém você pode tentar compensar usando alguns outras opções. Esses tutorias podem te ajudar: https://www.w3schools.com/css/css_text_align.asp https://www.w3schools.com/css/css_text_spacing.asp
  23. @Impts Esses tutoriais podem te ajudar nisso: https://www.w3schools.com/howto/howto_js_sidenav.asp, https://www.w3schools.com/css/css_float.asp, https://www.w3schools.com/css/css3_flexbox.asp, https://www.w3schools.com/css/css_rwd_intro.asp
  24. @zZDuzaaxC Quando você tenta salvar os dados na variável $user o php tenta converter o objecto DateTime para uma string e da erro. Uma maneira de fazer isso e usar um método para converter o object DateTime do php para string e também definir o formato da data. $data = date_format($agora, "d/m/Y"); $user = <<<EOF <h2> Última data de login = {$data}<br> CPF do usuário = {$cpf}<br> E-mail do usuário = {$email}<br> </h2> EOF; echo $user; Obs..: Seu HTML está errado

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!