mirror of
https://github.com/Alvin-Zilverstand/Spik-en-span.git
synced 2026-03-06 13:26:49 +01:00
Enhance QR code generation and scanner UI: increase QR code size, improve scanner layout, and add video element styling
This commit is contained in:
@@ -44,7 +44,7 @@ $qrCodes = []; // Array to store QR code URLs for email attachment
|
|||||||
// Insert one ticket per row and generate QR codes
|
// Insert one ticket per row and generate QR codes
|
||||||
for ($i = 0; $i < $quantity; $i++) {
|
for ($i = 0; $i < $quantity; $i++) {
|
||||||
$ticket_id = bin2hex(random_bytes(16)); // Generate a 32-character unique ticket ID
|
$ticket_id = bin2hex(random_bytes(16)); // Generate a 32-character unique ticket ID
|
||||||
$qrCodeUrl = "https://api.qrserver.com/v1/create-qr-code/?size=250x250&data=" . urlencode($ticket_id); // Generate QR code link
|
$qrCodeUrl = "https://api.qrserver.com/v1/create-qr-code/?size=500x500&data=" . urlencode($ticket_id); // Generate QR code link
|
||||||
$one_ticket_quantity = 1; // Each row represents one ticket
|
$one_ticket_quantity = 1; // Each row represents one ticket
|
||||||
$stmt->bind_param("ssssss", $ticket_id, $name, $email, $category, $one_ticket_quantity, $qrCodeUrl);
|
$stmt->bind_param("ssssss", $ticket_id, $name, $email, $category, $one_ticket_quantity, $qrCodeUrl);
|
||||||
if (!$stmt->execute()) {
|
if (!$stmt->execute()) {
|
||||||
|
|||||||
11
qr/qr.html
11
qr/qr.html
@@ -9,13 +9,14 @@
|
|||||||
<script src="https://rawgit.com/sitepoint-editors/jsqrcode/master/src/qr_packed.js"></script>
|
<script src="https://rawgit.com/sitepoint-editors/jsqrcode/master/src/qr_packed.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container mt-5">
|
<div class="container mt-5 text-center">
|
||||||
<h1 class="text-center">QR Scanner Page</h1>
|
<h1 class="text-center">QR Scanner</h1>
|
||||||
<a id="btn-scan-qr">
|
<a id="btn-scan-qr">
|
||||||
<img src="https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2017/07/1499401426qr_icon.svg">
|
<img src="https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2017/07/1499401426qr_icon.svg" alt="QR Icon">
|
||||||
</a>
|
</a>
|
||||||
<canvas hidden="" id="qr-canvas"></canvas>
|
<video id="video" hidden autoplay playsinline></video>
|
||||||
<div id="qr-result" hidden="">
|
<canvas hidden id="qr-canvas"></canvas>
|
||||||
|
<div id="qr-result" hidden>
|
||||||
<b>Data:</b> <span id="outputData"></span>
|
<b>Data:</b> <span id="outputData"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,15 +2,17 @@ const btnScanQR = document.getElementById('btn-scan-qr');
|
|||||||
const qrCanvas = document.getElementById('qr-canvas');
|
const qrCanvas = document.getElementById('qr-canvas');
|
||||||
const qrResult = document.getElementById('qr-result');
|
const qrResult = document.getElementById('qr-result');
|
||||||
const outputData = document.getElementById('outputData');
|
const outputData = document.getElementById('outputData');
|
||||||
|
const video = document.getElementById('video');
|
||||||
|
|
||||||
btnScanQR.addEventListener('click', () => {
|
btnScanQR.addEventListener('click', () => {
|
||||||
|
btnScanQR.hidden = true; // Hide the QR code icon
|
||||||
|
video.hidden = false; // Show the video element
|
||||||
qrCanvas.hidden = false;
|
qrCanvas.hidden = false;
|
||||||
qrResult.hidden = true;
|
qrResult.hidden = true;
|
||||||
|
|
||||||
const context = qrCanvas.getContext('2d');
|
const context = qrCanvas.getContext('2d');
|
||||||
navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } })
|
navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } })
|
||||||
.then((stream) => {
|
.then((stream) => {
|
||||||
const video = document.createElement('video');
|
|
||||||
video.srcObject = stream;
|
video.srcObject = stream;
|
||||||
video.setAttribute('playsinline', true); // Required to work on iOS
|
video.setAttribute('playsinline', true); // Required to work on iOS
|
||||||
video.play();
|
video.play();
|
||||||
@@ -26,6 +28,7 @@ btnScanQR.addEventListener('click', () => {
|
|||||||
outputData.innerText = qrCodeData;
|
outputData.innerText = qrCodeData;
|
||||||
qrResult.hidden = false;
|
qrResult.hidden = false;
|
||||||
qrCanvas.hidden = true;
|
qrCanvas.hidden = true;
|
||||||
|
video.hidden = true; // Hide the video element after scanning
|
||||||
stream.getTracks().forEach(track => track.stop());
|
stream.getTracks().forEach(track => track.stop());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
requestAnimationFrame(scan);
|
requestAnimationFrame(scan);
|
||||||
|
|||||||
@@ -50,3 +50,13 @@ html {
|
|||||||
max-width: 700px;
|
max-width: 700px;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#video {
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 400px;
|
||||||
|
border: 2px solid white;
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user