Kleines Lagerprogramm coden
HI Experten,
ich bin gerade dabei mir aus interesse mal PHP und Javascritp anzuschauen. Ich habe jetzt schon einiges (auch dank dieses Forums hinbekommen). Hier mal mein Problem. Ich habe eine Eingabemaske erstellt. In dieser Maske kann ich einen Artikel auswählen und einen Lagerort, beide werden per Dropdown-Menü ausgewählt (beide beziehen ihre Daten aus einer MySQL Tabelle). Es gibt dann noch ein Eingabefeld in welches man eine Menge eingeben kann. Mit einem Klick auf den Speichern Button wird alles in die Datenbank geschrieben. Soweit so Gut.
Jetzt habe ich mir gedacht, das es ja nicht schlecht wäre, wenn man dort auch den Bestand des Artikels ändern kann. Ich habe mir dazu "einfach" gedacht, das man ja nur prüfen muss, ob der Eintrag (bestimmter Artikel an bestimmten Lagerort) schon existriert, ist das der Fall, dann wird nur der Bestand geändert, existiert der Eintrag nicht, dann wird er erstellt.
Dazu wolte ich das ON DUPLICATE KEY UPDATE verwenden. Doof ist jetzt nur, das mein Primärschlüssel eine ID ist und das dort ja nur nach dem Primärschlüssel gesucht wird. Würde Artikel A an Lagerort A1 und ich wollte jetzt diesen Artikel auch nochmal an Lagerort B1 lagern, dann würde das ja garnicht gehen.
Jetzt meine Frage, gibt es da einen guten Workaround für dieses Problem?
Hier auch mal die involvierten Codeschnipsel. BIn auch offen für sonstige Verbesserungsvorschläge.
Hier wird das Dropdown für den Lagerort befüllt
Hier wird das Dropdown für den Artikel befüllt
Hier wird die HTML-Seite gebaut
Danke euch schon mal für die Hilfe
ich bin gerade dabei mir aus interesse mal PHP und Javascritp anzuschauen. Ich habe jetzt schon einiges (auch dank dieses Forums hinbekommen). Hier mal mein Problem. Ich habe eine Eingabemaske erstellt. In dieser Maske kann ich einen Artikel auswählen und einen Lagerort, beide werden per Dropdown-Menü ausgewählt (beide beziehen ihre Daten aus einer MySQL Tabelle). Es gibt dann noch ein Eingabefeld in welches man eine Menge eingeben kann. Mit einem Klick auf den Speichern Button wird alles in die Datenbank geschrieben. Soweit so Gut.
Jetzt habe ich mir gedacht, das es ja nicht schlecht wäre, wenn man dort auch den Bestand des Artikels ändern kann. Ich habe mir dazu "einfach" gedacht, das man ja nur prüfen muss, ob der Eintrag (bestimmter Artikel an bestimmten Lagerort) schon existriert, ist das der Fall, dann wird nur der Bestand geändert, existiert der Eintrag nicht, dann wird er erstellt.
Dazu wolte ich das ON DUPLICATE KEY UPDATE verwenden. Doof ist jetzt nur, das mein Primärschlüssel eine ID ist und das dort ja nur nach dem Primärschlüssel gesucht wird. Würde Artikel A an Lagerort A1 und ich wollte jetzt diesen Artikel auch nochmal an Lagerort B1 lagern, dann würde das ja garnicht gehen.
Jetzt meine Frage, gibt es da einen guten Workaround für dieses Problem?
Hier auch mal die involvierten Codeschnipsel. BIn auch offen für sonstige Verbesserungsvorschläge.
protected function storeData($artikel, $menge, $lagerort, $kommentar)
{
//$sql = "INSERT INTO testLager(artikel,menge,lagerort,kommentar) VALUES('$artikel','$menge','$lagerort','$kommentar');";
$sql = "INSERT INTO testLager(artikel,menge,lagerort,kommentar) VALUES ('$artikel','$menge','$lagerort','$kommentar')
ON DUPLICATE KEY UPDATE menge=menge+'$menge', kommentar='$kommentar';";
if (!$sql) {
throw new Exception('Fehler bei Speichern in Datenbank'.$sql);
}
mysqli_query($this->db, $sql);
}
Hier wird das Dropdown für den Lagerort befüllt
protected function getViewData()
{
$sql = 'SELECT lagerort FROM lagerort ORDER BY lagerort;';
$recordset = $this->db->query($sql);
if (!$recordset) {
throw new Exception('Fehler bei der Datenbank Abfrage'.$sql);
}
$lagerortArray = array();
$i = 0;
while ($lagerort = $recordset->fetch_assoc()) {
$lagerortArray[$i] = $lagerort['lagerort'];
++$i;
}
$recordset->free();
return $lagerortArray;
}
Hier wird das Dropdown für den Artikel befüllt
protected function getArticleData()
{
$sql = 'SELECT material FROM material ORDER BY material;';
$recordset = $this->db->query($sql);
if (!$recordset) {
throw new Exception('Fehler bei der Datenbank Abfrage'.$sql);
}
$itemArray = array();
$i = 0;
while ($item = $recordset->fetch_assoc()) {
$itemArray[$i] = $item['material'];
++$i;
}
$recordset->free();
return $itemArray;
}
Hier wird die HTML-Seite gebaut
protected function generateView()
{
$lagerort = $this->getViewData();
$item = $this->getArticleData();
$this->generatePageHeader('Lager');
$this->generateMenu();
echo <<< showHTML
<h1> Drumcafe Lager </h1>
<small>Mit * gekennzeichnete Felder sind Pflicht</small>
<form method="POST" action="lager.php" onsubmit="return checkIsSet();">
<label class="mobile">
Artikel*<br/>
<!--<input type="text" name="artikel"/>-->
<select name="artikel" size="1">
<option value="1" selected>Auswählen ...</option>
showHTML;
foreach ($item as $key => $value) {
$value = htmlspecialchars($value);
echo <<< showHTML
<option>$value</option>
showHTML;
}
echo <<< showHTML
</select>
</label>
<label class="mobile">
Menge*<br/>
<input type="text" name="menge" size="10"/>
</label>
<label class="mobile">
Lagerort*<br/>
<!--<input type="text" name="lagerort"/>-->
<select name="lagerort" size="1">
<option value="1" selected>Auswählen ...</option>
showHTML;
foreach ($lagerort as $key => $value) {
$value = htmlspecialchars($value);
echo <<< showHTML
<option>$value</option>
showHTML;
}
echo <<< showHTML
</select>
</label>
<label class="mobile">
Kommentar<br/>
<input type="text" name="kommentar"/>
</label>
<!--<input type="submit" class="submit submit1" name="speichern" value="einlagern"/>-->
<button type="submit" class="submit submit1" name="speichern">einlagern</button>
<button type="submit" class="submit submit2" name="auslagern">Auslagern</button>
<!--<input type="submit" class="submit submit2" name="auslagern" value="auslagern"/>-->
</form>
showHTML;
$this->showStockData();
$this->generatePageFooter();
}
Danke euch schon mal für die Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 310375
Url: https://administrator.de/contentid/310375
Ausgedruckt am: 26.11.2024 um 10:11 Uhr
3 Kommentare
Neuester Kommentar
Also im Endeffekt reden wir aktuell von 3 Tabellen
Artikel
Artikelnummer als Primärschlüssel
Beschreibung und was du sonst noch alles drinnen stehen haben willst.
Lagerort
Lagerort Code als Primärschlüssel
Artikelposten
Laufende Nummer als Primärschlüssel
Artikelnummer
Lagerortcode
Menge
Datum / Uhrzeit
Benutzer
eftl Vorgangsnummer und was du sonst noch erfassen willst
Bei jeder Artikelbewegung erstellst du einen neuen Posten der die Artikelbewegung ins Plus oder Minus dokumentiert.
Das sollte dir dann bei der Artikelabfrage helfen
http://stackoverflow.com/questions/15040414/select-sum-and-inner-join
Fall's es noch Probleme kann ich noch nach einem konkreteren Beispiel schauen.
Das Ganze ist natürlich noch ausbaufähig.
Edit: Bei den Buchungen solltest du dann auch noch gleich kontrollieren ob einen negativen Lagerbestand erzeugst und das verhindern.
Artikel
Artikelnummer als Primärschlüssel
Beschreibung und was du sonst noch alles drinnen stehen haben willst.
Lagerort
Lagerort Code als Primärschlüssel
Artikelposten
Laufende Nummer als Primärschlüssel
Artikelnummer
Lagerortcode
Menge
Datum / Uhrzeit
Benutzer
eftl Vorgangsnummer und was du sonst noch erfassen willst
Bei jeder Artikelbewegung erstellst du einen neuen Posten der die Artikelbewegung ins Plus oder Minus dokumentiert.
Das sollte dir dann bei der Artikelabfrage helfen
http://stackoverflow.com/questions/15040414/select-sum-and-inner-join
Fall's es noch Probleme kann ich noch nach einem konkreteren Beispiel schauen.
Das Ganze ist natürlich noch ausbaufähig.
Edit: Bei den Buchungen solltest du dann auch noch gleich kontrollieren ob einen negativen Lagerbestand erzeugst und das verhindern.