Отправить вывод Python в поле HTML

Сейчас я делаю простой проект, используя Raspberry Pi. У меня работает простой сервер Apache 2 с MySQL и несколькими страницами PHP / HTML. Одна из страниц ниже вызывает barcode.php. В barcode.php вы вводите User_ID в поле user_id и нажимаете Enter или кнопку поиска, и он будет искать в базе данных для этого пользователя и отображать информацию и изображение этого пользователя.

Все вышеперечисленное работает вручную и даже со сканером штрих-кода путем сканирования QR-кода. Теперь я хочу интегрировать считыватель RFID (RFID READER RC522). Когда пользователь сканирует свою карту на считывателе, я хочу, чтобы он работал как сканер штрих-кода, вводил числовой код в поле user_id и нажимал клавишу ввода, чтобы страница могла вернуть данные пользователя.

Я новичок в этом. Как я могу реализовать это в моем barcode.php? Где пользователь сканирует, и он поместит это в поле user_id.

Вот barcode.php:

    <?php
        // Initialize the variables
        $user_id   = "";
        $osha      = "";
        $firstname = "";
        $lastname  = "";
        $company   = "";
        $trade     = "";
        $email     = "";
        $picture   = "";
        $reg_date   = "";

        // PHP code to search data in a MySQL database and set it in input text
        if (isset($_POST['search']))
        {
            // Connect to MySQL
            $dbc = mysqli_connect("127.0.0.1", "root", "1234", "demodb");

            // id to search
            $user_id = mysqli_real_escape_string($dbc, $_POST['user_id']);

            $query = "SELECT * FROM Users WHERE user_id = '$user_id' LIMIT 1";
            $rs    = mysqli_query($dbc, $query);
            if (mysqli_num_rows($rs) == 1)
            {
                $row       = mysqli_fetch_array($rs);
                $osha      = $row['osha'];
                $firstname = $row['firstname'];
                $lastname  = $row['lastname'];
                $company   = $row['company'];
                $trade     = $row['trade'];
                $email     = $row['email'];
                $picture   = $row['picture'];
                $reg_date  = $row['reg_date'];

                $query1     = "INSERT INTO scan (user_id, osha, firstname, lastname, company, trade, email, picture) VALUES (" .
                        "'" . $user_id . "'," .
                      "'" . mysqli_real_escape_string($dbc, $osha     ) . "', " .
                      "'" . mysqli_real_escape_string($dbc, $firstname) . "', " .
                      "'" . mysqli_real_escape_string($dbc, $lastname ) . "', " .
                      "'" . mysqli_real_escape_string($dbc, $company  ) . "', " .
                      "'" . mysqli_real_escape_string($dbc, $trade  ) . "', " .
                      "'" . mysqli_real_escape_string($dbc, $email  ) . "', " .
                      "'" . mysqli_real_escape_string($dbc, $picture    ) . "')";
                        mysqli_query($dbc, $query1);
            }
            else
            {
                echo "Undefined ID";
            }
        }
    ?>

    <!DOCTYPE html>
    <html lang = "en">
    <head>
        <title>User Search</title>
        <meta charset = "UTF-8">
        <meta name = "viewport" content = "width=device-width, initial-scale=1">
        <!--===============================================================================================-->
                <link rel = "icon" type = "image/png" href = "images/icons/favicon.ico"/>
        <!--===============================================================================================-->
                <link rel = "stylesheet" type = "text/css" href = "vendor/bootstrap/css/bootstrap.min.css">
        <!--===============================================================================================-->
                <link rel = "stylesheet" type = "text/css" href = "fonts/font-awesome-4.7.0/css/font-awesome.min.css">
        <!--===============================================================================================-->
                <link rel = "stylesheet" type = "text/css" href = "vendor/animate/animate.css">
        <!--===============================================================================================-->
                <link rel = "stylesheet" type = "text/css" href = "vendor/css-hamburgers/hamburgers.min.css">
        <!--===============================================================================================-->
                <link rel = "stylesheet" type = "text/css" href = "vendor/select2/select2.min.css">
        <!--===============================================================================================-->
                <link rel = "stylesheet" type = "text/css" href = "css/util.css">
                <link rel = "stylesheet" type = "text/css" href = "css/main.css">
        <!--===============================================================================================-->

        <style>
            .button {
                background-color: #4CAF50;
                border: none;
                color: white;
                padding: 15px 32px;
                text-align: center;
                text-decoration: none;
                display: inline-block;
                font-size: 16px;
                margin: 4px 2px;
                cursor: pointer;
            }
        </style>
    </head>

    <body>
        <div class = "contact1">
            <div class = "container-contact1">
                <div class = "contact1-pic js-tilt" data-tilt>

                    <?php echo "<img src= '$picture' height='400' width='400' alt='Image not found' onerror=this.onerror=null;this.src='images/scanbarcode.png';  >" ?>

                </div>

                <form action = "barcode.php" method = "post">
                    <div class = "wrap-input1 validate-input" data-validate = "SCAN ID TO SEARCH">
                    <input class = "input1" type = "text" name = "user_id" placeholder = "SCAN ID TO SEARCH" autofocus>
                    <span class = "shadow-input1"></span>
            </div>

            <div class = "wrap-input1 validate-input" >
                <input class = "input1" type = "text" name = "osha" placeholder = "OSHA #" value = "<?= htmlspecialchars($osha) ?>">
                <span class = "shadow-input1"></span>
            </div>

            <div class = "wrap-input1 validate-input" >
                <input class = "input1" type = "text" name = "firstname" placeholder = "First Name"  value = "<?= htmlspecialchars($firstname) ?>">
                <span class = "shadow-input1"></span>
            </div>

            <div class = "wrap-input1 validate-input" >
                <input class = "input1" type = "text" name = "lastname" placeholder = "Last Name"  value = "<?= htmlspecialchars($lastname) ?>">
                <span class = "shadow-input1"></span>
            </div>

            <div class = "wrap-input1 validate-input" >
                <input class = "input1" type = "text" name = "company" placeholder = "Company Name"  value = "<?= htmlspecialchars($company) ?>">
                <span class = "shadow-input1"></span>
            </div>

            <div class = "wrap-input1 validate-input" >
                <input class = "input1" type = "text" name = "trade" placeholder = "Trade Name"  value = "<?= htmlspecialchars($trade) ?>">
                <span class = "shadow-input1"></span>
            </div>

            <input type = "button" onclick = "window.location='auth.php'" class = "button" value = "Admin"/>

            <input type = "submit" name = "search" value = "Find" class = "button" >

            </form>

        </div>
    </div>

    <!--===============================================================================================-->
            <script src = "vendor/jquery/jquery-3.2.1.min.js"></script>
    <!--===============================================================================================-->
            <script src = "vendor/bootstrap/js/popper.js"></script>
            <script src = "vendor/bootstrap/js/bootstrap.min.js"></script>
    <!--===============================================================================================-->
            <script src = "vendor/select2/select2.min.js"></script>
    <!--===============================================================================================-->
            <script src = "vendor/tilt/tilt.jquery.min.js"></script>

            <script >
                    $('.js-tilt').tilt({
                            scale: 1.1
                    })
            </script>
    </body>
    </html>

Вот простой скрипт Python под названием Read.py

#!/usr/bin/env python

import RPi.GPIO as GPIO
import SimpleMFRC522
import MFRC522
import signal

continue_reading = True

reader = SimpleMFRC522.SimpleMFRC522()

def end_read(signal,frame):
    print "Ctrl+C captured, ending read."
    continue_reading = False
    GPIO.cleanup()

signal.signal(signal.SIGINT, end_read)

MIFAREReader = MFRC522.MFRC522()

while continue_reading:
    id, text = reader.read()
    print(id)
    print(text)

На терминале при сканировании карты он возвращает следующие данные:

pi@raspberrypi:/var/www/html/app/RFID/SPI-Py/MFRC522-python $ sudo python Read1.py
140248588882

Я хочу отправить эти числовые данные (140248588882) в поле user_id на моей странице barcode.php. Как я могу этого добиться?

Содержимое HTML не выглядит правильно сформированным (например, перекрытие HTML-тега form и HTML-тега div). Вы можете запустить на нем валидатор WWW.

Peter Mortensen 09.06.2018 07:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
852
3

Ответы 3

Вам нужен клиент для ввода текста в веб-браузер, что не является проблемой PHP.

Обычно сканер штрих-кода действует как HID, поэтому кажется, что он набирает номер и нажимает Enter везде, где вы что-то сканируете. Вы можете либо подключить предупреждающий RFID-ридер, который действует как HID, либо имитировать события клавиатуры из python.

  • Отсортируйте разрешения или передайте данные, чтобы вы могли получить ввод RFID без sudo: для создания событий клавиатуры вы должны работать в графическом сеансе, как вы сами.
  • Вызовите что-то вроде xte из python, который является частью пакета Debian xautomation.

Это быстрый способ, но вы можете создать страницу PHP следующим образом:

<?php
  print `sudo python Read1.py`;

Затем используйте JavaScript на своей главной странице PHP для опроса этого сценария PHP, и если / когда он возвращает действительный идентификатор, вставьте его во входные данные и отправьте форму.

Вероятно, вам следует сделать так, чтобы Read1.py можно было запускать без sudo (возможность PHP запускать sudo без пароля является проблемой безопасности).

Вам также нужно будет иметь дело с тайм-аутом опроса, и в этом случае JavaScript должен просто опросить снова.

Ваша проблема в том, что вам нужен файл Python для отправки штрих-кода в сценарий PHP.

В свой скрипт Python добавьте этот код:

from webbrowser import open as start_webpage
...
...
...
...
if barcode_scanned:
    start_webpage(url + "?user_id = " + str(barcode))

Однако вам нужно сделать user_id параметром GET в barcode.php:

$user_id = $_GET["user_id"]

Другие вопросы по теме