Для извлечения параметра `user_id` из URL и передачи его в CGI-скрипт на Python, а затем получения данных из базы данных, вы можете следовать следующему пошаговому процессу.
1. **Извлечение параметра `user_id` из URL**: Используйте уже имеющуюся функцию JavaScript. Вы можете касаться параметра `user_id`, просто изменив имя параметра.
2. **Отправка запроса на CGI-скрипт**: После извлечения `user_id`, отправьте его на ваш CGI-скрипт, используя AJAX.
3. **Обработка на стороне Python**: В вашем CGI-скрипте вы сможете обработать переданный параметр, подключиться к базе данных и вернуть данные на страницу.
Вот пример, как это можно реализовать:
### Шаг 1: HTML и JavaScript
```html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Извлечение user_id</title>
</head>
<body>
<h1>Данные пользователя</h1>
<p id="data-output"></p>
<script>
function getParameterByName(name, url = window.location.search) {
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
// Получить значение параметра 'user_id' из URL
let user_id = getParameterByName("user_id");
let dataOutput = document.getElementById("data-output");
if (user_id) {
// Если параметр найден, отправить его в CGI-скрипт
fetch(`cgi-bin/data.py?user_id=${user_id}`)
.then(response => response.text())
.then(data => {
// Поместить полученные данные на страницу
dataOutput.textContent = data;
})
.catch(error => {
console.error('Ошибка:', error);
dataOutput.textContent = "Произошла ошибка при получении данных.";
});
} else {
dataOutput.textContent = "Параметр 'user_id' не найден в URL.";
}
</script>
</body>
</html>
```
### Шаг 2: Python CGI-скрипт (data.py)
```python
#!/usr/bin/env python3
import cgi
import cgitb
import pymysql
import json
cgitb.enable() # Включение отладки ошибок
print("Content-Type: text/html;charset=utf-8")
print()
# Извлечение параметров
form = cgi.FieldStorage()
user_id = form.getvalue('user_id')
# Проверяем, передан ли user_id
if user_id:
# Соединение с базой данных
try:
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database'
)
cursor = connection.cursor()
cursor.execute("SELECT * FROM users WHERE user_id = %s", (user_id,))
result = cursor.fetchone()
if result:
# Например, допуская, что в результате есть поле 'name'
# Конвертируем данные в JSON и выводим
output = {'success': True, 'data': result}
else:
output = {'success': False, 'message': 'Пользователь не найден'}
except Exception as e:
output = {'success': False, 'message': str(e)}
finally:
cursor.close()
connection.close()
else:
output = {'success': False, 'message': 'Параметр user_id не передан'}
# Возвращаем JSON
print(json.dumps(output))
```
### Заметки:
- Убедитесь, что `data.py` исполняется с корректными правами и путь к интерпретатору Python задан правильно.
- Не забудьте настроить базу данных и таблицы в соответствии с вашими требованиями.
- Код `data.py` обеспечивает базовую обработку ошибок и возвращает данные в формате JSON, вы можете адаптировать его под ваши нужды.