Member erfassen

This commit is contained in:
aschwarz 2023-04-03 16:35:38 +02:00
parent 70c21a4f10
commit 2fe4e927ff
5 changed files with 754 additions and 5 deletions

View File

@ -0,0 +1,279 @@
<?php
require_once("../config.inc.php");
$function = $_POST['function'];
if ($function == 'checkuser') {
$mail = $_POST['mail'];
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
$mail = $_POST['mail'];
$result = $db->query("SELECT count(*) Anz FROM jumi_chor_saenger WHERE mail = '$mail'");
$row = $result->fetch_array();
if ($row['Anz'] == "0") {
echo '<div class="alert alert-success"><i class="fa fa-fw fa-thumbs-up"></i> Mailadresse ist noch nicht vorhanden!</div>';
} else {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Mailadresse ist im System bereits vorhanden!</div>';
}
#}else{
# echo ""
}
}
#echo "Funktion: $function";
if ($function == 'membersave') {
$vorname = trim($_POST['vorname']);
$nachname = trim($_POST['nachname']);
$mail = trim($_POST['mail']);
$singstimme = $_POST['singstimme'];
$bemerkung = $db->real_escape_string(stripslashes( $_POST['bemerkung'] ));
$result = $db->query("SELECT count(*) Anz FROM jumi_chor_saenger WHERE mail = '$mail'");
$row = $result->fetch_array();
#Fehlercheck
if ($row['Anz'] != "0") {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> User ist im System bereits vorhanden!</div>|***|error';
}
if ($singstimme == '' or $vorname == '' or $nachname == '' or $mail == '') {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Es müssen alle Felder ausgefüllt werden!</div>|***|error';
exit;
}
if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Geben Sie eine gültige Mailadresse ein!</div>|***|error';
exit;
}
$sql1 = $db->query("INSERT INTO jumi_chor_saenger ( vorname
, nachname
, mail
, singstimme
, bemerkung
)
VALUES
( '$vorname'
, '$nachname'
, '$mail'
, '$singstimme'
, '$bemerkung'
)
");
$csid = $db->insert_id;
if (!$sql1) {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Es gab ein Fehler in der Datenbank: Insert Member</div>|***|error';
exit;
}else{
echo '<div class="alert alert-success"><i class="fa fa-fw fa-thumbs-up"></i> S&auml;ngerIn wurde erfasst.</div>|***|success';
exit;
}
}
/*
if ($function == 'userupdate') {
$vorname = trim($_POST['vorname']);
$nachname = trim($_POST['nachname']);
$mail = trim($_POST['mail']);
$rollen = $_POST['rollen'];
$pwdback = $_POST['pwdback'];
$uid = $_POST['uid'];
if (isset($pwdback)) {
if ($pwdback == '1') {
$pwdback = '1';
} else {
$pwdback = '0';
}
} else {
$pwdback = '0';
}
if ($uid == '') {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Die BenutzerID wurde nicht übertragen</div>|***|error';
exit;
}
if ($rollen == '' or $vorname == '' or $nachname == '' or $mail == '') {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Es müssen alle Felder ausgefüllt werden!</div>|***|error';
exit;
}
if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Geben Sie eine gültige Mailadresse ein!</div>|***|error';
exit;
}
$error = 0;
if($pwdback == 1){
require_once("func_genPwd.php");
$password = generateStrongPassword();
$password_md5 = md5($password);
}else{
$result_pwd = $db->query("SELECT passwort FROM jumi_admin WHERE uid = $uid");
$row_pwd = $result_pwd->fetch_array();
$password_md5 = $row_pwd['passwort'];
}
$sql1 = $db->query("UPDATE jumi_admin
SET vorname = '$vorname'
,nachname = '$nachname'
,mail = '$mail'
,passwort = '$password_md5'
WHERE uid = $uid");
if (!$sql1) {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Es gab ein Fehler in der Datenbank: Update User</div>|***|error';
exit;
$error++;
}
$sql2 = $db->query("DELETE FROM jumi_admin_rollen_user_zuord WHERE uid = $uid");
for ($i = 0; $i < sizeof($rollen); $i++) {
$sql2 = $db->query("INSERT INTO jumi_admin_rollen_user_zuord ( rid
, uid
)
VALUES
( '$rollen[$i]'
, '$uid'
)
");
}
if (!$sql2) {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Es gab ein Fehler in der Datenbank: Insert Rollenzuordnung</div>|***|error';
exit;
$error++;
}
if($pwdback == 1){
$empfaenger = "$mail";
$betreff = "Update JU & MI Portal";
$text = "
<html>
<head>
<title>Update JU & MI Portal</title>
</head>
<body>
<font face='Arial' size='2'>
Guten Tag $vorname $nachname!<br><br>
Sie wurden im JU & MI Portal geändert!<br>
Nachfolgend finden Sie Ihre Zugangsdaten:
<br>
<br>
<table>
<tr>
<td valign='top'>
<font face='Arial' size='2'>
<b>Benutzerkennung:</b>
</font>
</td>
<td valign='top'>
<font face='Arial' size='2'>
$mail
</font>
</td>
</tr>
<tr>
<td valign='top'>
<font face='Arial' size='2'>
<b>Passwort:</b>
</font>
</td>
<td valign='top'>
<font face='Arial' size='2'>
$password
</font>
</td>
</tr>
<tr>
<td valign='top'>
<font face='Arial' size='2'>
<b>Login:</b>
</font>
</td>
<td valign='top'>
<font face='Arial' size='2'>
<a href='http://admin.ju-and-mi.de'>http://admin.ju-and-mi.de</a>
</font>
</td>
</tr>
</table>
<br>
Bitte beachten Sie, dass das Passwort zwischen Gro&szlig;- und<br>
Kleinschreibung unterscheidet.
<p>
&Auml;ndern Sie bitte zu Ihrer eigenen Sicherheit das<br>
Passwort nach dem ersten Login unter dem Benutzericon in der Kopfleiste.
<p>
Vielen Dank
</body>
</html>";
$result_absender = $db->query("SELECT wert FROM jumi_parameter WHERE pid = 1");
$row_absender = $result_absender->fetch_array();
if ($row_absender['wert'] == '') {
$absender = 'info@ju-and-mi.de';
} else {
$absender = $row_absender['wert'];
}
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=utf-8\n";
$headers .= "From: Info JU & MI <$absender>\n";
$return = @mail($empfaenger, $betreff, $text, $headers);
if (!$return) { // Abfrage ob Mailversand funktioniert hat
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> BenutzerIn wurde aktualisiert. Es konnte allerdings <b>keine Mail</b> verschickt werden!</div>|***|success';
exit;
} else {
echo '<div class="alert alert-success"><i class="fa fa-fw fa-thumbs-up"></i> BenutzerIn wurde aktualisiert. Eine Mail mit den Zugangsdaten wurde zugestellt.</div>|***|success';
exit;
}
}else{
if ($error == 0) {
echo '<div class="alert alert-success"><i class="fa fa-fw fa-thumbs-up"></i> BenutzerIn wurde aktualisiert.</div>|***|success';
exit;
}else{
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> BenutzerIn wurde nicht aktualisiert.</div>|***|success';
exit;
}
}
}
if ($function == 'disableuser') {
$uid = $_POST['uid'];
$sql1 = $db->query("UPDATE jumi_admin
SET aktiv = '0'
WHERE uid = $uid");
if (!$sql1) {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Es gab ein Fehler in der Datenbank: Disable User</div>|***|error';
exit;
}else{
echo '<div class="alert alert-success"><i class="fa fa-fw fa-thumbs-up"></i> BenutzerIn wurde gesperrt.</div>|***|success';
exit;
}
}
if ($function == 'enableuser') {
$uid = $_POST['uid'];
$sql1 = $db->query("UPDATE jumi_admin
SET aktiv = '1'
WHERE uid = $uid");
if (!$sql1) {
echo '<div class="alert alert-danger"><i class="fa fa-fw fa-thumbs-down"></i> Es gab ein Fehler in der Datenbank: Enable User</div>|***|error';
exit;
}else{
echo '<div class="alert alert-success"><i class="fa fa-fw fa-thumbs-up"></i> BenutzerIn wurde aktiviert.</div>|***|success';
exit;
}
}
*/
?>

View File

@ -0,0 +1,72 @@
<?php
if (!isset($_SESSION)) {
session_start();
}
/*
# Fuer debugging
error_reporting(E_ALL);
ini_set('display_errors', 1);
#echo __LINE__."<br>";
*/
include_once '../classes/TestProjektSmarty.class_subdir.php';
$_SESSION['cur_page'] = $_SERVER['PHP_SELF']; // Fals man Seite direkt aufruft und Autologin funktioniert
require_once("../config.inc.php");
$templatename = substr(basename($_SERVER['PHP_SELF']), 0, -3) . "html";
$smarty = new SmartyAdmin();
if(!rechte(basename(__FILE__), $uid)){
echo "<meta http-equiv=\"refresh\" content=\"0; URL=error.php\">";
exit;
}
require_once "../language/german.inc.php";
if(isset($_GET['action'])){
$action = $_GET['action'];
}else{
$action = '';
}
if($action == ''){
/*
# Daten aufbereiten für Zurückbutton
if(isset($_SESSION["anlegen_vorname"])){
$smarty->assign('user_anlegen_vorname', $_SESSION["anlegen_vorname"]);
}
if(isset($_SESSION["anlegen_nachname"])){
$smarty->assign('user_anlegen_nachname', $_SESSION["anlegen_nachname"]);
}
if(isset($_SESSION["anlegen_mail"])){
$smarty->assign('user_anlegen_mail', $_SESSION["anlegen_mail"]);
}
# Daten aufbereiten für Zurückbutton ENDE
*/
# if(isset($_GET['edituid']) and $_GET['edituid'] != ''){
# # Aus externer Seite edit_user.php
# #echo "<br><br><br><br><br><br><br><br>-----------------------------------------------hier";
# $uid = $_GET['edituid'];
# $smarty->assign('create_edit', $uid);
#
# $result0 = $db->query("SELECT vorname, nachname, mail
# FROM jumi_admin
# WHERE uid = $uid;");
# $row0 = $result0->fetch_array();
# $smarty->assign('member_anlegen_vorname', $row0['vorname']);
# $smarty->assign('member_anlegen_nachname', $row0['nachname']);
# $smarty->assign('member_anlegen_mail', $row0['mail']);
# }
#
}
$smarty->assign('action', "$action");
$smarty->display("$template/dashboard/$templatename");
?>

View File

@ -0,0 +1,169 @@
function checkUser(){
var mail = document.getElementById("mail").value;
$.ajax({
type: 'POST',
url: '../controller/admin_create_member.php',
data: {
'function': 'checkuser',
'mail': mail
},
success: function(result) { //we got the response
if(result!=''){
$('#msg').show().delay(5000).fadeOut(500);
$('#msg').html(result);
}
},
error: function(xhr, status, exception) {
console.log(xhr);
}
});
}
function membersave(){
var vorname = document.getElementById("vorname").value;
var nachname = document.getElementById("nachname").value;
var mail = document.getElementById("mail").value;
var bemerkung =tinyMCE.get('bemerkung').getContent()
//var my_data = $("form").serialize();
//komma getrennte Werte bei Mehrfachauswahl
var singstimme = $("#singstimme").val();
$.ajax({
type: 'POST',
url: '../controller/admin_create_member.php',
data: {
'function': 'membersave',
'vorname': vorname,
'nachname': nachname,
'mail': mail,
'singstimme': singstimme,
'bemerkung': bemerkung
},
success: function(result) { //we got the response
if(result!=''){
var a = result.split('|***|');
if(a[1]=="success"){
document.getElementById("vorname").value ="";
document.getElementById("nachname").value ="";
document.getElementById("mail").value ="";
tinymce.get("bemerkung").setContent("");
var elements = document.getElementById("singstimme").options;
for(var i = 0; i < elements.length; i++){
elements[i].selected = false;
}
}
$('#msg1').show().delay(10000).fadeOut(500);
$('#msg1').html(a[0]);
}
},
error: function(xhr, status, exception) {
console.log(xhr);
}
});
}
/*
function userupdate(uid){
var vorname = document.getElementById("vorname").value;
var nachname = document.getElementById("nachname").value;
var mail = document.getElementById("mail").value;
var pwdback = document.getElementById("pwdback");
if(pwdback.checked == true){
var var_pwdback = 1;
}else{
var var_pwdback = 0;
}
//var my_data = $("form").serialize();
//komma getrennte Werte bei Mehrfachauswahl
var rollen = $("#rollen").val();
$.ajax({
type: 'POST',
url: '../controller/admin_create_member.php',
data: {
'function': 'userupdate',
'vorname': vorname,
'nachname': nachname,
'mail': mail,
'rollen': rollen,
'pwdback': var_pwdback,
'uid': uid
},
success: function(result) { //we got the response
if(result!=''){
var a = result.split('|***|');
if(a[1]=="success"){
$(document).ajaxStop(function(){
setTimeout(() => { window.location = "edit_user.php"; }, 1000);
});
}
$('#msg1').show().delay(10000).fadeOut(500);
$('#msg1').html(a[0]);
}
},
error: function(xhr, status, exception) {
console.log(xhr);
}
});
}
function disableuser(uid){
$.ajax({
type: 'POST',
url: '../controller/admin_create_member.php',
data: {
'function': 'disableuser',
'uid': uid
},
success: function(result) { //we got the response
if(result!=''){
var a = result.split('|***|');
if(a[1]=="success"){
$(document).ajaxStop(function(){
setTimeout(() => { window.location = "edit_user.php"; }, 1000);
});
}
$('#msg').show().delay(10000).fadeOut(500);
$('#msg').html(a[0]);
}
},
error: function(xhr, status, exception) {
console.log(xhr);
}
});
}
function enableuser(uid){
$.ajax({
type: 'POST',
url: '../controller/admin_create_member.php',
data: {
'function': 'enableuser',
'uid': uid
},
success: function(result) { //we got the response
if(result!=''){
var a = result.split('|***|');
if(a[1]=="success"){
$(document).ajaxStop(function(){
setTimeout(() => { window.location = "edit_user.php"; }, 1000);
});
}
$('#msg').show().delay(10000).fadeOut(500);
$('#msg').html(a[0]);
}
},
error: function(xhr, status, exception) {
console.log(xhr);
}
});
}
*/

View File

@ -0,0 +1,229 @@
{if $action == ''}
<!DOCTYPE html>
<html lang="de">
<head>
<title>JU & MI Benutzer erstellen</title>
<link rel="stylesheet" href="../jquery/jquery-ui.css">
<link rel="stylesheet" href="../jquery/jquery.timepicker.min.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="../bootstrap/node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="../bootstrap/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<!-- nochmals bootstrap.css mit Erweiterungen vom Dashboard -->
<link href="css/styles.css" rel="stylesheet" />
<!-- icons in nav-->
<script src="js/all.js" crossorigin="anonymous"></script>
<script src="../jquery/jquery-3.4.1.min.js"></script>
<link rel="stylesheet" href="../bootstrap/node_modules/bootstrap-icons/font/bootstrap-icons.css">
<style>
.multiselect-container {
position: absolute;
list-style-type: none;
margin: 5px 0 0 0;
width: 100%;
padding: 10px 0;
border: none;
-webkit-box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14);
-moz-box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14);
box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14); }
.multiselect-container .input-group {
margin: 5px; }
.multiselect-container > li {
padding: 0;
font-size: 14px; }
.multiselect-container > li > a.multiselect-all label {
font-weight: 700;
color: gray; }
.multiselect-container > li.multiselect-group label {
margin: 0;
padding: 3px 20px 3px 20px;
height: 100%;
font-weight: 700; }
.multiselect-container > li.multiselect-group-clickable label {
cursor: pointer; }
.multiselect-container > li > a {
padding: 5px 0;
color: #000;
display: block; }
.multiselect-container > li > a > label {
display: block;
position: relative;
padding-left: 20px;
margin-bottom: 12px;
cursor: pointer;
font-size: 16px;
font-weight: 500;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.multiselect-container > li > a > label:before {
content: "";
display: inline-block;
position: relative;
height: 20px;
width: 20px;
border: 2px solid rgba(0, 0, 0, 0.2);
border-radius: 4px;
background-color: transparent;
margin-right: 15px;
vertical-align: middle; }
.multiselect-container > li.active > a > label:before {
font-family: 'fontAwesome';
content: "\f00c";
color: #fff;
background-color: #52de97;
border: 0;
display: inline-block;
padding: 0;
line-height: 1.2;
padding-left: 2px; }
.multiselect-container > li > a > label.radio, .multiselect-container > li > a > label.checkbox {
margin: 0; }
.multiselect-container > li > a > label > input[type=checkbox] {
position: absolute;
opacity: 0;
cursor: pointer;
height: 0;
width: 0; }
.btn-group > .btn-group:nth-child(2) > .multiselect.btn {
border-top-left-radius: 4px;
border-bottom-left-radius: 4px; }
.form-inline .multiselect-container label.checkbox, .form-inline .multiselect-container label.radio {
padding: 3px 20px 3px 40px; }
.form-inline .multiselect-container li a label.checkbox input[type=checkbox],
.form-inline .multiselect-container li a label.radio input[type=radio] {
margin-left: -20px;
margin-right: 0; }
.btn-group {
height: 52px;
width: calc(100% - 150px); }
.btn-group button {
border-radius: 4px;
background: #fff;
-webkit-box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14);
-moz-box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14);
box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14);
padding: 0 10px;
text-align: left;
position: relative; }
.btn-group button:after {
position: absolute;
top: 50%;
right: 20px;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
color: #999999; }
.btn-group button:focus {
-webkit-box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14);
-moz-box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14);
box-shadow: 0px 10px 23px -16px rgba(0, 0, 0, 0.14);
padding: 0 10px; }
.sl {
color: gray;
width: 150px; }
</style>
</head>
<body class="sb-nav-fixed">
<div id="navtop"></div>
{literal}
<script>
$(function(){
// im Navbar muss der toggle in der Callbackfunktion definiert werden. Sonst findet jquery getelementbyID nicht
$("#navtop").load('navtop.php', null, function(){$.getScript('js/scripts.js');});
$("#navleft").load("nav.php");
$("#footer").load("footer.php");
});
</script>
{/literal}
<div id="layoutSidenav">
<!-- Navigation left -->
<div id="navleft"></div>
<div id="layoutSidenav_content">
<main>
<!--Anwendung-->
<script src="../js/components/admin_create_member.js"></script>
<div class="container-fluid">
<div class="card">
<div class="card-header">
<i class="fas fa-edit me-1"></i>
S&auml;ngerIn erfassen
</div>
<div class="card-body">
<div class="row">
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-12 col-md-4">Vorname:</div>
<div class="col-12 col-md-8"><input type="text" class="form-control" name="vorname" id="vorname" value="{$member_anlegen_vorname}"></div>
</div>
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-12 col-md-4">Nachname:</div>
<div class="col-12 col-md-8"><input type="text" class="form-control" name="nachname" id="nachname" value="{$member_anlegen_nachname}"></div>
</div>
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-12 col-md-4">Mailadresse:</div>
<div class="col-12 col-md-8"><input type="email" class="form-control" name="mail" id="mail" value="{$member_anlegen_mail}" onkeyup="checkUser()"></div>
</div>
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-12 col-md-4">Singstimme:</div>
<div class="col-12 col-md-8">
<select name="singstimme"class="form-control" id="singstimme">
<option value="1">Sopran</option>
<option value="2">Alt</option>
<option value="3">Tenor</option>
<option value="4">Ba&szlig;</option>
</select>
</div>
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-12 col-md-4">Bemerkung:</div>
<div class="col-12 col-md-8">
<div class="form-group">
<textarea id="bemerkung"></textarea>
</div>
</div>
</div>
</div>
<p align='center'>
<button class="col-6 btn btn-primary btn-sm mt-3" id="save" onclick="membersave();">Speichern</button>
</p>
</div>
</div>
</div>
<div id="msg"></div>
<div id="msg1"></div>
</main>
<script src="https://cdn.tiny.cloud/1/1rbpdpgs5ibxxotsljroj6rzz4t6v4akerjkdj7tuzdzlic6/tinymce/6/tinymce.min.js" referrerpolicy="origin"></script>
<script>
tinymce.init({
selector: 'textarea#bemerkung',
height: 200,
skin: 'bootstrap',
plugins: 'lists, link',
toolbar: 'h1 h2 bold italic strikethrough blockquote bullist numlist backcolor | link | removeformat help',
menubar: false,
});
</script>
<!-- footer -->
<div id="footer"></div>
</div>
</div>
</body>
</html>
{/if}

View File

@ -70,31 +70,31 @@
</div>
<div class="card-body">
<div class="row">
<div class="row mt-0 mt-sm-4 mb-0 mb-sm-4">
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-12 col-md-4">Titel:</div>
<div class="col-12 col-md-8">
<input type="text" id="titel" class="form-control rounded-right" required>
</div>
</div>
<div class="row mt-0 mt-sm-4 mb-0 mb-sm-4">
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-12 col-md-4">Verlag:</div>
<div class="col-12 col-md-8">
<input type="text" id="verlag" class="form-control rounded-right" required">
</div>
</div>
<div class="row mt-0 mt-sm-4 mb-0 mb-sm-4">
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-12 col-md-4">Anzahl Lizenzen:</div>
<div class="col-12 col-md-8">
<input type="text" id="anz_lizenzen" class="form-control rounded-right" required">
</div>
</div>
<div class="row mt-0 mt-sm-4 mb-0 mb-sm-4">
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<div class="col-8 col-md-4">Streamlizenz vorhanden:</div>
<div class="col-4 col-md-8">
<input class="form-check-input" type="checkbox" name="streamlizenz" id="streamlizenz" value="1">
</div>
</div>
<div class="row mt-0 mt-sm-4 mb-0 mb-sm-4">
<div class="row mt-2 mt-sm-4 mb-2 mb-sm-4">
<label for="formFile" class="form-label">
<div class="col-12 col-md-4">PDF:</div>
<div class="col-12col-md-8">