springstil
Goto Top

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.


<!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>

Content-Key: 8202243208

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

Printed on: April 28, 2024 at 18:04 o'clock

Member: Xerebus
Xerebus Jan 11, 2024 at 10:02:59 (UTC)
Goto Top
Hallo Springstil
Keine Zeit und kein Geld?

Also lässt du das unentgeltlich jemand erledigen? face-big-smile
Member: Springstil
Springstil Jan 11, 2024 at 10:22:47 (UTC)
Goto Top
Zitat von @Xerebus:

Hallo Springstil
Keine Zeit und kein Geld?

Also lässt du das unentgeltlich jemand erledigen? face-big-smile

Keine zeit stimmt schon mal nicht, es wäre nur schön wenn ich es direkt testen könnte bis dahin und nicht erst einmal ein halbes Jahr warten muss auf die nächste messe....

Und kein Geld? Bevor ich mich selbst daran gewagt habe, habe ich nach jemand gesucht der mir das komplette Skript schreibt. Leider niemand gefunden der Lust darauf hatte ;) passiert bei php.de nun möchte ich gern etwas ändern und nicht alles von vorn beginnen und suche einfach Hilfe. Finde es immer lustig zu sehen wohin die reise geht, immer mehr ala Saturn Geiz ist geil? Wo ich mit Powershell angefangen habe, hat mir ein User viel geholfen und demensprechend hab ich auch gern eine Spende dagelassen gehabt. Gleiches gilt damals für Autoit. Ich bin also absolut niemand der nur nimmt. Ich denke für Hilfestellungen ist ein Forum da, oder hast du bei jeder deiner hilfe rufen die leute bezahlt?
Member: Springstil
Solution Springstil Jan 11, 2024 at 15:52:24 (UTC)
Goto Top
Habs dann auch selber hinbekommen..

$sql2 = "SELECT werbung1,werbung2,werbung3,werbung4,werbung5,werbung6,werbung7,werbung8,werbung9,werbung10  FROM zuteilung WHERE kundennummer = $kundennummer";  
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
    // Fetch the result as an associative array
    $row2 = $result2->fetch_assoc();

    // Füge die Werte der Werbung-Spalten zum $gruppen-Array hinzu
    $gruppen = array($row2['werbung1'], $row2['werbung2'], $row2['werbung3'],$row2['werbung4'],$row2['werbung5']);  
} else {
    // Standardwerte setzen, falls die Abfrage keine Ergebnisse liefert
    $gruppen = array("");  
}

        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>";  

        // Überprüfen, ob die Werbung den gleichen Wert wie $gruppe hat
 if (in_array($row["Werbung"], $gruppen)) {  
            // Setze VE auf '0' und ändere das value der Input-Box  
            echo "<td>". $row["VE"] ."</td>";  
            echo "<td>";  
            echo "<button onclick='decreaseQuantity(\"abnahme_" . $row["ID"] . "\", " . $row["VE"] . ", " . $row["VE"] . ")'>-</button>";  
            echo "<input type='text' name='abnahme_" . $row["ID"] . "' value='" . $row["VE"] . "' style='width: 90px; text-align: center;' data-id='" . $row["ID"] . "' readonly>";  
            echo "<button onclick='increaseQuantity(\"abnahme_" . $row["ID"] . "\", " . $row["VE"] . ", " . $row["VE"] . ")'>+</button>";  
            echo "</td>";  
        } else {
            // Falls die Bedingung nicht erfüllt ist, VE normal ausgeben
            echo "<td>" . $row["VE"] . "</td>";  
            echo "<td>";  
            echo "<button onclick='decreaseQuantity(\"abnahme_" . $row["ID"] . "\", " . $row["VE"] . ", 0)'>-</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"] . ", " . $row["VE"] . ")'>+</button>";  
            echo "</td>";  
        }

        echo "</tr>";  
    }

einfach mal paar stunden was anderes machen hat geholfen :D Ist vielleicht nicht unbedingt schön, aber funktioniert