home
/
u529748449
/
domains
/
borabilhete.com
/
public_html
/
admin
➕ New
📤 Upload
✎ Editing:
cadastro_produtor.php
← Back
<?php // admin/cadastro_produtor.php session_start(); require_once __DIR__ . '/conexao.php'; $erro = ''; $okMsg = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Dados $nome = trim($_POST['nome'] ?? ''); $email = trim($_POST['email'] ?? ''); $senha = (string)($_POST['senha'] ?? ''); $senha2 = (string)($_POST['senha2'] ?? ''); // Validações básicas if ($nome === '' || $email === '' || $senha === '' || $senha2 === '') { $erro = 'Preencha todos os campos.'; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $erro = 'Informe um e-mail válido.'; } elseif (strlen($senha) < 6) { $erro = 'A senha deve ter no mínimo 6 caracteres.'; } elseif ($senha !== $senha2) { $erro = 'As senhas precisam coincidir.'; } if ($erro === '') { // Verifica e-mail duplicado (case-insensitive) $sql = "SELECT id FROM produtores WHERE LOWER(email)=LOWER(?) LIMIT 1"; $st = $conn->prepare($sql); if (!$st) { $erro = 'Erro interno.'; } else { $st->bind_param('s', $email); $st->execute(); $exists = $st->get_result()->fetch_assoc(); $st->close(); if ($exists) { $erro = 'Este e-mail já está em uso.'; } else { // Cria produtor $hash = password_hash($senha, PASSWORD_DEFAULT); $role = 'produtor'; // Se ainda não quer vincular a nenhuma produtora, mantenha 0. // O NULLIF abaixo grava NULL no banco quando for 0, evitando violar a FK. $empresa_id = 0; $ativo = 1; // 1 = já pode acessar (ajuste se quiser aprovação manual) $ins = $conn->prepare(" INSERT INTO produtores (nome, email, senha, role, empresa_id, ativo) VALUES (?, ?, ?, ?, NULLIF(?, 0), ?) "); if (!$ins) { $erro = 'Erro interno ao cadastrar.'; } else { $ins->bind_param('ssssii', $nome, $email, $hash, $role, $empresa_id, $ativo); if ($ins->execute()) { $novoId = (int)$ins->insert_id; $ins->close(); // Login automático $_SESSION['produtor_logado'] = true; $_SESSION['produtor_id'] = $novoId; $_SESSION['produtor_nome'] = $nome; $_SESSION['role'] = $role; $_SESSION['empresa_id'] = null; header('Location: index.php'); exit; } else { $erro = 'Não foi possível concluir o cadastro. Tente novamente.'; $ins->close(); } } } } } } ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8" /> <title>Painel do Produtor — Cadastro</title> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="../public/css/baseingressos.css"> <style> html, body { height:100%; margin:0; } body{ background:#f6f7f9; color:#111; } .page{ min-height:100%; display:flex; align-items:center; justify-content:center; padding:32px 16px; } .card{ width:100%; max-width:520px; background:#fff; padding:28px; border-radius:12px; box-shadow:0 2px 12px rgba(0,0,0,.06); box-sizing:border-box; } .card *{ box-sizing:border-box; } .brand{ display:flex; align-items:center; justify-content:center; gap:10px; margin-bottom:6px; } .brand .logo{ width:28px; height:28px; border-radius:8px; background:var(--cor-primaria); } .brand .title{ font-weight:800; font-size:18px; letter-spacing:.3px; } h2{ margin:8px 0 12px; text-align:center; font-weight:700; } .notice{ margin: 10px 0 14px; padding: 12px 14px; border-radius:12px; border:1px solid transparent; font-size:15px; display:flex; gap:10px; align-items:center; line-height:1.35; } .notice i{ flex:0 0 auto; } .notice.error { background:#ffe8ec; border-color:#f5c2c7; color:#9f1239; } .notice.success{ background:#e7f6ee; border-color:#b7e2cd; color:#166534; } .form{ display:flex; flex-direction:column; gap:12px; margin-top:6px; } label{ font-weight:600; margin-bottom:6px; display:block; } .input{ width:100%; padding:12px 14px; border:1px solid #e5e7eb; border-radius:8px; font-size:15px; background:#fff; } .has-icon{ position:relative; } .has-icon .input{ padding-right:44px; } .toggle-eye{ position:absolute; right:12px; top:50%; transform:translateY(-50%); border:none; background:transparent; padding:6px; cursor:pointer; color:#666; line-height:0; } .toggle-eye:focus{ outline:2px solid #ddd; border-radius:6px; } .help{ font-size:12px; color:#666; } .btn{ width:100%; padding:12px 16px; border:none; border-radius:8px; background:var(--cor-primaria); color:#fff; font-weight:600; cursor:pointer; transition:filter .2s ease; margin-top:2px; } .btn:hover{ filter:brightness(.95); } .links{ text-align:center; margin-top:10px; font-size:14px; } .links a{ color:var(--cor-primaria); text-decoration:none; } .links a:hover{ text-decoration:underline; } @media (max-width:480px){ .page{ padding:24px 12px; } .card{ padding:22px; } } </style> </head> <body> <main class="page"> <section class="card" role="region" aria-labelledby="titulo-cad"> <div class="brand" aria-hidden="true"> <span class="logo"></span> <span class="title">Painel do Produtor</span> </div> <h2 id="titulo-cad">Criar conta de produtor</h2> <?php if ($erro): ?> <div class="notice error" role="alert" aria-live="assertive"> <i class="fa-solid fa-circle-exclamation"></i> <span><?= htmlspecialchars($erro) ?></span> </div> <?php endif; ?> <?php if ($okMsg): ?> <div class="notice success" role="status"> <i class="fa-solid fa-circle-check"></i> <span><?= htmlspecialchars($okMsg) ?></span> </div> <?php endif; ?> <form method="post" class="form" novalidate> <div> <label for="nome">Nome completo</label> <input type="text" id="nome" name="nome" class="input" required placeholder="Seu nome" value="<?= htmlspecialchars($_POST['nome'] ?? '') ?>"> </div> <div> <label for="email">E-mail</label> <input type="email" id="email" name="email" class="input" required placeholder="seuemail@dominio.com" value="<?= htmlspecialchars($_POST['email'] ?? '') ?>" autocomplete="username" autocapitalize="none" spellcheck="false"> </div> <div> <label for="senha">Senha</label> <div class="has-icon"> <input type="password" id="senha" name="senha" class="input" minlength="6" required placeholder="mínimo 6 caracteres" autocomplete="new-password"> <button type="button" class="toggle-eye" data-target="senha" aria-label="Mostrar/ocultar senha"> <i class="fa-regular fa-eye"></i> </button> </div> <div class="help">Use pelo menos 6 caracteres.</div> </div> <div> <label for="senha2">Confirmar senha</label> <div class="has-icon"> <input type="password" id="senha2" name="senha2" class="input" minlength="6" required autocomplete="new-password"> <button type="button" class="toggle-eye" data-target="senha2" aria-label="Mostrar/ocultar confirmação"> <i class="fa-regular fa-eye"></i> </button> </div> <div id="match-help" class="help" style="display:none;">As senhas não coincidem.</div> </div> <button type="submit" class="btn">Criar conta</button> </form> <div class="links"> Já tem uma conta? <a href="login_produtor.php">Entrar</a> </div> </section> </main> <script> // Olhinho document.querySelectorAll('.toggle-eye').forEach(btn => { btn.addEventListener('click', () => { const id = btn.getAttribute('data-target'); const input = document.getElementById(id); if (!input) return; const isPwd = input.type === 'password'; input.type = isPwd ? 'text' : 'password'; btn.innerHTML = isPwd ? '<i class="fa-regular fa-eye-slash"></i>' : '<i class="fa-regular fa-eye"></i>'; input.focus(); }); }); // Ajuda “senhas iguais” + bloqueio de envio const s1 = document.getElementById('senha'); const s2 = document.getElementById('senha2'); const help = document.getElementById('match-help'); const form = document.querySelector('.form'); function checkMatch(){ if (!s1.value || !s2.value) { help.style.display = 'none'; return; } help.style.display = (s1.value === s2.value) ? 'none' : 'block'; } if (s1 && s2) { s1.addEventListener('input', checkMatch); s2.addEventListener('input', checkMatch); } if (form) { form.addEventListener('submit', (e) => { if (s1.value.length < 6 || s1.value !== s2.value) { e.preventDefault(); checkMatch(); if (s1.value.length < 6) s1.focus(); else s2.focus(); } }); } </script> </body> </html>
💾 Save Changes
Cancel
📤 Upload File
×
Select File
Upload
Cancel
➕ Create New
×
Type
📄 File
📁 Folder
Name
Create
Cancel
✎ Rename Item
×
Current Name
New Name
Rename
Cancel
🔐 Change Permissions
×
Target File
Permission (e.g., 0755, 0644)
0755
0644
0777
Apply
Cancel