File manager - Edit - /home/cipherteam/htdocs/cipherteam.in/admin3/add.php
Back
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); include 'config.php'; session_start(); if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) { header("Location: login.php"); exit; } $today = date('Y-m-d'); $showToast = isset($_GET['success']); // Handle Form Submission if ($_SERVER["REQUEST_METHOD"] === "POST") { $fields = [ 'c_name', 'ipokey', 'islive', 'img', 'm_application', 'rat', 'details', 'emoji', 'i_date', 'c_date', 'ipo_open', 'ipo_close', 'ipo_allotment', 'ipo_refund', 'ipo_credit', 'ipo_listing', 'status', 'suggestion', 'date', 'allotment', 'NO', 'TYPE', 'url', 'o_price', 'GMP', 'subscription' ]; $params = []; foreach ($fields as $field) { $params[":$field"] = $_POST[$field] ?? ''; } // Collect IPO date fields $ipo_dates = [ $_POST['ipo_open'] ?? '', $_POST['ipo_close'] ?? '', $_POST['ipo_allotment'] ?? '', $_POST['ipo_refund'] ?? '', $_POST['ipo_credit'] ?? '', $_POST['ipo_listing'] ?? '' ]; // If all IPO dates are same, blank them out if (count(array_unique($ipo_dates)) === 1) { $_POST['ipo_open'] = ''; $_POST['ipo_close'] = ''; $_POST['ipo_allotment'] = ''; $_POST['ipo_refund'] = ''; $_POST['ipo_credit'] = ''; $_POST['ipo_listing'] = ''; } function convertDate($date) { if (!empty($date)) { $d = DateTime::createFromFormat('Y-m-d', $date); return $d ? $d->format('d-m-Y') : $date; } return ''; } // Convert date fields $_POST['ipo_open'] = convertDate($_POST['ipo_open'] ?? ''); $_POST['ipo_close'] = convertDate($_POST['ipo_close'] ?? ''); $_POST['ipo_allotment'] = convertDate($_POST['ipo_allotment'] ?? ''); $_POST['ipo_refund'] = convertDate($_POST['ipo_refund'] ?? ''); $_POST['ipo_credit'] = convertDate($_POST['ipo_credit'] ?? ''); $_POST['ipo_listing'] = convertDate($_POST['ipo_listing'] ?? ''); // Prepare insert $params = []; foreach ($fields as $field) { $params[":$field"] = $_POST[$field] ?? ''; } $sql = "INSERT INTO ipo_post ( c_name, ipokey, islive, img, m_application, rat, details, emoji, i_date, c_date, ipo_open, ipo_close, ipo_allotment, ipo_refund, ipo_credit, ipo_listing, status, suggestion, date, allotment, NO, TYPE, url, o_price, GMP, subscription ) VALUES ( :c_name, :ipokey, :islive, :img, :m_application, :rat, :details, :emoji, :i_date, :c_date, :ipo_open, :ipo_close, :ipo_allotment, :ipo_refund, :ipo_credit, :ipo_listing, :status, :suggestion, :date, :allotment, :NO, :TYPE, :url, :o_price, :GMP, :subscription )"; try { $stmt = $pdo->prepare($sql); $stmt->execute($params); header("Location: add.php?success=1"); exit; } catch (PDOException $e) { die("DB Error: " . $e->getMessage()); } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Add IPO - Wizard</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> <style> :root { --primary: #4f46e5; --primary-light: #e0e7ff; --primary-dark: #3730a3; --surface: #ffffff; --surface-alt: #f8fafc; --border: #e2e8f0; --text: #1e293b; --text-muted: #64748b; --success: #059669; --success-light: #ecfdf5; --warning: #d97706; --warning-light: #fffbeb; --danger: #dc2626; --danger-light: #fef2f2; --info: #0284c7; --info-light: #f0f9ff; --radius: 12px; --radius-sm: 8px; --shadow-sm: 0 1px 2px rgba(0,0,0,0.05); --shadow: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04); --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.08), 0 2px 4px -2px rgba(0,0,0,0.04); } * { box-sizing: border-box; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #f1f5f9; color: var(--text); min-height: 100vh; padding: 0; margin: 0; } /* ── Top Bar ── */ .top-bar { background: var(--surface); border-bottom: 1px solid var(--border); padding: 16px 0; position: sticky; top: 0; z-index: 100; box-shadow: var(--shadow-sm); } .top-bar .inner { max-width: 860px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; } .brand { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 20px; color: var(--primary); } .brand-icon { width: 36px; height: 36px; background: var(--primary); color: #fff; border-radius: 10px; display: grid; place-items: center; font-size: 18px; flex-shrink: 0; } .btn-back { background: var(--surface-alt); color: var(--text-muted); border: 1px solid var(--border); padding: 8px 18px; border-radius: var(--radius-sm); font-weight: 500; font-size: 13px; text-decoration: none; transition: all 0.2s; display: inline-flex; align-items: center; gap: 6px; } .btn-back:hover { background: var(--primary-light); color: var(--primary); border-color: var(--primary); } /* ── Main Container ── */ .main-wrap { max-width: 860px; margin: 0 auto; padding: 28px 24px 40px; } /* ── Progress Bar ── */ .progress-container { height: 4px; background-color: var(--border); margin-bottom: 28px; border-radius: 4px; overflow: hidden; } .progress-bar-custom { height: 4px; background: linear-gradient(90deg, var(--primary), #818cf8); transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1); border-radius: 4px; } /* ── Step Indicators ── */ .step-indicator { display: flex; justify-content: space-between; margin-bottom: 32px; gap: 4px; counter-reset: step; position: relative; } .step-indicator div { flex: 1; text-align: center; padding: 12px 6px 10px; font-size: 12px; font-weight: 500; color: var(--text-muted); position: relative; border-radius: var(--radius-sm); transition: all 0.3s; cursor: default; } .step-indicator div::before { counter-increment: step; content: counter(step); display: block; width: 32px; height: 32px; line-height: 32px; margin: 0 auto 6px; border-radius: 50%; background: var(--surface-alt); border: 2px solid var(--border); color: var(--text-muted); font-weight: 600; font-size: 13px; transition: all 0.3s; } .step-indicator div.active { color: var(--primary); } .step-indicator div.active::before { background: var(--primary); border-color: var(--primary); color: #fff; box-shadow: 0 0 0 4px var(--primary-light); } .step-indicator div.completed::before { background: var(--success-light); border-color: var(--success); color: var(--success); content: '✓'; } /* ── Form Card ── */ .form-card { background: var(--surface); border-radius: var(--radius); border: 1px solid var(--border); box-shadow: var(--shadow); padding: 32px; } /* ── Steps ── */ .step { display: none; opacity: 0; transition: opacity 0.3s ease; } .step.active { display: block; opacity: 1; } .step-title { font-size: 18px; font-weight: 700; color: var(--text); margin-bottom: 4px; } .step-subtitle { font-size: 13px; color: var(--text-muted); margin-bottom: 24px; } /* ── Form Fields ── */ .field-group { margin-bottom: 18px; } .field-group label { display: block; font-size: 13px; font-weight: 600; color: var(--text); margin-bottom: 6px; } .field-group .form-control, .field-group .form-select { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 10px 14px; font-size: 14px; color: var(--text); background: var(--surface); transition: border-color 0.2s, box-shadow 0.2s; } .field-group .form-control:focus, .field-group .form-select:focus { border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-light); outline: none; } .field-group .form-control::placeholder { color: #b0b8c9; } .field-group textarea.form-control { resize: vertical; min-height: 80px; } .field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } /* ── Review ── */ .review-grid { display: grid; gap: 0; } .review-item { display: flex; justify-content: space-between; align-items: flex-start; padding: 12px 0; border-bottom: 1px solid var(--border); gap: 16px; } .review-item:last-child { border-bottom: none; } .review-key { font-size: 12px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.03em; min-width: 140px; flex-shrink: 0; } .review-val { font-size: 14px; color: var(--text); text-align: right; word-break: break-word; } .markdown-preview { border: none; padding: 0; background: transparent; } .markdown-preview p { margin-bottom: 0.3rem; } /* ── Navigation Buttons ── */ .nav-buttons { display: flex; justify-content: center; gap: 12px; margin-top: 28px; padding-top: 24px; border-top: 1px solid var(--border); } .btn-nav { padding: 11px 28px; border-radius: var(--radius-sm); font-size: 14px; font-weight: 600; border: none; cursor: pointer; transition: all 0.2s; display: inline-flex; align-items: center; gap: 6px; } .btn-prev { background: var(--surface-alt); color: var(--text-muted); border: 1px solid var(--border); } .btn-prev:hover { background: var(--border); color: var(--text); } .btn-next { background: var(--primary); color: #fff; } .btn-next:hover { background: var(--primary-dark); transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn-submit { background: var(--success); color: #fff; } .btn-submit:hover { background: #047857; transform: translateY(-1px); box-shadow: var(--shadow-md); } /* ── Toast ── */ .toast-custom { position: fixed; bottom: 24px; right: 24px; background: var(--success); color: #fff; padding: 14px 24px; border-radius: var(--radius-sm); font-size: 14px; font-weight: 500; box-shadow: var(--shadow-md); display: flex; align-items: center; gap: 8px; z-index: 1000; animation: slideIn 0.3s ease, fadeOut 0.3s ease 3s forwards; } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes fadeOut { to { transform: translateY(10px); opacity: 0; } } /* ── Responsive ── */ @media (max-width: 640px) { .main-wrap { padding: 16px; } .form-card { padding: 20px; } .field-row { grid-template-columns: 1fr; gap: 0; } .step-indicator div { font-size: 10px; padding: 10px 2px 8px; } .step-indicator div::before { width: 28px; height: 28px; line-height: 28px; font-size: 12px; } .nav-buttons { flex-direction: column; } .btn-nav { width: 100%; justify-content: center; } .review-item { flex-direction: column; gap: 2px; } .review-val { text-align: left; } } </style> </head> <body> <!-- Top Bar --> <div class="top-bar"> <div class="inner"> <div class="brand"> <div class="brand-icon">➕</div> Add IPO </div> <a href="index.php" class="btn-back">← Back to List</a> </div> </div> <div class="main-wrap"> <!-- Progress --> <div class="progress-container"> <div id="progressBar" class="progress-bar-custom" style="width: 0%;"></div> </div> <!-- Step Indicators --> <div class="step-indicator"> <div id="indicator-0" class="active">General</div> <div id="indicator-1">Dates</div> <div id="indicator-2">Financials</div> <div id="indicator-3">Status</div> <div id="indicator-4">Review</div> </div> <!-- Form Card --> <div class="form-card"> <form method="POST" id="ipoForm"> <!-- Step 1: General --> <div class="step active"> <div class="step-title">General Information</div> <div class="step-subtitle">Basic details about the IPO company</div> <div class="field-group"> <label>Company Name</label> <input type="text" name="c_name" class="form-control" placeholder="e.g. Tata Technologies Ltd" required> </div> <div class="field-group" hidden> <label>IPO Key</label> <input type="text" name="ipokey" class="form-control" placeholder="IPO Key" hidden> </div> <div class="field-row"> <div class="field-group"> <label>Live Status</label> <select name="islive" class="form-select"> <option value="NO">NO</option> <option value="YES">YES</option> </select> </div> <div class="field-group"> <label>Rating</label> <input type="text" name="rat" class="form-control" value="0"> </div> </div> <div class="field-group"> <label>Image URL</label> <input type="text" name="img" class="form-control" placeholder="https://example.com/logo.png"> </div> <div class="field-group"> <label>Details</label> <textarea name="details" class="form-control" rows="4"><?php echo 'Allotment: ' . date('F Y') . "\n" . 'Refund: ' . date('F Y') . "\n" . 'Listing: ' . date('F Y'); ?></textarea> </div> <div class="field-group"> <label>Emoji</label> <input type="text" name="emoji" class="form-control" placeholder="🚀"> </div> </div> <!-- Step 2: Dates --> <div class="step"> <div class="step-title">Date Information</div> <div class="step-subtitle">Timeline for the IPO process</div> <div class="field-row"> <div class="field-group"> <label>Issue Date</label> <input type="text" name="i_date" class="form-control" value="<?php echo date('M Y'); ?>"> </div> <div class="field-group"> <label>Close Date</label> <input type="text" name="c_date" class="form-control" value="<?php echo date('M Y'); ?>"> </div> </div> <div class="field-row"> <div class="field-group"> <label>IPO Open</label> <input type="date" name="ipo_open" class="form-control" value="<?php echo $today; ?>"> </div> <div class="field-group"> <label>IPO Close</label> <input type="date" name="ipo_close" class="form-control" value="<?php echo $today; ?>"> </div> </div> <div class="field-row"> <div class="field-group"> <label>IPO Allotment</label> <input type="date" name="ipo_allotment" class="form-control" value="<?php echo $today; ?>"> </div> <div class="field-group"> <label>IPO Refund</label> <input type="date" name="ipo_refund" class="form-control" value="<?php echo $today; ?>"> </div> </div> <div class="field-row"> <div class="field-group"> <label>IPO Credit</label> <input type="date" name="ipo_credit" class="form-control" value="<?php echo $today; ?>"> </div> <div class="field-group"> <label>IPO Listing</label> <input type="date" name="ipo_listing" class="form-control" value="<?php echo $today; ?>"> </div> </div> </div> <!-- Step 3: Financials --> <div class="step"> <div class="step-title">Financial Details</div> <div class="step-subtitle">Pricing and subscription information</div> <div class="field-row"> <div class="field-group"> <label>Offer Price</label> <input type="text" name="o_price" class="form-control" placeholder="₹100 - ₹120"> </div> <div class="field-group"> <label>Minimum Application</label> <input type="text" name="m_application" class="form-control" placeholder="₹14,400"> </div> </div> <div class="field-group"> <label>GMP</label> <input type="text" name="GMP" class="form-control" value="More Details Awaited"> </div> <div class="field-group"> <label>Subscription</label> <textarea name="subscription" class="form-control" rows="3">NONE</textarea> </div> </div> <!-- Step 4: Status --> <div class="step"> <div class="step-title">Status & Configuration</div> <div class="step-subtitle">Set the IPO status, type, and registrar</div> <div class="field-row"> <div class="field-group"> <label>Status</label> <select name="status" class="form-select"> <option value="PAST">PAST</option> <option value="PRESENT" selected>PRESENT</option> <option value="NEW">NEW</option> </select> </div> <div class="field-group"> <label>Suggestion</label> <select name="suggestion" class="form-select"> <option value="Wait" selected>Wait</option> <option value="Avoid">Avoid</option> <option value="Neutral">Neutral</option> <option value="May Apply">May Apply</option> <option value="Apply">Apply</option> <option value="Must Apply">Must Apply</option> </select> </div> </div> <input type="text" name="date" class="form-control" value="All Info. Education Purpose Only." hidden> <div class="field-group"> <label>Allotment Registrar</label> <select name="allotment" class="form-select"> <option value="https://ipo.bigshareonline.com/IPO_Status.html" selected>Bigshare</option> <option value="https://in.mpms.mufg.com/Initial_Offer/public-issues.html">MUFG - Linkintime</option> <option value="https://ipostatus.kfintech.com/">KFintech Kosmic</option> <option value="https://www.skylinerta.com/ipo.php">Skyline</option> <option value="https://ipostatus1.cameoindia.com/">Cameo</option> <option value="https://www.purvashare.com/investor-service/ipo-query">Purva</option> <option value="https://maashitla.com/allotment-status/public-issues">Maashitla</option> <option value="https://www.masserv.com/opt.asp">Mas Services</option> <option value="https://www.satellitecorporate.com/ipo-query.php">Satellite Corporate</option> <option value="http://ipo.alankit.com/">Alankit</option> <option value="https://ipostatus.integratedregistry.in/RegistrarsToSTANew.aspx?od=2">Integrated Registry</option> <option value="https://mudrarta.com/ipo.php">Mudra RTA</option> </select> </div> <div class="field-row"> <div class="field-group"> <label>IPO Number (NO)</label> <input type="number" name="NO" class="form-control" placeholder="e.g. 42"> </div> <div class="field-group"> <label>IPO Type</label> <select name="TYPE" class="form-select"> <option value="S" selected>SME</option> <option value="M">Mainline</option> </select> </div> </div> <div class="field-group"> <label>IPO Page URL</label> <textarea name="url" class="form-control" rows="2">NONE</textarea> </div> </div> <!-- Step 5: Review --> <div class="step"> <div class="step-title">Review & Submit</div> <div class="step-subtitle">Verify all details before saving the IPO</div> <div id="reviewContent" class="markdown-preview"></div> </div> <!-- Navigation --> <div class="nav-buttons"> <button type="button" class="btn-nav btn-prev" id="prevBtn">← Previous</button> <button type="button" class="btn-nav btn-next" id="nextBtn">Next →</button> <button type="submit" class="btn-nav btn-submit d-none" id="submitBtn">✓ Submit IPO</button> </div> </form> </div> </div> <script> const steps = document.querySelectorAll(".step"); const indicators = document.querySelectorAll(".step-indicator div"); const progressBar = document.getElementById("progressBar"); let currentStep = 0; function showStep(step) { steps.forEach((el, i) => { el.classList.toggle("active", i === step); indicators[i].classList.remove("active", "completed"); if (i < step) indicators[i].classList.add("completed"); if (i === step) indicators[i].classList.add("active"); }); progressBar.style.width = ((step) / (steps.length - 1)) * 100 + "%"; document.getElementById("prevBtn").style.display = step === 0 ? "none" : "inline-flex"; document.getElementById("nextBtn").classList.toggle("d-none", step === steps.length - 1); document.getElementById("submitBtn").classList.toggle("d-none", step !== steps.length - 1); if (step === steps.length - 1) fillSummary(); } function fillSummary() { const form = document.getElementById("ipoForm"); const formData = new FormData(form); let html = '<div class="review-grid">'; for (const [key, value] of formData.entries()) { if (value && key !== 'date') { html += `<div class="review-item"> <span class="review-key">${key.replace(/_/g, ' ')}</span> <span class="review-val">${value || '—'}</span> </div>`; } } html += '</div>'; document.getElementById("reviewContent").innerHTML = html; } showStep(currentStep); document.getElementById("nextBtn").addEventListener("click", () => { if (currentStep < steps.length - 1) { currentStep++; showStep(currentStep); window.scrollTo({ top: 0, behavior: 'smooth' }); } }); document.getElementById("prevBtn").addEventListener("click", () => { if (currentStep > 0) { currentStep--; showStep(currentStep); window.scrollTo({ top: 0, behavior: 'smooth' }); } }); </script> <?php if ($showToast): ?> <script> window.onload = () => { const toast = document.createElement("div"); toast.className = "toast-custom"; toast.innerHTML = '✅ IPO Saved Successfully!'; document.body.appendChild(toast); setTimeout(() => toast.remove(), 3500); }; </script> <?php endif; ?> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 8.2.9 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings