Bestehendes PHP Skript erweitern
Hallo zusammen,
ich bin am verzweifeln und der Aufgabe sehr nah...
Ich hab ein PHP Skript zusammen gebaut um allen sehr viel Arbeit auf der Messe zu erleichtern und Digital Arbeiten zu können.
Die Aufgabe war es anfangs nur die Artikel dazustellen und das der Handelsvertreter die Mengen hoch und runter schalten kann. Beim speichern wird dies in die Datenbank geschrieben und ich kann diese von da ins System Importieren. Das klappt auch alles super. Die Kundennummer wird auch automatisch mit übergeben.
Jetzt muss ich das aber umbauen weil es Zuteilungen gibt. Das bedeutet das diese Kunde bestimmte Artikel nehmen MUSS! Die Artikel sind in "Werbungen" unterteilt. Meine Idee war nun, eine weitere Datenbank Tabelle zu erstellen (Zuteilung) Der Aufbau ist wie folgt:
Aufbau Zuteilung
Nun war meine Idee dahinter, ich prüfen möchte ob die Kundennummer in dieser Tabelle vorhanden ist, und wenn ja ob Werbung1 gefüllt ist, wenn ja soll er in die vme1 Datenbank schauen und jeden jeden Artikel der das aus werbung1(oder 2 oder 3...) enthält die VE schon vorgeben. Wenn Kundennummer nicht vorkommt, bzw der Kunde nicht mit drin ist einfach weiterhin 0 anzeigen. Dann kann der Kunde selbst entscheiden ob er es möchte.
die Tabelle vme1 wo die Artikel und Preise drin stehen sieht wie folgt aus:
Vme1
Ich bekomme es leider absolut nicht hin... Und mir läuft gerade die zeit davon :D Nächste Woche beginnt die messe und ich würde das Zugern auf der Messe nutzen können. Ich hoffe mir kann jemand helfen.
ich bin am verzweifeln und der Aufgabe sehr nah...
Ich hab ein PHP Skript zusammen gebaut um allen sehr viel Arbeit auf der Messe zu erleichtern und Digital Arbeiten zu können.
Die Aufgabe war es anfangs nur die Artikel dazustellen und das der Handelsvertreter die Mengen hoch und runter schalten kann. Beim speichern wird dies in die Datenbank geschrieben und ich kann diese von da ins System Importieren. Das klappt auch alles super. Die Kundennummer wird auch automatisch mit übergeben.
Jetzt muss ich das aber umbauen weil es Zuteilungen gibt. Das bedeutet das diese Kunde bestimmte Artikel nehmen MUSS! Die Artikel sind in "Werbungen" unterteilt. Meine Idee war nun, eine weitere Datenbank Tabelle zu erstellen (Zuteilung) Der Aufbau ist wie folgt:
Aufbau Zuteilung
Nun war meine Idee dahinter, ich prüfen möchte ob die Kundennummer in dieser Tabelle vorhanden ist, und wenn ja ob Werbung1 gefüllt ist, wenn ja soll er in die vme1 Datenbank schauen und jeden jeden Artikel der das aus werbung1(oder 2 oder 3...) enthält die VE schon vorgeben. Wenn Kundennummer nicht vorkommt, bzw der Kunde nicht mit drin ist einfach weiterhin 0 anzeigen. Dann kann der Kunde selbst entscheiden ob er es möchte.
die Tabelle vme1 wo die Artikel und Preise drin stehen sieht wie folgt aus:
Vme1
Ich bekomme es leider absolut nicht hin... Und mir läuft gerade die zeit davon :D Nächste Woche beginnt die messe und ich würde das Zugern auf der Messe nutzen können. Ich hoffe mir kann jemand helfen.
<!DOCTYPE html>
<html>
<head>
<title>Produktbestellung</title>
<style>
/* Allgemeine Textgröße erhöhen */
body {
font-size: 20px; /* Passen Sie die Schriftgröße nach Bedarf an */
}
/* Schriftgröße für Überschriften erhöhen */
h1 {
font-size: 35px; /* Passen Sie die Schriftgröße für Überschriften an */
}
/* Schriftgröße für Tabellenüberschriften erhöhen */
th {
font-size: 35px; /* Passen Sie die Schriftgröße für Tabellenüberschriften an */
}
/* Schriftgröße für Tabellentext erhöhen */
td {
font-size: 35px; /* Passen Sie die Schriftgröße für Tabellentext an */
}
/* CSS-Stil, um Bilder Pixel zu begrenzen */
.product-image img {
width: 150px;
height: 150px;
}
/* CSS-Stil, um Tabellelemente zu umrahmen */
table {
border-collapse: collapse;
width: 110%;
text-align: center;
}
th, td {
border: 1px solid #ddd;
padding: 10px 1px;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
th {
background-color: #4CAF50;
color: white;
}
@media screen and (max-width: 800px) {
th, td {
white-space: break-word; /* Erlaubt Textumbruch innerhalb von Zellen */
word-wrap: break-word; /* Unterstützt den Textumbruch */
}
/* CSS-Stil für Plus- und Minus-Knöpfe auf kleinen Bildschirmen */
td:nth-child(3) {
word-break: break-all;
max-width: 30px;
}
}
button {
width: 90px; /* Ändern Sie die Breite nach Bedarf */
height: 200px; /* Ändern Sie die Höhe nach Bedarf */
font-size: 50px; /* Ändern Sie die Schriftgröße nach Bedarf */
margin-right: 20px; /* Fügt Abstand zwischen den Schaltflächen und dem Textfeld hinzu */
margin-left: 20px; /* Fügt Abstand zwischen den Schaltflächen und dem Textfeld hinzu */
}
button.save-button {
width: 150px; /* Passen Sie die Breite nach Bedarf an */
height: 60px; /* Passen Sie die Höhe nach Bedarf an */
font-size: 24px; /* Ändern Sie die Schriftgröße nach Bedarf */
background-color: #4CAF50; /* Hintergrundfarbe ändern */
color: white; /* Schriftfarbe ändern */
}
/* Stil für die Kundennummer */
label[for="kundennummer"] {
font-size: 24px; /* Ändern Sie die Schriftgröße nach Bedarf */
}
/* Stil für das Textfeld */
input[type="text"] {
width: 100px; /* Passen Sie die Breite nach Bedarf an */
height: 40px; /* Passen Sie die Höhe nach Bedarf an */
font-size: 30px; /* Passen Sie die Schriftgröße nach Bedarf an */
}
}
</style>
</head>
<body>
<h1>Produkte</h1>
<table>
<thead>
<tr>
<th>Bild</th>
<th>Art</th>
<th>Preis</th>
<th>VE</th>
<th>Abnahme</th>
</tr>
</thead>
<tbody>
<?php
// Stelle die Verbindung zur Datenbank her (ersetze diese Informationen entsprechend).
$servername = "localhost";
$username = "***";
$password = "****";
$dbname = "mysql";
$conn = new mysqli($servername, $username, $password, $dbname);
// Überprüfe die Verbindung auf Fehler.
if ($conn->connect_error) {
die("Verbindung zur Datenbank fehlgeschlagen: " . $conn->connect_error);
}
// SQL-Abfrage, um Produkte aus der Datenbank abzurufen und nach "Werbung" zu sortieren.
$sql = "SELECT Werbung, Artikelnummer, Preis, VE, Bild, ID FROM vme1 ORDER BY Werbung, Artikelnummer";
$result = $conn->query($sql);
$currentWerbung = null;
while ($row = $result->fetch_assoc()) {
if ($currentWerbung != $row["Werbung"]) {
// Neue Werbung-Gruppe beginnt, eine Überschrift oder etwas Ähnliches ausgeben
echo "<tr>";
echo "<th colspan='6'>" . $row["Werbung"] . "</th>";
echo "</tr>";
$currentWerbung = $row["Werbung"];
}
echo "<tr>";
// Hier den Rest der Tabellenzeile wie zuvor ausgeben
echo "<td class='product-image'><img src='" . $row["Bild"] . "' alt='Produktbild'></td>";
echo "<td data-id='" . $row["ID"] . "'>" . $row["Artikelnummer"] . "</td>";
echo "<td>" . $row["Preis"] . " €</td>";
echo "<td>" . $row["VE"] . "</td>";
echo "<td>";
echo "<button onclick='decreaseQuantity(\"abnahme_" . $row["ID"] . "\", " . $row["VE"] . ")'>-</button>";
echo "<input type='text' name='abnahme_" . $row["ID"] . "' value='0' style='width: 90px; text-align: center;' data-id='" . $row["ID"] . "' readonly>";
echo "<button onclick='increaseQuantity(\"abnahme_" . $row["ID"] . "\", " . $row["VE"] . ")'>+</button>";
echo "</td>";
echo "</tr>";
}
// Datenbankverbindung schließen.
$conn->close();
?>
<tr>
<td colspan="5" id="totalPrice">Gesamtpreis: €<span id="currentTotalPrice">0.00</span></td>
</tr>
</tbody>
</table>
<!-- Kundennummer-Feld und Speichern-Button -->
<div>
<label for="kundennummer">Kundennummer:</label>
<input type="text" id="kundennummer" name="kundennummer" readonly>
<button class="save-button" onclick="speichern()">Speichern</button>
</div>
<script>
// Funktion zum Extrahieren und Setzen der Kundennummer
function setzeKundennummer() {
// Die URL des aktuellen Dokuments abrufen
var url = window.location.href;
// Den Query-String aus der URL extrahieren
var query = url.split('?')[1];
// Den Query-String in Parameter aufteilen
var params = new URLSearchParams(query);
// Die Kundennummer aus dem Parameter 'Kundennummer' erhalten
var kundennummer = params.get('Kundennummer');
// Das Textfeld mit der Kundennummer füllen
document.getElementById('kundennummer').value = kundennummer;
}
// Diese Funktion beim Laden der Seite aufrufen, um die Kundennummer zu setzen
window.onload = setzeKundennummer;
// Funktion zum Speichern der Kundennummer (kann entsprechend angepasst werden)
function speichern() {
var kundennummer = document.getElementById('kundennummer').value;
// Hier kannst du den Code zum Speichern der Kundennummer implementieren
console.log('Kundennummer speichern: ' + kundennummer);
window.close();
}
function updateTotalPrice() {
currentTotalPrice = 0.0; // Setze den Gesamtpreis auf null, um von vorne zu beginnen
var rows = document.querySelectorAll("tbody tr");
rows.forEach(function (row) {
var priceCell = row.querySelector("td:nth-child(3)"); // Zelle mit dem Preis
var quantityInput = row.querySelector("input[name^='abnahme']");
if (priceCell && quantityInput) {
var price = parseFloat(priceCell.textContent);
var quantity = parseFloat(quantityInput.value);
if (!isNaN(price) && !isNaN(quantity)) {
currentTotalPrice += price * quantity;
}
}
});
// Hier den Gesamtpreis im HTML-Dokument aktualisieren
var totalCell = document.getElementById("totalPrice");
if (totalCell) {
totalCell.textContent = 'Gesamtpreis: €' + currentTotalPrice.toFixed(2);
}
}
function speichern() {
console.log("Speichern-Funktion aufgerufen");
var kundennummer = document.querySelector("input[name='kundennummer']").value;
console.log("Kundennummer: " + kundennummer);
var bestellungen = [];
var produktRows = document.querySelectorAll("tbody tr");
produktRows.forEach(function (row) {
var tdElement = row.querySelector("td[data-id]");
var id = tdElement ? tdElement.getAttribute("data-id") : "";
var abnahmeInput = row.querySelector("input[name^='abnahme']");
var werbungElement = row.querySelector("td:last-child"); // Letztes TD-Element enthält "Werbung"
if (abnahmeInput !== null) {
var abnahme = parseInt(abnahmeInput.value);
var werbung = werbungElement ? werbungElement.textContent : "";
var artikelnummer = row.querySelector("td[data-id]").textContent; // Hier die Artikelnummer holen
if (!isNaN(abnahme) && abnahme > 0) {
bestellungen.push({
Artikelnummer: artikelnummer, // Änderung des Schlüssels auf "Artikelnummer"
Abnahme: abnahme,
Werbung: werbung,
ID: id
});
}
}
});
console.log("Bestellungen: ", bestellungen);
var xhr = new XMLHttpRequest();
xhr.open("POST", "save_order.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var data = "kundennummer=" + encodeURIComponent(kundennummer) + "&bestellungen=" + encodeURIComponent(JSON.stringify(bestellungen));
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
alert(xhr.responseText);
window.location.href = "http://messesystem/messe/html/de/account.html"; // Hier "erfolg.php" durch die gewünschte URL ersetzen
}
};
xhr.send(data);
}
// JavaScript-Funktion, um die Anzahl der VE zu erhöhen
function increaseQuantity(inputId, ve) {
var inputElement = document.querySelector("input[name='" + inputId + "']");
var currentQuantityElement = document.querySelector("#current_quantity_" + inputId);
var id = inputElement.getAttribute("data-id");
var quantity = parseInt(inputElement.value);
if (!isNaN(quantity)) {
quantity += ve;
inputElement.value = quantity;
if (currentQuantityElement) {
currentQuantityElement.textContent = quantity;
}
// Hier den Gesamtpreis aktualisieren, nachdem die Menge geändert wurde
updateTotalPrice();
}
}
function decreaseQuantity(inputId, ve) {
var inputElement = document.querySelector("input[name='" + inputId + "']");
var currentQuantityElement = document.querySelector("#current_quantity_" + inputId);
var id = inputElement.getAttribute("data-id");
var quantity = parseInt(inputElement.value);
if (!isNaN(quantity) && quantity >= ve) {
quantity -= ve;
inputElement.value = quantity;
if (currentQuantityElement) {
currentQuantityElement.textContent = quantity;
}
// Hier den Gesamtpreis aktualisieren, nachdem die Menge geändert wurde
updateTotalPrice();
}
}
</script>
</body>
</html>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 8202243208
Url: https://administrator.de/contentid/8202243208
Ausgedruckt am: 21.11.2024 um 19:11 Uhr
3 Kommentare
Neuester Kommentar