dantaros
Goto Top

Javascript Variable per Hiddenformular an DB

Hallo zusammen,

über die Suchfunktion habe ich leider nichts passendes gefunden.
Ich bin aktuell noch ein PHP und Javascript Neuling.

Ich habe eine Website mit PHP erstellt, in dem User bestimmte Felder ausfüllen sollen. Die Daten sollen anschließend an eine Datenbank übergeben werden.
Aktuell habe ich zwei Formularfelder (die Übergabe der Variablen funktioniert ohne Probleme) und einen Wert der über vier verschiedene Buttons verändert werden kann.

Die Buttons habe ich mit Javascript gemacht. Den Wert der Javascript Variable "Behalter" möchte ich nun auch übergeben, allerdings scheitert es hier.
Ich habe versucht den Wert in ein Hidden Formularfeld (id="hbehalter") zu schreiben und anschließend per PHP an die Datenbank zu übergeben.
Es wird aber nur der Startwert, in meinem Fall 0, an die Variable übergeben und anschließend in die Datenbank eingetragen.

Ich hoffe ihr könnt mir helfen eine Lösung zu finden mit der ich meinen gewünschten Wert übergeben kann.

Zum Test habe ich aktuell nur einen Wert der über Buttons verändert werden soll, sobald das funktioniert sollen weitere hinzugefügt werden. Das möchte ich über eine Schleife aus den Spaltennamen der Datenbanktabelle realisieren, aber das ist eine andere Geschichte.

Anbei mein Code, der betroffene Wert wird von den Buttons von Zeile 104 bis 144 geändert:

<?php
	require 'inc/db.php';  
	$db->set_charset('utf8');  

	if (isset($_POST['aktion']) and $_POST['aktion']=='speichern') {  
		$Schicht = "";  
		if (isset($_POST['Schicht'])) {  
			$Schicht = trim($_POST['Schicht']);  
		}
		$Mitarbeiternummer = "";  
		if (isset($_POST['Mitarbeiternummer'])) {  
			$Mitarbeiternummer = trim($_POST['Mitarbeiternummer']);  
		}
		$hbehalter = "";  
		if (isset($_POST['hbehalter'])) {  
			$hbehalter = trim($_POST['hbehalter']);  
		}
		$erstellt = date("Y-m-d H:i:s");  
		if ( $Schicht != '' or $Mitarbeiternummer != '' or $hbehalter != '')  
		{
			// speichern
			$einfuegen = $db->prepare("  
					INSERT INTO test (Schicht, Mitarbeiternummer, Behaelter, erstellt) 
					VALUES (?, ?, ?, NOW())
					");  
			$einfuegen->bind_param('sss', $Schicht, $Mitarbeiternummer, $hbehalter);  
			if ($einfuegen->execute()) {
				header('Location: Gespeichert.php?aktion=feedbackgespeichert');  
				die();
				echo "<h1>gespeichert</h1>";  
			}
		}   
	}
	if (isset($_GET['aktion']) and $_GET['aktion']=='feedbackgespeichert') {  
		echo '<p class="feedbackerfolg">Datensatz wurde gespeichert</p>';  
	}
?>
<script>
Behalter = 0;
</script>
<style>
.Button {
	background-color:#bfbfbf;
	-moz-border-radius:28px;
	-webkit-border-radius:28px;
	border-radius:28px;
	border:1px solid #ffffff;
	display:inline-block;
	cursor:pointer;
	color:#000000;
	font-family:Arial;
	font-size:17px;
	padding:5px 8px;
	text-decoration:none;
}
.Button:hover {
	background-color:#8f8f8f;
}
.Button:active {
	position:relative;
	top:1px;
.left {
	text-align: left
}
</style>

<head>

</head>

<body style="font-family: Arial;">  
	<table width="100%">  
		<tr>
			<td	style="background: #009eb8"; height="50em" width="100%">  
			<?php
			echo '<img src="logo.png" alt="Logo">'  
			?>
			</td>
		</tr>
	</table>
	<form action="" method="post">  
		<table width="100%">  
			<tr>
				<td>
					<label for="Schicht">Schicht:  
						<select id="Schicht" name="Schicht" size="1">  
							<option></option>
							<option>Fr&uuml;h</option>
							<option>Sp&auml;t</option>
							<option>Nacht</option>
						</select>
					</label>
				</td>
				<td>
					<label for="Mitarbeiternummer">  
						Mitarbeiternummer:
					</label>
					<input id="Mitarbeiternummer" name="Mitarbeiternummer" type="text" class="left">  
				</td>
			</tr>
		</table>
		<table width="100%">  
		<tr>
			<!-- hier sind die Buttons die einen Wert ändern-->
				<td style="text-align: center; ">  
					<p>Anzahl Beh&auml;lter:</p>
					<input type="hidden" name="hbehalter" id="hbehalter" />  
					<script type="text/javascript">  
						function plusclick1() {
							Behalter += 1;
							document.getElementById("Behalter").innerHTML = Behalter;  
						};
					</script>
					<button class="Button" type="button" onClick="plusclick1()">+1</button>  
					<script type="text/javascript">  
						function plus10click1() {
							Behalter += 10;
							document.getElementById("Behalter").innerHTML = Behalter;  
						};
					</script>
					<button class="Button" type="button" onClick="plus10click1()">+10</button>  
					<p> <a id="Behalter">0</a></p>  
					<script type="text/javascript">  
						function minusclick1() {
						if (Behalter>0) {
							Behalter -= 1;
						}
							document.getElementById("Behalter").innerHTML = Behalter;  
						};
					</script>
					<button class="Button" type="button" onClick="minusclick1()">-1</button>  
					<script type="text/javascript">  
						function minus10click1() {
							Behalter -= 10;
						if (Behalter<0) {
							Behalter = 0;
						}
							document.getElementById("Behalter").innerHTML = Behalter;  
						};
					</script>
					<script>
						document.getElementById("hbehalter").value = Behalter;  
					</script>
					<button class="Button" type="button" onClick="minus10click1()">-10</button>  
				</td>
			</tr>
			<tr>
				<td	style="background: #009eb8"; height="50em" width="100%" display: inline-block; >  
					<div>
						<input class="Button" type="button" value="Startseite" onclick="window.location.replace('Startseite.php')">  
						<input class="Button" type="submit" value="speichern">  
					</div>
				</td>
			</tr>
		</table>
		<input type="hidden" name="aktion" value="speichern">  
	</form>
</body>

Content-Key: 416497

Url: https://administrator.de/contentid/416497

Printed on: April 20, 2024 at 16:04 o'clock

Member: Pedant
Solution Pedant Feb 11, 2019 at 20:05:46 (UTC)
Goto Top
Hallo Dantaros,

Übermittelt werden beim Absenden die Werte von Formularfeldern.
Per Skript musst Du also für Dein hidden-Feld den Wert auf den gewünschten Wert setzen.
document.getElementById("hbehalter").value = Behalter;
In Zeile 142 hast Du das auch geschrieben, aber es ist keiner function zugeordnet und ich sehe nicht wie oder wodurch diese Zeile aufgerufen wird, was aber notwendig ist und direkt vorm Absenden passieren sollte.

Falls dieser Hinweis nicht ausreichend sein sollte, dann solltest Du Deinen Code auf einige wenige Zeilen eindampfen, bis nur noch die fragliche Funktionalität übrig bleibt.
Das hilft Dir bei der Fehlersuche und mir bei der Analyse.

Wenn Du Deinem Formular einen Namen gibst,
<form name="formularname" ...
dann kannst Du die Formularfelder auch einfach über die Namen ansprechen.
document.formularname.feldname.value
getElementById ist aber nicht falsch.

Gruß Frank
Member: Dantaros
Dantaros Feb 14, 2019 at 08:31:42 (UTC)
Goto Top
Sorry für die späte Reaktion von mir.

Vielen Dank für deinen Tipp.
Das mit dem Aufrufen "onsubmit" wusste ich noch nicht.
Nachdem ich das eingebaut habe, wurde der Wert wie gewünscht übergeben. face-smile

Gruß Daniel